/FastDCS

FastDCS is a distributed computing system.

Primary LanguageC++GNU General Public License v3.0GPL-3.0

FastDCS是一个使用C++开发的轻量级的分布式计算系统,使用它可以解决海量数据的计算和需要分布式服务方面的问题。


##1 背景简介
FastDCS最初是为了解决 [瑞读网](http://www.ieread.com) 的文件格式转换工作而开发的,瑞读网是一家提供数字阅读的服务提供商,每天约有10万份Office文档和上千份期刊杂志排版文件需要转换成PDF、JPG、FLASH、HTML、Txt和ePub等文件格式,瑞读网将FastDCS部署在4台服务器上,从2008年至2012年累计提供转换服务7千万次,生成各式文件数40亿,总量300TB的数据;

2013年FastDCS进行了代码重构,大幅度提升了系统的性能和可靠性,并将代码和相关设计文档全部开源。

##2 系统特性
- FastDCS是一个轻量级的分布式计算系统,开发者使用它可以快速的完成开发和部署工作,如同系统的名称Fast Distributed Computing System。

- FastDCS适合用于需要长期运行的计算处理业务,如瑞读网提供了长达4年的在线文档转换服务,它和MapReduce模式的批处理系统有很大的区别。

- FastDCS通过简洁而有效的设计,为开发者提供一套简洁而有效的分布式计算框架,开发者只需要定制由FastDCS提供的三个用户自定义UDF函数(User defined function),就可以完成整个分布式系统的开发工作,FastDCS同样也是非常容易进行部署的,开发者可以轻松的将FastDCS系统部署在很多台Linux服务器中的,FastDCS会自动将这些Linux服务器建立起服务集群,以分布式运行的方式完成开发者的计算任务。

##3 系统组成结构
从系统组成划分的角度来看,FastDCS包括了管理节点(Master)和工作节点(Worker)
- 管理节点Master对整个计算集群的服务状态、任务分发、计算调度等服务进行管理。
- 工作节点Worker作为计算单元接受Master服务器的管理,完成整个计算集群的计算任务。

##4 系统运行方式
- 管理节点Master在多台服务器中以主从模式运行
  - 至少需要提供一台Master节点,建议同时运行三台Master节点会达到最佳的可靠性和性能。
  - 多台Master节点会自动选举出主节点(Primary master)和从节点(Secondary master)。
  - 每台Master节点分别管理一部分Worker节点,达到了系统的负载均衡的同时也提升了系统的整体性能。
- 工作节点Worker在多台服务器中以并行模式运行
  - 至少需要提供一台Worker节点,目前可以支持上百台的Woker节点进行并行工作。
  - Worker节点会主动寻找负载较小的Master节点,接受计算任务调度,进行计算任务运算。

##5 计算任务调度方式
- Primary Master节点管理了服务集群中的所有计算任务
- Primary Master节点将一部分计算任务副本分发给Secondary master节点进行管理,当一段时间内该任务未完成计算,Primary Master节点将会注销这个任务副本,并将这个副本重新分发给其他的Secondary master节点。
- Primary Master和Secondary master节点都会分别处理各自管辖的Worker节点的服务请求,将计算任务进行下发,当一段时间内该任务未完成计算,Master[<font color="#F00"><b>注1</b></font>]节点将会注销这个任务副本,并将这个副本重新分发给其他的Woker节点。
- 当服务集群中空闲时,Primary Master节点将会通过调用开发者自定义ImportTaskUDF函数,将新的计算任务导入到计算集群中等待处理。
- 当Worker节点接收到Master节点分发的计算任务时,将会通过调用开发者自定义ComputingUDF函数,完成计算任务的运算处理。
- 当服务集群中的计算任务计算完成后,Primary Master节点将会通过调用开发者自定义ExportTaskUDF函数,将计算结果导出到外部存储系统中。

<font color="#F00"><b>[注1]</b></font>:此处的Master服务器是指Primary Master或Secondary master服务器。

##6 系统容错处理
- 当Primary master节点发生异常停止服务时,Secondary master节点会重新选举出新的Primary master节点接替工作,避免了服务集群的单点故障的问题,当故障服务器恢复后可以重新参加到集群的工作中。
- Worker节点可以根据环境的需要进行动态的增减,服务集群的计算能力和计算周期也随之发生线性的变化。
- 在Master和Worker节点发生动态调整的时候,只会影响极小部分的计算任务,不会影响服务集群的正常运行,受影响的小部分计算结果也会由系统判断是否采纳或重新进行计算。
- 当发生网络延时或Worker节点异常造成计算任务超时的情况下,Master节点会将计算任务重新分发给其他Worker节点,即使多台Worker节点运算同一个任务时,Master也只会采纳其中有效的计算结果。

##7 发行日志
- 2013/06/06,整理提交了V0.1.1代码和相关技术文档。[[下载地址]](https://github.com/liuxunorg/FastDCS)

##8 版本特性
- 使用epoll完成网络通讯,实现更高的网络处理能力;
- 使用Protobuf完成数据结构的定义和数据的编解码;
- 提供计算任务的导入、自定义计算和计算结果的导出这三个UDF函数;

##9 资源列表
- [FastDCS系统介绍](http://liuxun.org/blog/fastdcs/)
- [FastDCS架构介绍](http://liuxun.org/blog/fastdcs-architecture/)
- [FastDCS开发说明](http://liuxun.org/blog/fastdcs-develop/)
- [FastDCS开发实例](http://liuxun.org/blog/fastdcs-demo/)
- [FastDCS问题回答](http://liuxun.org/blog/fastdcs-qa/)

##10 关于作者
FastDCS的作者刘勋,有着超过10年的软件行业和互联网行业开发和架构经历,2008年-2012年和朋友一起共同创办 [瑞读网](http://www.ieread.com) 是国内最早期的数字出版云服务提供商,在创业期间开发的FastDCS系统为瑞读网的长期稳定的运营发挥了巨大的作用。目前作者在杭州从事安防行业的云计算系统的开发工作,对大数据、分布式系统有着比较深入的研究。

**联系作者**

作者将对FastDCS进行长期的维护和持续的升级,如果你在使用FastDCS出现问题或有更好的意见和建议,欢迎使用以下联系方式:

1.  在FastDCS的 [开发博客](/blog/fastdcs-qa/) 中提出你的问题;

2.  给作者 my#liuxun.org (需要将#换成@)发邮件;

3.  加入FastDCS的QQ群:62471504;

##11 版权说明
FastDCS源代码通过GNU General Public License V3进行发布。