TFS的文件名由块号和文件号经过某种对应关系组成,最大长度为18字节。文件名固定以T开始,第二字节为该集群的编号(能够在配置项中指定,取值范围 1~9)。余下的字节由Block ID和File ID经过必定的编码方式获得。文件名由客户端程序进行编码和解码,它映射方式以下图:
TFS客户程序在读文件的时候经过将文件名转换为BlockID和FileID信息,而后能够在!NameServer取得该块所在!DataServer信息(若是客户端有该Block与!DataServere的缓存,则直接从缓存中取),而后与!DataServer进行读取操做。html
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和客户端返回操做成功的信息。服务器
根据TFS文件名解析出Block ID和block中的File ID.分布式
向nameserver发送查询请求获得Block ID所在的dataserver地址。网站
因为nameserver中维护了block和dataserver的对应关系,因此nameserver可以提供相应的信息。编码
Note: 因为TFS是把大量小文件放在一个block里面,url
因此TFS的文件复制是基于block的,并且复制出来的block的block id应该是一致的spa
经过发送Block_ID、File_ID和offset为参数的读请求到对应的dataserver,获得文件内容。3d
dataserver会根据本地记录的信息来获得File ID所在block的偏移量,从而读取到正确的文件内容.code
TFS 在2.0版本增长了一个server, 叫作 rcserver. 这个 server 主要是为了淘宝内部管理使用 TFS 的各个应用. 咱们给每一个应用分配一个惟一的 AppKey. TFS 客户端使用这个 AppKey 登陆到 rcserver, 取得本身应该访问的 TFS 集群信息. 客户端还会按期把本身的一些统计值发送给 rcserver. 具体信息能够参看源码中 doc 目录下的关于 rcserve 的文档.
ZOOM 云视频会议网站:http://www.zoomonline.cn/