TFS 深入分析
版本:1.0
李志杰
2011-10-12
目 录
1 简介..................................................................................................................................................4
1.1 TFS 1.0 版本简介.................................................................................................................4
1.2 TFS 1.3 版本简介.................................................................................................................5
1.2 TFS 2.0 版本简介.................................................................................................................6
2 软件架构..........................................................................................................................................7
2.1 存储机制...............................................................................................................................8
2.2 文件名的结构.......................................................................................................................9
2.3 读写操作...............................................................................................................................9
2.3.1 写操作数据流............................................................................................................9
2.3.2 读操作数据流..........................................................................................................10
2.4 并发机制.............................................................................................................................11
2.5 平滑扩容.............................................................................................................................11
2.6 容错机制.............................................................................................................................12
2.6.1 集群容错..................................................................................................................12
2.6.2 Name Server 容错....................................................................................................12
2.6.3 Data Server 容错......................................................................................................18
3 Name Server 分析..........................................................................................................................18
3.1 类结构分析.........................................................................................................................18
3.1.1 块分布管理..............................................................................................................20
3.1.2 心跳管理..................................................................................................................22
3.1.3 日志管理..................................................................................................................23
3.2 并发模型分析.....................................................................................................................24
3.2.1 主线程......................................................................................................................26
3.2.2 定时器线程..............................................................................................................29
3.2.3 传输线程..................................................................................................................29
3.2.4 主工作线程..............................................................................................................33
3.2.5 HeartManagement 线程...........................................................................................34
3.2.6 MasterAndSlaveHeartManager 线程.......................................................................36
3.2.7 OpLogSyncManager 线程.......................................................................................40
3.2.8 BuildPlanThreadHelper 线程..................................................................................41
3.2.9 RunPlanThreadHelper 线程.....................................................................................42
3.2.10 CheckDataServerThreadHelper 线程....................................................................42
3.3 实现流程分析.....................................................................................................................42
3.3.1 打开文件..................................................................................................................42
3.3.2 关闭文件..................................................................................................................42
4 Data Server 分析............................................................................................................................43
4.1 类结构分析.........................................................................................................................44
4.2 并发模型分析.....................................................................................................................45
4.2.1 主线程......................................................................................................................45
4.2.2 CompactBlockThreadHelper 线程..........................................................................45
4.2.3 HeartBeatThreadHelper 线程..................................................................................45
4.2.4 DoCheckThreadHelper 线程...................................................................................46
4.2.5 DoSyncMirrorThreadHelper 线程...........................................................................46
4.2.6 ReplicateBlockThreadHelper 线程..........................................................................46
4.3 文件目录结构分析.............................................................................................................47
4.3.1 工作目录结构..........................................................................................................47
4.3.2 TFS 目录结构..........................................................................................................48
4.3.3 TFS Layout...............................................................................................................49
4.3.4 超级块文件结构......................................................................................................50
4.3.5 逻辑块 Layout..........................................................................................................51
4.4 实现流程分析.....................................................................................................................51
4.4.1 创建块......................................................................................................................51
4.4.2 删除块......................................................................................................................51
4.4.3 压缩块......................................................................................................................51
4.4.4 打开文件..................................................................................................................51
4.4.5 关闭文件..................................................................................................................52
4.4.6 写文件......................................................................................................................52
4.4.7 读文件......................................................................................................................52
5 AdminServer 分析..........................................................................................................................52
5.1 类结构分析.........................................................................................................................52
5.2 并发模型分析.....................................................................................................................52
5.3 实现流程分析.....................................................................................................................53
1 简介
TFS(Taobao FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布
式文件系统,主要针对海量的非结构化数据,它构筑在普通的 Linux 机器集群上,可为外
部提供高可靠和高并发的存储访问。TFS 为淘宝提供海量小文件存储,通常文件大小不超
过 1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。它采用了 HA
架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,
可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为 TFS 提供了良
好的读写性能。
1.1 TFS 1.0 版本简介
从 2006 年开始,淘宝网决定自己开发一套针对海量小文件存储难题的文件系统,用于
解决自身图片存储的难题。到 2007 年 6 月,TFS(淘宝文件系统,Taobao File System)正式
上 线 运 营 。 在 生 产 环 境 中 应 用 的 集 群 规 模 达 到 了 200 台 PC Server(146G*6 SAS 15K
Raid5),文件数量达到上亿级别;系统部署存储容量: 140 TB;实际使用存储容量: 50 TB;
单台支持随机 IOPS 200+,流量 3MBps。
图 1 TFS1.0 逻辑架构
图为淘宝集群文件系统 TFS 1.0 第一版的逻辑架构:集群由一对 Name Server 和多台
Data Server 构成,Name Server 的两台服务器互为双机,就是集群文件系统中管理节点的概
念。
每个 Data Server 运行在一台普通的 Linux 主机上
以 block 文件的形式存放数据文件(一般 64M 一个 block)
block 存多份保证数据安全
利用 ext3 文件系统存放数据文件
磁盘 raid5 做数据冗余
文件名内置元数据信息,用户自己保存 TFS 文件名与实际文件的对照关系–使得
元数据量特别小。
淘宝 TFS 文件系统在核心设计上最大的取巧的地方就在,传统的集群系统里面元数据
只有 1 份,通常由管理节点来管理,因而很容易成为瓶颈。而对于淘宝网的用户来说,图
片文件究竟用什么名字来保存实际上用户并不关心,因此 TFS 在设计规划上考虑在图片的
保存文件名上暗藏了一些元数据信息,例如图片的大小、时间、访问频次等等信息,包括
所在的逻辑块号。而在元数据上,实际上保存的信息很少,因此元数据结构非常简单。仅
仅只需要一个 fileID,能够准确定位文件在什么地方。
由于大量的文件信息都隐藏在文件名中,整个系统完全抛弃了传统的目录树结构,因
为目录树开销最大。拿掉后,整个集群的高可扩展性极大提高。实际上,这一设计理念和
目前业界的“对象存储”较为类似,淘宝网 TFS 文件系统已经更新到 1.3 版本,在生产系统的
性能已经得到验证,且不断得到了完善和优化,淘宝网目前在对象存储领域的研究已经走
在前列。
1.2 TFS 1.3 版本简介
到 2009 年 6 月,TFS 1.3 版本上线,集群规模大大扩展,部署到淘宝的图片生产系统
上,整个系统已经从原有 200 台 PC 服务器扩增至 440 台 PC Server(300G*12 SAS 15K RPM)
+30 台 PC Server (600G*12 SAS 15K RPM)。支持文件数量也扩容至百亿级别;系统部署存
储容量:1800TB(1.8PB);当前实际存储容量:995TB;单台 Data Server 支持随机 IOPS
900+,流量 15MB+;目前 Name Server 运行的物理内存是 217MB(服务器使用千兆网卡)。
- 1
- 2
- 3
- 4
前往页