Giter Site home page Giter Site logo

fastdcs's Introduction

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进行发布。

fastdcs's People

Stargazers

 avatar ZhuoranWang avatar  avatar Citrus avatar wangchong avatar Bing Bai avatar Lambda Shi  avatar liaoyinyu avatar iamxy avatar Peihuai Yi avatar  avatar mengjiahao avatar  avatar deger avatar libin avatar Health avatar pseudocodes avatar guowendev avatar George He avatar Acheng avatar  avatar Bo CHEN avatar Casa Taloyum avatar 嘿哟传说 avatar Yulong Tian avatar  avatar  avatar coosir avatar niansong avatar supercocoa avatar winglechen avatar  avatar zhangyang avatar SeasonLee avatar Mr zhan avatar

Watchers

Bin Wei avatar WangXingyou avatar  avatar  avatar  avatar Xun Liu avatar  avatar

fastdcs's Issues

Markdown

将readme后缀修改为.md 即可使用markdown

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.