现在主流开源分布式系统架构都有哪些?

版权声明:本文为博主原创文章,转载请申明原文出处。 https://blog.csdn.net/xuheng8600/article/details/79975739
分布式计算
Hadoop
分布式系统

现在主流开源分布式系统架构都有哪些?

关注者
950
被浏览
112,808

14 个回答

默认排序
68 人赞同了该回答
分布式系统是一个非常广泛的概念,它最终要落实到解决实际问题上,不同的问题有不同的方法和架构。所有的开源软件都是以某个应用场景出现,而纯粹以“分布式”概念进行划分的比较少见。
但如果以算法划分,到能分出几类:
1.以Leader选举为主的一类算法,比如paxos、viewstamp,就是现在zookeeper、Chuby等工具的主体
2.以分布式事务为主的一类主要是二段提交,这些分布式数据库管理器及数据库都支持
3.以若一致性为主的,主要代表是Cassandra的W、R、N可调节的一致性
4.以租赁机制为主的,主要是一些分布式锁的概念,目前还没有看到纯粹“分布式”锁的实现
5.以失败探测为主的,主要是Gossip和phi失败探测算法,当然也包括简单的心跳
6.以弱一致性、因果一致性、顺序一致性为主的,开源尚不多,但大都应用在Linkedin、Twitter、Facebook等公司内部
7当然以异步解耦为主的,还有各类Queue
。。。。
684 条评论
分享
收藏感谢
27 人赞同了该回答

有几个大的维度来区分:

有状态、无状态;着重存储还是着重计算;long service还是批处理。

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

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

b)着重计算的分布式计算框架;

c)分布式消息队列

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

  1. 分布式协同系统(分布式日志复制)
  2. 分布式任务调度框架
  3. 流计算框架
  4. 分布式文件/对象系统
  5. 分布式NoSQL存储
  6. 分布式关系数据库(OLAP、OLTP);
  7. 各种消息队列mq
  • 分布式协调系统(日志复制系统)其实就是paxos算法及其变体的实现,典型的有zookeeper、etcd;一般来说只存少量的元数据信息,重点在高可用强一直,是很多分布式系统不可或缺的组件;
  • 开源的分布式文件/对象系统比较有名的包括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;

  • 分布式关系数据库(SQL完全兼容)分析型的有GreenPlum(商业版的OLAP很多,开源的少),事务型开源的有Voltdb;还有一些基于proxy实现关系数据库集群(很多互联网公司都有类似mysql fabric的产品),当然这些并非真正意义上的分布式数据库;
  • 还有一些基于开源的NoSQL分布式存储基础上研发的分布式OLTP数据库(类似spanner),数据模型和事务支持,介于关系数据库和NoSQL之间,例如Atlasdb(基于cassandra)、cockroachdb(仿照F1)等。分布式OLTP的发展还不是太成熟,还有一个calvin的项目(非2PC)值得关注,基于VLDB2014年的论文;国内一有个TiDB的项目,也比较值得关注
  • 开源的消息队列也非常多,应用广泛程度不亚于nosql存储。有些对事物支持比较好的消息队列,例如rabbitmq active mq等;还有很多的kafka,主要做日志处理。消息队列的核心关注点就是一个消息at least once, at most once, only once。
  • 分布式计算框架,典型的有基于mapreduce的hadoop,基于内存计算的spark。基于mapreduce的计算框架是基于有限数据集,而面向无限数据集的流计算矿建也比较多,例如storm,Flink,samza等等也不少。
  • 面向机器学习的分布式计算框架tensorflow mxnet caffeine等(需要支持GPU计算框架cuda等),架构特点跟其他计算框架有很大不同,主要建模对象是人工神经网络,需要进行大量的浮点运算和迭代运算,往往会采用一个全局的参数服务器存放迭代计算的中间结果。

分布式存储系统有一个常见的CAP理论,从CAP的角度,则可以划分为CP和AP系统。Dynamo可以配置为偏向CAP里面的AP系统,提升Availability,适当牺牲consistence,只要做到eventual consistence即可满足,允许短暂时间的数据失真,但是该系统必须是随时允许用户提交写请求,例如Dynamo应用于amozon的购物车服务。

CAP在学术界已经算相对传统的理论,最新研究的热点理论是FIT不可能三角:Fairness,Isolation和Throughput,三者只能满足两条牺牲一条(cs-www.cs.yale.edu/home)。voltdb属于牺牲fairness,spanner则是牺牲吞吐量。大部分NoSQL存储均属于牺牲隔离性满足公平和性能,而一个严格的分布式OATP系统,则需要满足隔离性。

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

总而言之,针对不同的应用场景,不同的数据模型,不维度的tradeoff,各大互联网公司的码农了造了很多分布式存储的轮子。总起来的思想都是,需要持久化存储的数据状态,交给一个分布式存储系统来做,应用开发者,除了关注业务逻辑之外,需要在不同的分布式存储中选择一个适合自己的轮子,特别是数据一致性、持久性和性能之间的trade off。

276 条评论
分享
收藏感谢收起
18 人赞同了该回答
功能分: olap, oltp, 分布式日志,share-nothing, numa, MapReduce, DAG.
数据分:表格,对象,文件,关系。
架构分: 类bigtable, 类dynamo
日志复制分: primary-backup,gossip,quorum.同步,半同步,异步。
数据切分分:hash,range
workload分:很多种
membership分:自己选主,主控节点选主,dlm选主。
CAP折衷分:强一致性牺牲可用性,最终一致性更高的可用性。
18添加评论
分享
收藏感谢
29 人赞同了该回答

我的 gmail 里面现在还有一封草稿,是发给 erlang-china 社区的。内容是我一直想不明白,为什么 hadoop 成了主流的分布式计算架构,而不是 Erlang/OTP。后来觉得这种比较贴太多了,所以没有发出去。

我认为 Erlang/OTP 系统是最优秀的分布式架构。它的每个特性----变量不变、轻量线程、IPC/RPC 机制、闭包、代码热升级、监控树模型、world等等等等----都是为了分布与并发准备的。用 Erlang 做分布式架构实在太轻松了,开发效率是 C++ 开发的近十倍

国内很多项目也纷纷让 Erlang 上马,但基本上都秘而不宣。Erlang 社区也曾经一度活跃,到现在,已经沉寂了快两年了。我也很期待像某人解释的那样,兴起必然伴随着跌宕起伏,金子迟早会发光的。
2914 条评论
分享
收藏感谢
7 人赞同了该回答
高性能rpc服务框架,zookeeper服务注册和发现,配置中心这几个是重点,其他的比如MQ和缓存服务
7添加评论
分享
收藏感谢
5 人赞同了该回答
粗略一看二郎的语法,顿时奔溃了
能流行起来的东西,往往是因为他简单易用
5添加评论
分享
收藏感谢
1 人赞同了该回答

题住如果感兴趣的话可以先看看几个经典的paper:

(1) 做fault-tolerance, 一致性的:paxos

(2) 做分布式计算的,mapreduce,spark

(3) 做分布式存储的,bigtable,spanner

1添加评论
分享
收藏感谢
1 人赞同了该回答
我们曾经做过一个网站,之前用微软4.0开发的,数据量达到7万*35万后,查询统计功能就完全死掉了,没法用,后来更换了erpcore快速开发框架,利用缓存技术重新开发,这个问题基本就解决了,这个比较适合像学校这种要求自有服务器,小的技术团队开发的web软件架构
1添加评论
分享
收藏感谢
1 人赞同了该回答
参与人数越多的大系统,使用同构技术带来日后维护的难度风险越高,所以现在开源分布式系统基本都是基于公开协议的 MQ 或 RPC 进行组织的。Erlang 作为一个无所不包的平台,用在一个公司 / 团队内部实现系统是可以的,放在外面,优势不如“找不到合适的人”的劣势明显。
1添加评论
分享
收藏感谢
1 人赞同了该回答
erlang不流行可能与其编程思想有关,其独特编程思想,让那些有思维定式的人很难理解。所以,真正掌握的人不多,能掌握的都是高手,高手大多比较谦虚,经历丰富高手一般都非常谦虚。所以,社区不热。
12 条评论
分享
收藏感谢
关注
0添加评论
分享
收藏感谢
嗯,erlang确实被忽略了!现在多核超线程是该产生点变革性的东东了
01 条评论
分享
收藏感谢
scala+akka
0添加评论
分享
收藏感谢

dubbo

0添加评论
分享
收藏感谢
阅读更多
想对作者说点什么?

博主推荐

换一批

没有更多推荐了,返回首页