淘宝TFS分布式文件系统内部实现

TFS文件名的结构

TFS的文件名由块号和文件号通过某种对应关系组成,最大长度为18字节。文件名固定以T开始,第二字节为该集群的编号(可以在配置项中指定,取值范围 1~9)。余下的字节由Block ID和File ID通过一定的编码方式得到。文件名由客户端程序进行编码和解码,它映射方式如下图:

TFS客户程序在读文件的时候通过将文件名转换为BlockID和FileID信息,然后可以在!NameServer取得该块所在!DataServer信息(如果客户端有该Block与!DataServere的缓存,则直接从缓存中取),然后与!DataServer进行读取操作。

TFS写操作数据流

TFS系统中,nameserver会保证一个文件有多个副本存储于不同的dataserver上以保证冗余。当由于dataserver服务器宕机或由于其他原因退出系统导致某些文件副本数量下降时,nameserver将会调度新的dataserver节点存储文件备份。同样为了保证数据一致性,当写入一个文件时,只有所有参与的dataserver均写入成功时,该操作才算成功。TFS的写操作数据流图如下所示:

客户端首先向nameserver发起写请求,nameserver需要根据dataserver上的可写块,容量和负载加权平均来选择一个可写的block。并且在该block所在的多个dataserver中选择一个作为写入的master,这个选择过程也需要根据dataserver的负载以及当前作为master的次数来计算,使得每个dataserver作为master的机会均等。master一段选定,除非master宕机,不会更换,一旦master宕机,需要在剩余的dataserver中选择新的master。返回一个dataserver列表。
客户端向master dataserver开始数据写入操作。master server将数据传输为其他的dataserver节点,只有当所有dataserver节点写入均成功时,master server才会向nameserver和客户端返回操作成功的信息。

获得Block ID和File ID

根据TFS文件名解析出Block ID和block中的File ID.

获取dataserver地址

向nameserver发送查询请求得到Block ID所在的dataserver地址。

由于nameserver中维护了block和dataserver的对应关系,所以nameserver能够提供相应的信息。

Note: 由于TFS是把大量小文件放在一个block里面,

所以TFS的文件复制是基于block的,而且复制出来的block的block id应该是一致的

请求文件

通过发送Block_ID、File_ID和offset为参数的读请求到对应的dataserver,得到文件内容。

dataserver会根据本地记录的信息来得到File ID所在block的偏移量,从而读取到正确的文件内容.

TFS 在2.0版本增加了一个server, 叫做 rcserver. 这个 server 主要是为了淘宝内部管理使用 TFS 的各个应用. 我们给每个应用分配一个唯一的 AppKey. TFS 客户端使用这个 AppKey 登录到 rcserver, 取得自己应该访问的 TFS 集群信息. 客户端还会定期把自己的一些统计值发送给 rcserver. 具体信息可以参看源码中 doc 目录下的关于 rcserve 的文档.

时间: 2024-11-07 16:35:58

淘宝TFS分布式文件系统内部实现的相关文章

facebook海量图片存储系统与淘宝TFS系统比较

本篇论文的原文可谓通俗易懂.行云流水.结构清晰.图文并茂……正如作者所说的——"替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完美的设计……我们花费了很多的注意力来保持它的简单",本篇论文也是一样,没有牵扯空洞的庞大架构.也没有晦涩零散的陈述,有的是对痛点的反思,对目标的分解,条理清晰,按部就班.既描述了宏观的整体流程,又推导了细节难点的技术突破过程.以至于译者都不需要在文中插入过多备注和解读了^_^.不过在文章末尾,译者以淘宝的解决方案作为对比,阐述了文

centos6.5上安装淘宝tfs系统

为了安装淘宝tfs文件系统,查了很多资料.若仅参考淘宝的官方文档,那么安装注定失败,因为在官方文档中很多依赖库并没有明确标出. 为了更方便的安装,我这里只写正确的安装过程,错误的解决就不详细描述了. 第一步:gcc降级 centos6.5上如果用yum安装gcc的话,默认是4.4.7版本.若以在gcc4.4.7的基础上安装tfs的话会出现许多莫名其妙的错,最后在网上 甚至搜索不到相关的错误信息.不过我们公司已经有大神安装成功,到时候看他能不能分享一下经验. yum install -y texi

TFS分布式文件系统

TFS是由淘宝开发的一个分布式文件系统,详细情况请参见TFS项目主页.当前,TFS的最新版本为V2.6.6,本系列涉及讨论的TFS版本为V2.2.8(tfs-VER:V2.0.1). TFS有三个大的稳定版本,V1.3.V2.0和V2.2.在使用时,NameServer.DataServer应该为同一个版本,否则,有可能出现协议不兼容的情况.2.6版本变化较大,与上述的三个版本,其数据存储的格式都不兼容,不能直接升级. 以下为讨论的提纲: TFS NameServer的高可用性(HA) TFS

淘宝TFS使用笔记(二):Q&A

问题 1.nameserver主无法启动,提示服务已存在 1: [[email protected] keepalived]# /usr/local/tfs/scripts/tfs start_ns #启动ns出现错误,message和nameserver.log没有相关信息 2: /usr/local/tfs-2.2.16/bin/nameserver has been exist: pid: 3680 3: nameserver FAIL to up ... CHECK IT 4: [[em

淘宝tfs集群实战详细图

tfs集群设计图

分布式文件系统架构GFS、HDFS、TFS、Haystack

分布式文件系统架构GFS.HDFS.TFS.Haystack 分布式文件系统很多,包括GFS,HDFS,淘宝开源的TFS,Tencent用于相册存储的TFS (Tencent FS,为了便于区别,后续称为QFS),以及Facebook Haystack. 分布式文件系统通常可以作为底层存储,如GFS作为Google bigtable的底层,EBS作为 Amazon RDS的底 层,HDFS作为HBase的底层文件系统 其中,TFS,QFS以及Haystack需要解决的问题以及架构都很类似,这三个

《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair

前面两篇文章介绍了淘宝的发展历程和Java时代的变迁: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 马云说过"创新不是为了与对手竞争,而是跟明天竞争",所以这篇文章讲述淘宝的创新技术TFS和Tair及创新的产品. 该篇文章不仅仅对在读大学生非常有所帮助,因为你能从文章中看到很多你需要学习的知识,不仅仅包括数据库.计算机网络.操作系统.数据结构等基础课程:还根据时代的技术变迁讲述了

淘宝技术发展

转载 http://blog.csdn.net/kobejayandy/article/details/8685271 目录 一.引言 二.个人网站 三.Oracle/支付宝/旺旺 四.淘宝技术发展(Java时代:脱胎换骨) 五.淘宝技术发展(Java时代:坚若磐石) 六.淘宝技术发展(Java时代:创造技术-TFS) 七.淘宝技术发展(分布式时代:服务化) 作者:赵超 一.引言 光棍节的狂欢 “时间到,开抢!”坐在电脑前早已等待多时的小美一看时间已到 2011 年 11 月 11 日零时,便迫

【转载】淘宝架构框架发展史

转自 http://www.361way.com/taobao-architecture/1948.html      一.个人网站  2003 年 4 月 7 日,马云,在杭州,成立了一个神秘的组织.他叫来十位员工,要他们签了一份协议,这份协议要求他们立刻离开阿里巴巴,去做一个神秘的项目.这个项目要求绝对保密,老马戏称“连说梦话被老婆听到都不行,谁要是透漏出去,我将追杀到天涯海角”.这份协议是英文版的,匆忙之间,大多数人根本来不及看懂,但出于对老马的信任,都卷起铺盖离开了阿里巴巴. 他们去了一