TFS
为外部提供高并发的存储引擎
TFS(Team Foundation Server)是一个工作流协作的引擎。是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。
简介
TFS(Team Foundation Server)是一个工作流协作的引擎,它允许一个团队使用他们自定义的流程,并使用在项目历史中实时收集起来的一个集中的数据仓库。
Team Foundation Server和Visual Studio Team System中其它的部分一起,组成了软件开发过程中的核心部分。
我们的方法是唯一的,因为前端的设计有良好的可用性,而后端的设计集成了整个生命周期。我们主要关注于可用性,以及为个人和团队以一种无缝的方式进入软件开发周期。
客户关心的另外一个方面是灵活性和审核。Team Foundation Server支持Software Engineering Institute的CapaBIlity Maturity Model(CMMI)的报表和审核的功能。通过Team Foundation Server,组织可以自动收集必要的信息,并生成自定义的报表,它可以帮助在工业管理中定位增长点。
解决方案许多合作伙伴已经宣布他们将把他们的产品与 Team Foundation Server 的功能相结合。 Teamprise 宣布了他们即将发布的解决方案,Teamprise Client Suite 1.0。Teamprise Client Suite允许软件开发团队在异构的环境和其它的操作系统中,包括Linux和 MAC OS X,在EClipse Integrated Development Environment(IDE)中使用Team Foundation Server的源代码控制和工作项目跟踪的功能。Ravenflow宣布了RAVEN ProfESsional,建立在公司的REVEN Scenario产品的成功之上的一个工具包。REVEN Scenario是唯一一个可以从英文文本自动生成统一建模语言(UML)图的工具,它允许公司在开发开始前验证需求。 EDS和富士通株式会社正在演示他们的开发方法论,并且在为他们的客户开发解决方案时扩展Visual Studio Team System。这些都期望在Team Foundation Server中调节BI和报表的能力,并通过收集实时的数据来影响分析和计划。仿液压成型TFS是仿液压成型的简称,英文为:Techo Forming System,采用了3D立体特殊成型技术,是属于美利达自行车特有的专利技术。TFS是仿照HFS,用比较简单的工艺制造出的,貌似HFS车架的东东。而HFS车架,则是真正有技术含量的;独特的;能与其他品牌真正抗衡的美利达车架。HFS是Hydraulic Horming System的缩写,就是运用特殊的Hydraulic Horming System液压成型技术,美利达在6066 prolite的铝合金车架管刻划出绝美的3D立体线条,将车架减到不可思议的程度(18"车架约1.4kg),却同时保有美利达一贯坚持的特性:超高的刚性强度。而所谓管件液压成形技术,适用于异厚异形之中空结构管件,顾名思义是先将管材置于具形状的模具中,藉由管件内部加入高压流体(目前主要以水为主),搭配轴向施加压力补偿管料,把管料压入到模具腔体内成形。使用这样的技术,可以让HFS车架的管壁更加的薄,从而减轻重量,提高强度。但是由于这种加工方式设备昂贵、废品率高,造成HFS车架的成本居高不下。薄膜存储器薄膜存储器thin film storage,简称TFS,薄膜存储是在集成电路工艺上发展起来的新存储技术。其原理是通过改变硅基底上的薄膜的物理性质,实现数字信息的存储。薄膜存储器目前有铁电薄膜存储器和有机薄膜存储器等。文件系统TFS(Taobao FileSystem)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,其设计目标是支持海量的非结构化数据。淘蝌蚪项目主页:code#taobao#org/project/view/366/(#修改为.)其他解释Tactical Fighter Squadron(TFS)战术战斗机中队高等学校法语专业考试等级证书:TFS韩国化妆品牌子:The face shop简称“TFS"伪后宫动漫小说:THE Felicità Story(TFS)同步发电机型号:TFS系列三次谐波同步发电机是兰州电机有限责任公司生产的国产电机产品美利达山地车车架名称:TFS特性1.采用扁平化的数据组织结构2.使用HA架构和平滑扩容3.支持多种客户端4.支持大小文件存储5.可为外部提供高可靠和高并发的存储访问6.支持大文件功能7.Resource Center Server,用于管理TFS集群的用户资源配置8.TFS服务程序开发框架,统一TFS网络客户端库,并新增异步回调功能9.优化数据流,让写请求尽可能均匀的分布在不同的DataServer总体结构一个TFS集群由两个NameServer节点(一主一备)和多个!DataServer节点组成。这些服务程序都是作为一个用户级的程序运行在普通Linux机器上的DataServer进程会给Block中的每个文件分配一个ID(File ID,该ID在每个Block中唯一),并将每个文件在Block中的信息存放在和Block对应的Index文件中。这个Index文件一般都会全部load在内存,除非出现DataServer服务器内存和集群中所存放文件平均大小不匹配的情况。文件名结构TFS的文件名由块号和文件号通过某种对应关系组成,最大长度为18字节。文件名固定以T开始,第二字节为该集群的编号(可以在配置项中指定,取值范围1~9)。余下的字节由Block ID和File ID通过一定的编码方式得到。文件名由客户端程序进行编码和解码,它映射方式如下图:TFS客户程序在读文件的时候通过将文件名转换为BlockID和FileID信息,然后可以在!NameServer取得该块所在!DataServer信息(如果客户端有该Block与!DataServere的缓存,则直接从缓存中取),然后与!DataServer进行读取操作。
特性
1。 全部扁平化的数据组织结构, 遗弃了传统文件系统的目录结构 
2。 使用HA架构和平滑扩容 
3。 支持多种客户端 
4。 支持大小文件存储 
5。 可为外部提供高可靠和高并发的存储访问 
6。 支持大文件功能 
7。 Resource Center Server,用于管理TFS集群的用户资源配置 
8。 TFS服务程序开发框架,统一TFS网络客户端库,并新增异步回调功能 
9。 优化数据流,让写请求尽可能均匀的分布在不同的DataServer 
总体架构
一个TFS集群由两个NameServer节点(一主一备)和多个DataServer节点组成。这些服务程序都是作为一个用户级的程序运行在普通Linux机器上的。
图1 TFS总体架构
同时为了考虑容灾,NameServer采用了HA结构,即两台机器互为热备,同时运行,一台为主,一台为备,主机绑定到对外vip,提供服务;当主机器宕机后,迅速将vip绑定至备份NameServer,将其切换为主机,对外提供服务。图1中的HeartAgent就完成了此功能。
TFS的设计目标是海量小文件的存储,所以在TFS中,将大量的小文件(实际数据文件)合并成为一个大文件,这个大文件称为块(Block), 每个Block拥有在集群内唯一的编号(BlockId),Block Id在NameServer在创建Block的时候分配, NameServer维护block与DataServer的关系。Block中的实际数据都存储在DataServer上。而一台DataServer服务器一般会有多个独立DataServer进程存在,每个进程负责管理一个挂载点,这个挂载点一般是一个独立磁盘上的文件目录,以降低单个磁盘损坏带来的影响。
NameServer
NameServer主要功能是: 管理维护Block和DataServer相关信息,包括DataServer加入,退出, 心跳信息, block和DataServer的对应关系建立,解除。
正常情况下,一个块会在DataServer上存在, 主NameServer负责Block的创建,删除,复制,均衡,整理, NameServer不负责实际数据的读写,实际数据的读写由DataServer完成。
DataServer
DataServer主要功能是: 负责实际数据的存储和读写。
TFS的块大小可以通过配置项来决定,通常使用的块大小为64M。TFS的设计目标是海量小文件的存储,所以每个块中会存储许多不同的小文件。DataServer进程会给Block中的每个文件分配一个ID(File ID,该ID在每个Block中唯一),并将每个文件在Block中的信息存放在和Block对应的Index文件中。这个Index文件一般都会全部存放在内存,除非出现DataServer服务器内存和集群中所存放文件平均大小不匹配的情况。
另外,还可以部署一个对等的TFS集群,作为当前集群的辅集群。辅集群不提供来自应用的写入,只接受来自主集群的写入。当前主集群的每个数据变更操作都会重放至辅集群。辅集群也可以提供对外的读,并且在主集群出现故障的时候,可以接管主集群的工作。
存储机制
Block的存储方式
在TFS中,将大量的小文件(实际用户文件)合并成为一个大文件,这个大文件称为块(Block)。TFS以Block的方式组织文件的存储。每一个Block在整个集群内拥有唯一的编号,这个编号是由NameServer进行分配的,而DataServer上实际存储了该Block。在NameServer节点中存储了所有的Block的信息,一个Block存储于多个DataServer中以保证数据的冗余。对于数据读写请求,均先由NameServer选择合适的DataServer节点返回给客户端,再在对应的DataServer节点上进行数据操作。NameServer需要维护Block信息列表,以及Block与DataServer之间的映射关系,其存储的元数据结构如下:
存储的元数据结构 
在DataServer节点上,在挂载目录上会有很多物理块,物理块以文件的形式存在磁盘上,并在DataServer部署前预先分配,以保证后续的访问速度和减少碎片产生。为了满足这个特性,DataServer现一般在ext4文件系统上运行。物理块分为主块和扩展块,一般主块的大小会远大于扩展块,使用扩展块是为了满足文件更新操作时文件大小的变化。每个Block在文件系统上以“主块+扩展块”的方式存储。每一个Block可能对应于多个物理块,其中包括一个主块,多个扩展块。
在DataServer端,每个Block可能会有多个实际的物理文件组成:一个主Physical Block文件,N个扩展Physical Block文件和一个与该Block对应的索引文件。Block中的每个小文件会用一个block内唯一的fileid来标识。DataServer会在启动的时候把自身所拥有的Block和对应的索引文件加载进来。
文件名结构
TFS的文件名由块号和文件号通过某种对应关系组成,最大长度为18字节。文件名固定以T开始,第二字节为该集群的编号(可以在配置项中指定,取值范围 1~9)。余下的字节由Block ID和File ID通过一定的编码方式得到。文件名由客户端程序进行编码和解码,它映射方式如下图:
映射方式 
TFS客户程序在读文件的时候通过将文件名转换为BlockID和FileID信息,然后可以在NameServer取得该块所在DataServer信息(如果客户端有该Block与DataServere的缓存,则直接从缓存中取),然后与DataServer进行读取操作。 
并发机制
对于同一个文件来说,多个用户可以并发读。
现有TFS并不支持并发写一个文件。一个文件只会有一个用户在写。这在TFS的设计里面对应着是一个block同时只能有一个写或者更新操作。
容错机制
集群容错
TFS可以配置主辅集群,一般主辅集群会存放在两个不同的机房。主集群提供所有功能,辅集群只提供读。主集群会把所有操作重放到辅集群。这样既提供了负载均衡,又可以在主集群机房出现异常的情况不会中断服务或者丢失数据。
NameServer容错
Namserver主要管理了DataServer和Block之间的关系。如每个DataServer拥有哪些Block,每个Block存放在哪些DataServer上等。同时,NameServer采用了HA结构,一主一备,主NameServer上的操作会重放至备NameServer。如果主NameServer出现问题,可以实时切换到备NameServer。
另外NameServer和DataServer之间也会有定时的heartbeat,DataServer会把自己拥有的Block发送给NameServer。NameServer会根据这些信息重建DataServer和Block的关系。
DataServer容错
TFS采用Block存储多份的方式来实现DataServer的容错。每一个Block会在TFS中存在多份,一般为3份,并且分布在不同网段的不同DataServer上。对于每一个写入请求,必须在所有的Block写入成功才算成功。当出现磁盘损坏DataServer宕机的时候,TFS启动复制流程,把备份数未达到最小备份数的Block尽快复制到其他DataServer上去。 TFS对每一个文件会记录校验crc,当客户端发现crc和文件内容不匹配时,会自动切换到一个好的block上读取。此后客户端将会实现自动修复单个文件损坏的情况。
平滑扩容
原有TFS集群运行一定时间后,集群容量不足,此时需要对TFS集群扩容。由于DataServer与NameServer之间使用心跳机制通信,如果系统扩容,只需要将相应数量的新DataServer服务器部署好应用程序后启动即可。这些DataServer服务器会向NameServer进行心跳汇报。NameServer会根据DataServer容量的比率和DataServer的负载决定新数据写往哪台DataServer的服务器。根据写入策略,容量较小,负载较轻的服务器新数据写入的概率会比较高。同时,在集群负载比较轻的时候,NameServer会对DataServer上的Block进行均衡,使所有DataServer的容量尽早达到均衡。
进行均衡计划时,首先计算每台机器应拥有的blocks平均数量,然后将机器划分为两堆,一堆是超过平均数量的,作为移动源;一类是低于平均数量的,作为移动目的。
移动目的的选择:首先一个block的移动的源和目的,应该保持在同一网段内,也就是要与另外的block不同网段;另外,在作为目的的一定机器内,优先选择同机器的源到目的之间移动,也就是同台DataServer服务器中的不同DataServer进程。
当有服务器故障或者下线退出时(单个集群内的不同网段机器不能同时退出),不影响TFS的服务。此时NameServer会检测到备份数减少的Block,对这些Block重新进行数据复制。
在创建复制计划时,一次要复制多个block, 每个block的复制源和目的都要尽可能的不同,并且保证每个block在不同的子网段内。因此采用轮换选择(roundrobin)算法,并结合加权平均。
由于DataServer之间的通信是主要发生在数据写入转发的时候和数据复制的时候,集群扩容基本没有影响。假设一个Block为64M,数量级为1。那么NameServer上会有 1 * 1024 * 1024 * 1024 / 64 = 16。7M个block。假设每个Block的元数据大小为0.1K,则占用内存不到2G。
参考资料

Warning: Invalid argument supplied for foreach() in /www/wwwroot/newbaike1.com/id.php on line 362
目录
概述
简介
特性
总体架构
存储机制
并发机制
容错机制
平滑扩容
参考资料