SlideShare uma empresa Scribd logo
1 de 38
分布式文件系统
FastDFS架构剖析
余 庆
2010年12月23日
我的存储经历--雅虎论坛
雅虎论坛文件同步实现机制
• 采用pat进行文件同步
• 用户上传的文件保存到web服务器特定目录
• 在pat监控目录下写入同步文件列表
• pat定时扫描目录,发现有待同步文件列表,
开始文件同步
• 注:pat扫描时间间隔很短,通常文件在1秒
内可以被同步到文件服务器
雅虎论坛架构缺点及实现缺陷
• 扩容问题
–每台文件服务器采用全量存储,不易扩
容
–解决办法:迁移到存储量更大的服务器
• 同步延迟问题
–pat定时扫描,异步同步方式,导致同步
延迟
–解决方法:文件上传完成后休眠1秒
我的存储经历--雅虎相册
雅虎相册架构解读
• 美国雅虎提供全球文件存储服务YMDB
• 基于集中式存储设备Filer
• 分组(farm)存储,farm内RAID 1
• 存储到哪个组,需要应用申请和设置。存
储到的组对应用方不透明
• 一个Farm中只有一台机器提供线上服务,
另外一台热备份
雅虎相册存储架构不足之处
• 存储成本高昂
–采用集中式存储设备Filer,费用昂贵
–Farm采用热备模式,只有一台Filer提供在
线服务,资源极大浪费,存储成本高昂
–可以增加Farm进行扩容,但无法做到线
性扩容,扩容粒度大,一个Filter 200TB左
右
中国雅虎相册存储改进方案
• 主要出于降低存储成本的目的,中国雅虎
采用分布式文件系统替代YMDB
• 中国雅虎研发了YLEM分布式文件系统
– 基于MogileFS
– 2008年底替换掉了YMDB
分布式文件系统概况
• 分布式文件系统类型
– 通用分布式文件系统
和传统的本地文件系统(如ext3、NTFS等)相
对应,应用端可以mount使用。典型代表:
lustre、MooseFS
– 专用分布式文件系统
基于google FS的思想,文件上传后不能修改。
不能mount使用,需要使用专有API对文件进行
访问,也可称作分布式文件存储服务。典型代
表:MogileFS、FastDFS、TFS
两种分布式文件系统对比
指标 通用分布式
文件系统
专用分布式
文件系统
开发者友好性 较好 较差
系统复杂性 较高 较低
系统性能 一般 较高
类Google FS 体系结构
• 两个角色
– 名字服务器(索引服务器)
– 存储服务器
• 架构特点
– 不支持文件修改功能
– 文件分块存储,需要索引服务器
– 一个文件可以存储多份,一个文件存储到哪些
存储服务器,通常采用动态分配的方式
FastDFS简介
• 类似google FS的一个轻量级分布式文件系统,
纯C实现,支持Linux、FreeBSD等UNIX系统
• 2008年4月份开始启动,08年7月中旬推出
第一个版本V1.0,一直到V1.29;2010年8月
份发布V2.00。刚发布V2.05,至今已发布36
个版本
• V2.05代码行数近5.5万
FastDFS特性
• 只能通过专有API访问,不支持POSIX
• 文件不分块存储,上传的文件和OS文件系统中
的文件一一对应
• 支持相同内容的文件只保存一份,节约磁盘空
间
• 下载文件支持HTTP协议,可以使用内置Web
Server,也可以和其他Web Server配合使用
• 支持在线扩容
• 支持主从文件
• 存储服务器上可以保存文件属性(meta-data)
什么是主从文件?
• 主从文件是指文件ID有关联的文件,一个主
文件可以对应多个从文件。
– 主文件ID = 主文件名 + 主文件扩展名
– 从文件ID = 主文件名 + 从文件后缀名 + 从文件
扩展名
FastDFS架构示意图
相关术语
• Tracker Server:跟踪服务器,主要做调度工作,在访问上
起负载均衡的作用。在内存中记录集群中group和storage
server的状态信息,是连接Client和Storage server的枢纽。
• Storage Server:存储服务器,文件和文件属性(meta data)
都保存到存储服务器上
FastDFS架构解读
• 只有两个角色,tracker server和storage server,
不需要存储文件索引信息
• 所有服务器都是对等的,不存在Master-Slave
关系
• 存储服务器采用分组方式,同组内存储服务器
上的文件完全相同(RAID 1)
• 不同组的storage server之间不会相互通信
• 由storage server主动向tracker server报告状态
信息,tracker server之间通常不会相互通信
FastDFS上传文件流程图
1. client询问tracker上传到的storage;
2. tracker返回一台可用的storage;
3. client直接和storage通信完成文件上传,storage返回文件ID。
FastDFS下载文件流程图
1. client询问tracker可以下载指定文件的storage,参数为文件
ID(组名和文件名);
2. tracker返回一台可用的storage;
3. client直接和storage通信完成文件下载。
以HTTP方式下载文件
• FastDFS分组存储方式,为HTTP方式下载提
供了便利
• FastDFS支持HTTP方式下载文件,可以使用
内置web server或者外部web server
• 需要解决文件同步延迟的问题
• 可以采取如下两种方式:
– tracker跳转方式:通过Tracker server跳转
– 非tracker跳转方式:Storage server直接提供文
件下载
HTTP下载文件方式一
HTTP下载文件方式一流程解读
• 通过Tracker server解决文件同步延迟的问题
• Tracker server上需使用内置web server
• Storage server可以使用内置web server,也
可以使用外部web server。推荐使用外部
web server,如apache或nginx
HTTP下载文件方式二
• 可以分为两种方式:
– 跳转方式(redirect)
– 代理方式(proxy)
HTTP下载文件方式二(redirect)
HTTP下载文件方式二(proxy)
HTTP下载文件方式二流程解读
• 使用扩展模块来解决文件同步延迟问题
• 如果请求文件在当前storage上不存在,通过文
件ID反解出源storage,直接请求源storage
• tracker server上不需要任何web server
• 在每台storage server上部署web server,直接
对外提供HTTP服务
• 目前已提供apache和nginx扩展模块
• 推荐使用扩展模块方式
FastDFS如何做到无索引服务器?
• 上传文件时,文件ID由storage server生成并
返回给client
• 文件ID包含了组名和文件名,storage server
可以直接根据该文件名定位到文件
• 一个文件ID示例:
FastDFS同步机制
• 采用binlog文件记录文件上传、删除等操作,
根据binlog进行文件同步
• binlog中只记录文件名,不记录文件内容
• 记录已同步的位置到.mark文件中
• 同组内的storage server之间是对等的,文件
上传、删除等操作可以在任意一台storage
server上进行
• 文件同步只在同组内的storage server之间进
行,采用push方式,即源头服务器同步给
目标服务器
FastDFS如何解决同步延迟问题?
• storage生成的文件名中,包含源头storage
IP地址和文件创建时间戳
• 源头storage定时向tracker报告同步情况,包
括向目标服务器同步到的文件时间戳
• tracker收到storage的同步报告后,找出该组
内每台storage被同步到的时间戳(取最小
值),作为storage属性保存到内存中
下载文件选择storage的方法
• client询问tracker有哪些storage可以下载指
定文件时,tracker返回满足如下四个条件之
一的storage:
– (当前时间 -文件创建时间戳) > 同步延迟阀值
(如一天)
– 文件创建时间戳 < Storage被同步到的时间戳
– 文件创建时间戳==Storage被同步到的时间戳 且
(当前时间 -文件创建时间戳) > 文件同步最大时
间(如5分钟)
– 该文件上传到的源头storage
FastDFS通信协议
• 二进制通信协议
• 协议包由两部分组成:header和body
• header共10字节,格式如下:
– 8 bytes body length
– 1 byte command
– 1 byte status
• body数据包格式由取决于具体的命令,
body可以为空
FastDFS应用现状
• 20+公司在使用
• 规模最大的一家:集群中的存储group数有
45个,存储服务器90台,存储容量达到
900TB,文件数达到4000万个。Group持续
增长中。。。预计下周上线20个Group,到
时总容量可以达到1200TB
FastDFS 1.x IO模型
FastDFS 2.0 IO模型
FastDFS V2.0改进
• 网络IO处理线程 + 磁盘IO处理线程
• 采用libevent取代传统的网络通信模型,支
持大并发访问,支持的连接数可以到10K级
• 磁盘IO由专门的线程处理,系统负载和连接
数之间不存在线性关系,系统负载基本上
不受连接数影响
后续开发计划
• 封装成通用文件系统,可以mount使用。实
现思路:
FastDFS + 目录服务 + client mount
FastDFS相关网站
• FastDFS论坛:
http://linux.chinaunix.net/bbs/forum-75-
1.html
• FastDFS google code:
http://code.google.com/p/fastdfs/
Q & A
谢谢大家!

Mais conteúdo relacionado

Mais procurados

Ted yu:h base and hoya
Ted yu:h base and hoyaTed yu:h base and hoya
Ted yu:h base and hoyahdhappy001
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识Liu Allen
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011Yiwei Ma
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at TaobaoJoshua Zhu
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileDanielle Womboldt
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2redhat9
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overviewqianshi
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局Alex Lau
 

Mais procurados (14)

Ted yu:h base and hoya
Ted yu:h base and hoyaTed yu:h base and hoya
Ted yu:h base and hoya
 
课题三:Nginx基础知识
课题三:Nginx基础知识课题三:Nginx基础知识
课题三:Nginx基础知识
 
大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011大型视频网站单点分析与可用性提升-Qcon2011
大型视频网站单点分析与可用性提升-Qcon2011
 
Hacking Nginx at Taobao
Hacking Nginx at TaobaoHacking Nginx at Taobao
Hacking Nginx at Taobao
 
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China MobileCeph Day Beijing - Leverage Ceph for SDS in China Mobile
Ceph Day Beijing - Leverage Ceph for SDS in China Mobile
 
Level db
Level dbLevel db
Level db
 
Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2Bypat博客出品-服务器运维集群方法总结2
Bypat博客出品-服务器运维集群方法总结2
 
Hdfs
HdfsHdfs
Hdfs
 
Ceph monitor-op
Ceph monitor-opCeph monitor-op
Ceph monitor-op
 
Ceph perf-tunning
Ceph perf-tunningCeph perf-tunning
Ceph perf-tunning
 
Mesos intro
Mesos introMesos intro
Mesos intro
 
Traffic server overview
Traffic server overviewTraffic server overview
Traffic server overview
 
應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局應用Ceph技術打造軟體定義儲存新局
應用Ceph技術打造軟體定義儲存新局
 
MogileFS
MogileFSMogileFS
MogileFS
 

Semelhante a 分布式文件系统FastDFS架构剖析

吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨drewz lin
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路jeffz
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)Shanda innovation institute
 
20111018 zhouchen share
20111018 zhouchen share20111018 zhouchen share
20111018 zhouchen sharezcbug
 
Ftn存储设计
Ftn存储设计Ftn存储设计
Ftn存储设计gzterrytan
 
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Michael Zhang
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践孙立
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事Chieh (Jack) Yu
 
Zh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfsZh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfsTrendProgContest13
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面Tianwei Liu
 
4, files & folders
4, files & folders4, files & folders
4, files & foldersted-xu
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報Wales Chen
 
【80ppt.com】怎样拯救我们的“脑“? 教你如何整理电脑文件@ppt精选
【80ppt.com】怎样拯救我们的“脑“?  教你如何整理电脑文件@ppt精选【80ppt.com】怎样拯救我们的“脑“?  教你如何整理电脑文件@ppt精选
【80ppt.com】怎样拯救我们的“脑“? 教你如何整理电脑文件@ppt精选xiehongbo
 
Ant构建工具快速入门
Ant构建工具快速入门Ant构建工具快速入门
Ant构建工具快速入门minghe36
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲84zhu
 

Semelhante a 分布式文件系统FastDFS架构剖析 (20)

Dfs ning
Dfs ningDfs ning
Dfs ning
 
吴岷 视频Cdn分发、调度与服务的探讨
吴岷  视频Cdn分发、调度与服务的探讨吴岷  视频Cdn分发、调度与服务的探讨
吴岷 视频Cdn分发、调度与服务的探讨
 
OPM
OPMOPM
OPM
 
大众点评网的技术变迁之路
大众点评网的技术变迁之路大众点评网的技术变迁之路
大众点评网的技术变迁之路
 
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
[.Net开发交流会][2010.06.19]大众点评网的技术变迁之路(王宏)
 
20111018 zhouchen share
20111018 zhouchen share20111018 zhouchen share
20111018 zhouchen share
 
Ftn存储设计
Ftn存储设计Ftn存储设计
Ftn存储设计
 
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]Q con shanghai2013-[刘海锋]-[京东文件系统简介]
Q con shanghai2013-[刘海锋]-[京东文件系统简介]
 
高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践高性能队列Fqueue的设计和使用实践
高性能队列Fqueue的设计和使用实践
 
寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事寫出高性能的服務與應用 那些你沒想過的事
寫出高性能的服務與應用 那些你沒想過的事
 
Zh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfsZh tw introduction_to_hadoop and hdfs
Zh tw introduction_to_hadoop and hdfs
 
Hantuo openstack
Hantuo openstackHantuo openstack
Hantuo openstack
 
Mr&ueh数据库方面
Mr&ueh数据库方面Mr&ueh数据库方面
Mr&ueh数据库方面
 
4, files & folders
4, files & folders4, files & folders
4, files & folders
 
賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報賽門鐵克 Storage Foundation 6.0 簡報
賽門鐵克 Storage Foundation 6.0 簡報
 
Rsync服务器架设方法.v0.1b
Rsync服务器架设方法.v0.1bRsync服务器架设方法.v0.1b
Rsync服务器架设方法.v0.1b
 
Baidu Cloud Foundry
Baidu Cloud FoundryBaidu Cloud Foundry
Baidu Cloud Foundry
 
【80ppt.com】怎样拯救我们的“脑“? 教你如何整理电脑文件@ppt精选
【80ppt.com】怎样拯救我们的“脑“?  教你如何整理电脑文件@ppt精选【80ppt.com】怎样拯救我们的“脑“?  教你如何整理电脑文件@ppt精选
【80ppt.com】怎样拯救我们的“脑“? 教你如何整理电脑文件@ppt精选
 
Ant构建工具快速入门
Ant构建工具快速入门Ant构建工具快速入门
Ant构建工具快速入门
 
Nosql三步曲
Nosql三步曲Nosql三步曲
Nosql三步曲
 

Mais de billowqiu

Thrift多路复用的设计与实现
Thrift多路复用的设计与实现Thrift多路复用的设计与实现
Thrift多路复用的设计与实现billowqiu
 
Eugene letuchy erlangatfacebook
Eugene letuchy erlangatfacebookEugene letuchy erlangatfacebook
Eugene letuchy erlangatfacebookbillowqiu
 
On designing and deploying internet scale services
On designing and deploying internet scale servicesOn designing and deploying internet scale services
On designing and deploying internet scale servicesbillowqiu
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现billowqiu
 
Redis实战《红丸出品》
Redis实战《红丸出品》Redis实战《红丸出品》
Redis实战《红丸出品》billowqiu
 
Redis运维之道 新浪:杨海朝
Redis运维之道 新浪:杨海朝Redis运维之道 新浪:杨海朝
Redis运维之道 新浪:杨海朝billowqiu
 
Libevent源码深度剖析
Libevent源码深度剖析Libevent源码深度剖析
Libevent源码深度剖析billowqiu
 

Mais de billowqiu (7)

Thrift多路复用的设计与实现
Thrift多路复用的设计与实现Thrift多路复用的设计与实现
Thrift多路复用的设计与实现
 
Eugene letuchy erlangatfacebook
Eugene letuchy erlangatfacebookEugene letuchy erlangatfacebook
Eugene letuchy erlangatfacebook
 
On designing and deploying internet scale services
On designing and deploying internet scale servicesOn designing and deploying internet scale services
On designing and deploying internet scale services
 
基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现基于Zookeeper的配置信息存储方案的设计与实现
基于Zookeeper的配置信息存储方案的设计与实现
 
Redis实战《红丸出品》
Redis实战《红丸出品》Redis实战《红丸出品》
Redis实战《红丸出品》
 
Redis运维之道 新浪:杨海朝
Redis运维之道 新浪:杨海朝Redis运维之道 新浪:杨海朝
Redis运维之道 新浪:杨海朝
 
Libevent源码深度剖析
Libevent源码深度剖析Libevent源码深度剖析
Libevent源码深度剖析
 

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