作者:zyd_com@126.com
博客:ydzhang.blog.chinaunix.net | blog.yunnotes.net
微博:
TFS(Taobao File System)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,TFS由nameserver(NS)、dataserver(DS)、client三个部分组成,详细设计原理参考
TFS适用场景
TFS提供海量文件的可靠存储,尤其适合海量小文件的存储;TFS没有传统文件系统的目录树结构,所有文件处于一个扁平化的名字空间;TFS不支持posix接口,必须通过TFS提供的客户端API(read/write/delete)来读、写、删文件。
TFS最大集群规模
经过实践的最大规模:单集群7PB+存储容量、400+台机器、1000亿+文件(2014年2月数据);理论上最大集群规模受限于NS的内存大小、网络处理能力。
TFS对大文件的支持
TFS最初开发是针对小文件存储,但TFS也提供了大文件的存取接口,支持大文件没有在服务端做任何特殊改动,而是通过在客户端把大文件划分成多个“小文件分片”来存储,TFS大文件最大为140G,主要受限于分片元信息的大小。
TFS对自定义文件名的支持
默认情况下(只部署NS和DS),往TFS存储一个文件后,TFS的客户端会返回一个T开头的文件名,通过该文件名就能从TFS里读到存储的文件。同时TFS支持用户自定义文件名,但需要部署和rootserver,metaserver依赖mysql来存储“用户自定义文件名”到“TFS文件名”的映射关系,rootserver用来管理多个metaserver。
自定义文件名提供create_dir、create_file、ls_dir、write_file、read_file、delete_file等接口。
TFS对文件去重的支持
默认情况下,TFS存储两个内容相同的文件,会得到两个不同的文件名(对应server端的两份数据)。
TFS客户端提供了文件去重存储接口,TFS的去重依赖于(阿里的一个key/value存储系统),在tair里存储(文件md5、size) ==>(TFS文件名)的映射关系。如果使用去重存储接口,客户端首先会根据文件的md5和大小等信息到tair查询一下,看有没有存储过相同内容的文件,如果有直接返回对应的TFS文件;如果tair中没有对应的映射关系,就插入一条新的映射记录,用于去重。
TFS NS单点问题
NS是TFS集群的中心管理节点,TFS通过主备HA的方式来解决单点问题。正常情况下,所有的操作由主NS完成,当主NS服务挂掉时,服务会立即切换到备机。为了保证备机立即能接管服务,TFS做了如下工作:
所有的DS启动后会向主、备NS汇报block信息、并保持心跳
主NS上的block操作会以日志形式记录下来,并后台重放日志将操作同步到备NS
TFS是否支持异地容灾
TFS支持主备集群的模式,在两个机房分别搭建集群,可将其中一个作为主集群,将另一个配置为备集群,所有写入主集群的文件都会同步到备集群。
TFS的一致性语义
新写文件,TFS分配一个文件名,保证该文件的多个副本数据完全一致
更新已存在的文件,不保证文件多个副本一致性(更新不建议使用)
TFS性能如何
不同的工具、不同的测试方法、不同的测试环境得出来的结果都不一样,理论分析下最差情况.
<