博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
tfs文件系统笔记
阅读量:2353 次
发布时间:2019-05-10

本文共 1650 字,大约阅读时间需要 5 分钟。

        上图是tfs官方给出的整体架构图。tfs是一个扁平的文件系统,类似于key-value存储系统,它没有所谓的目录层次结构,所有文件的文件名也不像传统的文件系统(如/home/test/mypicture)这样,而是由tfs文件系统的NameServer给定(这点有点像facebook的haystack系统)。tfs主要是用来处理taobao的图片文件,也就是常见的海量小文件应用。众所周知,小文件带来的最大挑战就是海量的元数据,而一次文件读写操作元数据操作占有的比例往往是相当大的,特别是对于小文件的读写。理想的情况是,将所有的元数据都放到内存中(haystack的论文中已经对这种方案的必要性做了相当充分的说明~)。如何实现将海量小文件的元数据全部cache到内存?很简单,减少元数据呗。这其中就包括精简元数据的大小(不再用标准文件系统vfs中的dentry和inode结构,每个元数据条目将近占用了1K的大小),已经将小文件合并成大文件,减少元数据的总数。道理很简单,具体如何实现呢?可以看看tfs是怎么做的。

        tfs采用了传统的分布式文件系统的架构模式——三方架构,或者说是四方架构。客户端,元数据管理服务器(NameServer),数据管理服务器(DataServer)。此外,还有一个HA组件,我以为它就是所谓的监控模块。

        NameServer算得上是tfs的核心组件吧(个人观点),它负责为文件分配文件名,其实也是指定文件的位置,文件应该放到哪个DataServer上?放到哪个block中?这些都是由NameServer决定的,这其中当然也就包括了所谓的负载均衡技术!tfs应该采用的是动态负载均衡策略,在为一个文件选择DataServer时,它会考虑各个DataServer当前的负载状况,当集群中的负载出现不均衡时,它会控制负载较重的DataServer将部分block迁移到其他负载较轻的DataServer上。此外,tfs还支持集群的动态扩展,当然,说的是数据的扩展。DataServer会定期向NameServer发送心跳信息,所以,当需要向集群中加入一批DataServer时,只需要将NameServer的信息告诉这批DataServer就行了,DataServer向NameServer发送心跳信息,NameServer就能把新增的DataServer加入集群,并且将文件放到这些DataServer上了。

        一个系统需要实际运行,可靠性是最基本的要求。tfs做了几个层面的可靠性保证,首先是集群层面的,可以为一个对外提供服务器的主集群提供一个备份集群,只需要将主集群中的数据同步到备份集群就ok了,这无疑是开销最大的一套机制,但是对于重要的应用来说,确实还是有必要的。另外,NameServer也采用了一主一备的方式,主节点失效了,备份节点能够接替主节点对外服务,同时对外的ip不需要改变。数据的可靠性是通过将一个block保存多份实现的。此外,tfs支持多个进程同时读文件,但是只允许一个进程写文件(不运行多个进程并发写文件的不同部分),tfs的采用了强一致性的写:客户端向NameServer提交写文件请求-->NameServer为文件分配DataServer和block id-->客户端将数据提交给相应的主DataServer-->主DataServer将数据同步到备份的DataServer上-->主DataServer确认数据已经写到备份DataServer上后,再向NameServer提交写完成-->NameServer向主DataServer确认block版本-->主DataServer返回客户端写完成确认信息(有没有觉得很熟悉?这个跟GFS的写流程很相似)。

参考文献:

http://code.taobao.org/p/tfs/wiki/intro/

http://rdc.taobao.com/blog/cs/?p=128#more-128

转载地址:http://tsztb.baihongyu.com/

你可能感兴趣的文章
Get IT技能知识库 50个领域一键直达
查看>>
浅析C++中的this指针及汇编实现
查看>>
关于32位程序在64位系统下运行中需要注意的重定向问题(有图有真相)(***)
查看>>
解决win10系统中截图异常放大的问题
查看>>
关于Windows高DPI的一些简单总结
查看>>
tlb文件为何而生?
查看>>
IE9 GPU硬件加速到底是实用创新还是噱头
查看>>
几种TCP连接中出现RST的情况
查看>>
IAAS、SAAS 和 PAAS 的区别、理解
查看>>
RichEdit对ole 对象的相关支持总结
查看>>
(分享)win10下双显示屏独立设置不同缩放率的方法
查看>>
管理学十大经典定理
查看>>
杨澜的一句话,却要让我记一生
查看>>
U盘使用心得
查看>>
作为程序员的心态
查看>>
struts 2 s:if标签的使用
查看>>
input 按钮背景,在IE6 IE7中不显示
查看>>
div使用margin:0px auto 不居中
查看>>
JavaScript 事件模型 事件处理机制
查看>>
Invalid character constant
查看>>