![](https://csdnimg.cn/release/download_crawler_static/86373423/bg1.jpg)
Taobao File System
TFS 为淘宝提供海量小文件存储,通常文件大小不超过 1M,满足了淘宝对
小文件存储的需求,被广泛地应用在淘宝各项应用中。它采用了 HA(High
Available,高可用性集群,双机集群,一般有主备节点)架构和平滑扩容,保证
了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映
射到文件的物理地址,简化了文件的访问流程,一定程度上为 TFS 提供了良好
的读写性能。
TFS 架构设计时需要考虑如下两个问题:
Metadata 信息存储。假设每个文件的元数据 100B,100 亿图片的元数据需
要 1TB,单台机器无法提供元数据服务;
减少图片的 IO 次数:普通 Linux 文件系统中,读取一个文件需要三次磁盘
IO,先读取目录元数据到内存,再把文件的 inode 节点读入内存,最后读取文件
数据到内存。由于小文件数量太多,无法把所有的目录及文件的 inode 信息缓存
到内存中,因此磁盘 IO 次数很难达到每个图片读取只需要一次 IO 理想状态。
TFS 设计时采用的思路:多个逻辑图片文件共享一个物理文件。
TFS 总体结构
一个 TFS 集群由两个 NameServer 节点(一主一备)和多个 DataServer 节点
组成。这些服务程序都是作为一个用户级的程序运行在普通 Linux 机器上的。
在 TFS 中,将大量的小文件(实际数据文件)合并成为一个大文件,这个大文件称
为 块 (Block), 每 个 Block 拥 有 在 集 群 内 唯 一 的 编 号 (Block Id), Block Id 在
NameServer 创建 Block 的时候分配, NameServer 维护 Block 与 DataServer 的关系。
Block 中的实际数据都存储在 DataServer 上。而一台 DataServer 服务器一般会有
多个独立 DataServer 进程存在,每个进程负责管理一个挂载点,这个挂载点一般
是一个独立磁盘上的文件目录,以降低单个磁盘损坏带来的影响。
NameServer 主要功 能是 : 管理维 护 Block 和 DataServer 相关 信息 ,包 括
DataServer 加入、退出,心跳信息,Block 和 DataServer 的对应关系建立、解除。
正常情况下,一个块会在 DataServer 上存在,主 NameServer 负责 Block 的创建、
删除、复制、均衡、整理。NameServer 不负责实际数据的读写,实际数据的读
写由 DataServer 完成。
DataServer 主要功能是: 负责实际数据的存储和读写。
为了考虑容灾,NameServer 采用了 HA 结构,即两台机器互为热备,同时
运行,一台为主,一台为备,主机绑定到对外 vip(Virtual IP),提供服务;当
主机器宕机后,迅速将 vip 绑定至备份 NameServer,将其切换为主机,对外提供
服务。通过心跳机制实现故障检测。
Commented [ZZ1]: 对文件系统真正访问数据的流程还
不是特别的清楚。需要花时间看清楚。