分布式框架有哪些

分布式框架可以按照几个大的维度来区分:1、有状态、无状态;2、重存储还是重计算;3、long service还是批处理。一些常见的分布式系统大类:支持持久化存储的分布式存储系统;着重计算的分布式/并行计算框架;分布式消息队列。同时也可以根据不同的应用的领域,把上述分类细化。

有几个大的维度来区分:

1、有状态、无状态

2、重存储还是重计算

3、long service还是批处理。

一些常见的分布式系统大类:

支持持久化存储的分布式存储系统

着重计算的分布式/并行计算框架

分布式消息队列

根据不同的应用的领域,把上述分类细化,常见分布式存储系统分为:

1、分布式协同系统(分布式日志复制)

2、分布式任务调度框架

3、流计算框架

4、分布式文件/对象系统

5、分布式NoSQL存储

6、分布式关系数据库(OLAP、OLTP);

7、各种消息队列mq

8、分布式机器学习/深度学习训练框架

分布式协调系统(日志复制系统)其实就是paxos算法及其变体的实现,典型的有zookeeper、etcd;一般来说只存少量的元数据信息,重点在高可用强一致,不提供高的through put,是分布式系统不可或缺的组件;

面向非结构化数据的分布式文件/对象系统比较有名的包括Lustre(HPC)GlusterFS(NAS NFS)、HDFS(hadoop)、ceph(虚机块存储)、swift(restful对象存储),各有不同的适用领域。

结构化数据的NoSQL分布式存储,种类和数量最多,按照Martin Fowler的分类,包括Aggregated Oriented NoSQL和图数据库NoSql;Aggregated Oriented NoSQL大致分为3类:

1、Key-value NoSQL,例如Redis Riak等;

2、column family NoSQL(wide column store),典型的是Hbase Cassandra

3、document NoSQL,典型的是MongoDB

开源的图数据库有Neo4j;

很多OLAP分析型数据库是分布式的,例如GreenPlum, CitusDB(都是基于pgSQL);还有一些基于proxy实现关系数据库集群(很多互联网公司都有类似mysql fabric的产品),当然这些并非真正意义上的分布式数据库,可以认为是个sql的分库分表中间件;

还有一类兼容单机数据库,支持强事务的OLTP分布式数据库,统称NewSQL;NewSQL有不同的类别,比如stone braker搞的voltdb,有类似google的Spanner/F1的tidb/cockroachDB,具体对比可以看下CMU Pavlo的newSQL综述文章。

开源的消息队列也非常多,应用广泛程度不亚于nosql存储。有些对事物支持比较好的消息队列,例如rabbitmq active mq等;还有很多的kafka,主要做日志处理。消息队列的核心关注点就是一个消息at least once, at most once, only once。

分布式计算  广义的分布式计算的外延很大,可以参考Distributed Computing Paradigms(包含了rpc p2p mpi等分布式通信模型)。AI/Big data兴起后,分布式并行计算的框架开始流行,比如:

1、hadoop/spark等以MapReduce为范式的批处理引擎

2、flink,storm等流计算/CEP引擎

3、tensorflow mxnet等ParameterServer范式的DeepLearning 训练框架

4、分布式图计算引擎比如pregel等

5、面向大数据集的传统ML的分布式训练框架,xgboost/lightGBM/gensim/Angel

一些insight

分布式存储系统有一个常见的CAP理论,从CAP的角度,则可以划分为CP和AP系统。Dynamo可以配置为偏向CAP里面的AP系统,提升Availability,适当牺牲consistence,只要做到eventual consistence即可满足,允许短暂时间的数据失真,但是该系统必须是随时允许用户提交写请求,例如Dynamo应用于amozon的购物车服务。CAP在学术界已经算相对传统的理论,最新研究的热点理论是FIT不可能三角:Fairness,Isolation和Throughput,三者只能满足两条牺牲一条(http://cs-www.cs.yale.edu/homes/dna/papers/fit.pdf)。voltdb属于牺牲fairness,spanner则是牺牲吞吐量。大部分NoSQL存储均属于牺牲隔离性满足公平和性能,而一个严格的分布式OLTP系统,则需要满足隔离性。

NoSQL还有一个常见的说法叫BASE(basically available soft state and eventually consistence),总结了NoSQL存储的一些特点:不保证绝对高可用,极端情况下允许返回失败;集群内部存储数据的状态也会存在变化(例如过期老化,副本修复等);最终一致性可定要满足;

分布式并行计算领域也是一个非常热门的话题,比较前沿的工作,例如,Berkeley Rise lab做的面向强化学习的Ray;国内老师木在做的企业级大数据集的深度学习框架,支持模型并行/数据并行的自动调度和资源分配;petuum 的SSP方式ML并行训练;还有比如AutoML/神经网络搜索,由于计算量很大,一般也需要实现分布式计算。整体上可以从两个维度来考虑,一个是并行加速的模型,一个是节点间数据同步的模式。按照并行加速模式,可以分为数据并行、模型并行两种。数据并行比较流行,一般的tf、mxnet、pytorch都支持;模型并行相对少些,不过最新的一些大模型,特别是图相关的模型,已经很难在单个节点计算。同步模式上看,有BSP,半同步、异步多种方式。从内部节点的通信模式上,则有参数服务器/all reduce 等多种通信方式。