Tfs

概念:

TFS(Team Foundation Server)是一个高可扩展、高可用、高性能、面向互联网服务的分布式文件系统,主要针对海量的非结构化数据,它构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。

架构设计:

一个TFS集群由两个NameServer节点(一主一备)和多个DataServer节点组成。以block(通常为64M,可配置)为单位存储和组织数据。这些服务程序都是作为一个用户级的程序运行在普通Linux机器上的。

NameServer主要管理维护Block和DataServer相关信息,包括DataServer加入,退出, 心跳信息, block和DataServer的对应关系建立,解除。正常情况下,一个块会在DataServer上存在, 主NameServer负责Block的创建,删除,复制,均衡,整理, NameServer不负责实际数据的读写,实际数据的读写由DataServer完成。

DataServer主要负责实际数据的存储和读写。
TFS会将多个小文件存储在同一个block中,并为block建立索引,以便快速在block中定位文件;每个block会存储多个副本到不同的机架上,以保证数据的高可靠性。

为了考虑容灾,NameServer采用了HA结构,即两台机器互为热备,同时运行,一台为主,一台为备,主机绑定到对外vip,提供服务;当主机器宕机后,迅速将vip绑定至备份NameServer,将其切换为主机,对外提供服务。

TFS采用了HA架构和平滑扩容,保证了整个文件系统的可用性和扩展性。同时扁平化的数据组织结构,可将文件名映射到文件的物理地址,简化了文件的访问流程,一定程度上为TFS提供了良好的读写性能。

部署方式:

HA结构、平滑扩容

在TFS中,将大量的小文件(实际数据文件)合并成为一个大文件,这个大文件称为块(Block), 每个Block拥有在集群内唯一的编号(Block Id), Block Id在NameServer在创建Block的时候分配, NameServer维护block与DataServer的关系。Block中的实际数据都存储在DataServer上。而一台DataServer服务器一般会有多个独立DataServer进程存在,每个进程负责管理一个挂载点,这个挂载点一般是一个独立磁盘上的文件目录,以降低单个磁盘损坏带来的影响。

使用方法:

写操作:

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

  1. 客户端向nameserver发起写请求,nameserver返回一个dataserver列表

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

2.客户端向master dataserver开始数据写入操作

master server将数据传输为其他的dataserver节点,只有当所有dataserver节点写入均成功时,master server才会向nameserver和客户端返回操作成功的信息。

读操作:

1)获得Block ID和File ID

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

2)获取dataserver地址

向nameserver发送查询请求得到Block ID所在的dataserver地址。
由于nameserver中维护了block和dataserver的对应关系,所以nameserver能够提供相应的信息。
Note: 由于TFS是把大量小文件放在一个block里面,
所以TFS的文件复制是基于block的,而且复制出来的block的block id应该是一致的。

3)请求文件

通过发送Block_ID、File_ID和offset为参数的读请求到对应的dataserver,得到文件内容。
dataserver会根据本地记录的信息来得到File ID所在block的偏移量,从而读取到正确的文件内容。

应用场景:

TFS为淘宝提供海量小文件存储,通常文件大小不超过1M,满足了淘宝对小文件存储的需求,被广泛地应用在淘宝各项应用中。主要针对海量的非结构化数据,构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问。

分布式文件系统之Tfs是什么?相关推荐

  1. 淘宝的开源分布式文件系统TFS

    TFS(Taobao FileSystem)是淘宝团队开源的海量非结构化数据存储设计的分布式系统.构筑在普通的Linux机器集群上,可为外部提供高可靠和高并发的存储访问.高可扩展.高可用.高性能.面向 ...

  2. Taobao分布式文件系统TFS简析

    Taobao自主研发分布式文件系统TFS(Taobao File System)的消息早有耳闻,最初来自网络上的一篇报道(或称软文)-"深度揭秘淘宝自主研发的文件系统TFS".因为 ...

  3. 各类分布式文件系统的区别和概述 | HDFS、GFS、Ceph、TFS、Moosefs、IPFS等

    文章目录 参考 分布式文件系统定义 各类系统对比图 各类文件系统简介 shepdog shepdog基本架构 Ceph FastDFS fastDFS介绍 Tracker server 追踪服务器 S ...

  4. SHELL脚本自动化部署MFS分布式文件系统

    前言:在我们运维中,最常见的文件存储系统大概就是NFS了,但是随着网站压力不断增加,NFS渐渐不能满足企业数据增长需求,有木有自动扩展.高效.部署.实施方便快捷的分布式存储供我们使用呢?那我们来看一下 ...

  5. 分布式文件系统Fastdfs 详细安装笔记

    简介 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX接口 ...

  6. 多种分布式文件系统简介

    2019独角兽企业重金招聘Python工程师标准>>> 分布式文件系统 GFS以及 FastDFS.mogileFS.HDFS.TFS等类GFS系统都不是系统级的分布式文件系统,而是 ...

  7. 分布式架构的分布式文件系统

    对一些图片.大文本,使用数据库就不合适了,所以我们会采用分布式文件系统来实现文件存储,分布式文件系统有很多产品.比如淘宝的TFS.google的GFS.还有开源的HDFS

  8. 分布式文件系统FastDFS架构剖析

    文/余庆 FastDFS是一款类Google FS的开源分布式文件系统,它用纯C语言实现,支持Linux.FreeBSD.AIX等UNIX系统.它只能通过专有API对文件进行存取访问,不支持POSIX ...

  9. 分布式文件系统对比与选型参考

    一.分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源不一定直接连接在本地节点上,而是通过计算机网络与节点相连.分布式文件系统的设计基于客户 ...

最新文章

  1. 张芯译老师 实战销售管理专家
  2. IPv6 — IPv4v6 综合组网技术
  3. php和html和javascript,php和javascript区别有哪些
  4. 分区表分区字段的update操作
  5. python编程手机模拟点击_python模拟点击玩游戏的实例讲解
  6. 本地计算机无法启动,winxp系统下本地计算机无法启动Windows Time服务怎么办
  7. 第十五节,基本数据类型,元组tuple
  8. delphi让exe开机自启动
  9. 190531每日一句
  10. java并发编程实战源码_java并发编程实战(附源码)
  11. Appium 基础教程
  12. 【网站排名软件】如何让网站关键词快速排名到首页
  13. 用Acrobat pro DC 自动生成pdf目录——知网硕博论文为例(附带如何下载只有caj的pdf)
  14. 完美世界CEO萧泓:年轻化战略大有可为
  15. 「来道题」Redis的Gossip协议
  16. 【C++篇】STL常见容器String的模拟实现
  17. C prime plus 第六版 课后编程练习 第4章
  18. mysql弱类型_PHP弱类型及相关函数Bypass
  19. win7计算机硬盘容量怎么看,Win7系统怎么看电脑硬盘容量
  20. 关于 CPU 的多核和超线程技术

热门文章

  1. CodeForces - 1343F Restore the Permutation by Sorted Segments(思维)
  2. POJ - 3415 Common Substrings(后缀数组+单调栈)
  3. CodeForces - 346A Alice and Bob(数论+博弈)
  4. CodeForces - 451A - Game With Sticks(博弈论)
  5. 考研计算机网络比较难还是数据结构,2015考研:历年计算机试卷结构与难度分析...
  6. 单片机课程设计数字心率计_光学心率传感器详细使用教程
  7. OD的 CC断点,内存访问断点,硬件断点 解析
  8. C++虚继承(五) --- 虚拟继承的概念
  9. win32中如何使用CString
  10. 一个字符串中到底能有多少个字符? 我竟然算错了!