淘宝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 的文档.
淘宝TFS分布式文件系统内部实现的更多相关文章
- facebook海量图片存储系统与淘宝TFS系统比较
本篇论文的原文可谓通俗易懂.行云流水.结构清晰.图文并茂……正如作者所说的——"替换Facebook的图片存储系统就像高速公路上给汽车换轮子,我们无法去追求完美的设计……我们花费了很多的注意 ...
- TFS分布式文件系统
简介 TFS(Taobao !FileSystem)是一个高可扩展.高可用.高性能.面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和 ...
- 淘宝tairKV分布式
Tair是什么 Tair是由淘宝开发的key/value方案,系统默认支持基于内存和文件的存储引擎,对应于通常我们所说的缓存和持久化存储,这里可以获取更多关于tair的信息,淘宝团队介绍,Tair在淘 ...
- (转)淘淘商城系列——分布式文件系统FastDFS
http://blog.csdn.net/yerenyuan_pku/article/details/72801777 商品添加的实现,包括商品的类目选择,即商品属于哪个分类?还包括图片上传,对于图片 ...
- 大数据时代之hadoop(四):hadoop 分布式文件系统(HDFS)
分布式文件系统即是网络中多台计算机组合在一起提供一个统一存储及管理的系统. Hadoop提供了一个文件系统接口和多个分布式文件系统实现,其中比较重要的就是HDFS(Hadoop Distributed ...
- 分布式存储之MogileFS分布式文件系统简单应用
一.分布式存储原理: 分布式存储系统,是将数据分散存储在多台独立的设备上.传统的网络存储系统采用集中的存储服务器存放所有数据,存储服务器成为系统性能的瓶颈,也是可靠性和安全性的焦点,不能满足大规模存储 ...
- “淘宝技术这十年”
"少时淘气,大时淘宝" 时势造英雄 起因eBay 易趣 在资本方面对仗,阿里想趁此崛起新项目就要求能在短时间内做出一个 个人对个人的商品交易网站(C2C)2003年4月7日-5月1 ...
- 8年前诞生于淘宝,细数阿里云RPA 的前世今生!
9月10日,踏入55岁的马云正式卸任阿里巴巴董事局主席一职,由阿里巴巴集团CEO张勇接任.公寓创业.西湖论剑.美国敲钟,从成立到登顶中国最值钱的公司,阿里巴巴只用了20年. 阿里云RPA,2011年诞 ...
- 淘宝的开源分布式文件系统TFS
TFS(Taobao FileSystem)是淘宝团队开源的海量非结构化数据存储设计的分布式系统.构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问.高可扩展.高可用.高性能.面向 ...
随机推荐
- html如何绑定radio控件和label控件
只要指定label的"for"属性到radio的id就行,或者用label标签包围住radio. 第一种方式: <input type="radio" i ...
- dubbo properties
DUBBO配置项的优先级: java -D优先于 Spring配置,Spring配置优先于 properties文件的配置,这也符合一般项目的规则. 覆盖策略: JVM启动-D参数优先,这样可以使用户 ...
- HDU 3775 Chain Code ——(Pick定理)
Pick定理运用在整点围城的面积,有以下公式:S围 = S内(线内部的整点个数)+ S线(线上整点的个数)/2 - 1.在这题上,我们可以用叉乘计算S围,题意要求的答案应该是S内+S线.那么我们进行推 ...
- http://10.11.112.12:8000/homePage.jsp?loginMode=JS
sdsad http://svn.paic.com.cn/svn/mis_pac/branches/MIS-PAC5.22.0
- SQLServer 关闭自增长,插入数据
怎样随心所欲的插入自增长的值? 关闭自增长 Demo 有表 [dbo].[tbl_Message] 其中ID是自增的要随意插入ID的值 (前提:这个Id当然是不存在的,存在也可以删除) SET IDE ...
- 使用ssh-keygen设置ssh无密码登录
http://lhflinux.blog.51cto.com/1961662/526122 ssh-keygen -t rsa 输入后,会提示创建.ssh/id_rsa.id_rsa.pub的文件,其 ...
- 项目使用中Linq使用总结
项目使用中Linq使用总结 本文旨在和网友分享Linq在项目中的实践,曾经我参与过的项目都能看见Linq的影子.(LinqTosql.LinqToString.LinqToXML.LinqToEnti ...
- ubuntu初次安装后设置root用户密码
在ubuntu系统下,为了安全起见,在安装过程中,系统屏蔽了用户设置root用户. 设置方法如下: 登录普通用户 打开终端 sudo passwd[sudo] password for [userna ...
- Quartus 的管脚分配
与管脚分配相关的一些功能在assignments菜单下, Remove assignments... Back-Annotate Assignment... Import Assignment... ...
- IOS 周几转化数字
NSString *weekStr = @"周二"; NSInteger weekday = [self passday:weekStr]; -(NSInteger)passda ...