什么是TFS

tfs简单讲解

tfs的架构设计:

TFS(Taobao File System)是一个高可用、高性能、高可扩展的分布式文件系统,基于普通的Linux服务器构建,主要提供海量非结构化数据存储服务。TFS集群由名字服务器(namserver)和数据服务器(dataserver)组成,TFS以数据块(block)为单位存储和组织数据,block大小通常为64M(可配置),TFS会将多个小文件存储在同一个block中,并为block建立索引,以便快速在block中定位文件;每个block会存储多个副本到不同的机架上,以保证数据的高可靠性

tfs的部署方式:

Nameserver服务部署时采用HA来避免单点故障,2台nameserver服务器共享一个vip。正常情况下,主nameserver持有vip提供服务,并将block修改信息同步至备,HA agent负责监控主备nameserver的状态,当其检测到主宕机时,HA agent将vip切换到备上,备就切换为主来接管服务,以保证服务的高可用
Dataserver服务部署时通常会在一台机器上部署多个dataserver进程,每个进程管理一块磁盘,以便充分利用磁盘IO资源。Dataserver启动后,会向nameserver汇报其存储的所有block信息,并周期性的给nameserver发送心跳信息,nameserver则根据心跳来管理所有的dataserver,当nameserver超过一定时间没有收到dataserver的信息,则认为dataserver已经宕机,会将该dataserver上存储的block进行复制,使得block副本数不低于集群配置值,保证系统存储数据的可靠性

tfs的使用方式

tfs的写操作

什么是TFS
如图所示:客户端会向nameserver发送写文件请求,nameserver会分配可写block的位置信息
客户端和提供服务者发送请求 提供者将数据推送给下面的slave传输成功后返回消息给提供者
提供者在返回消息给nameserver,等着ns更新完block的信息后提供者将结果返回给客户端

读操作

1)获得Block ID和File ID
根据TFS文件名解析出Block ID和block中的File ID。

2)获取dataserver地址
向nameserver发送查询请求得到Block ID所在的dataserver地址。
由于nameserver中维护了block和dataserver的对应关系,所以nameserver能够提供相应的信息。
Note: 由于TFS是把大量小文件放在一个block里面,
所以TFS的文件复制是基于block的,而且复制出来的block的block id应该是一致的。

3)请求文件
通过发送Block_ID、File_ID和offset为参数的读请求到对应的dataserver,得到文件内容。
dataserver会根据本地记录的信息来得到File ID所在block的偏移量,从而读取到正确的文件内容。

tfs的应用场景:

TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。主要针对海量的非结构化数据,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。