目录
前言
分布式系统在互联网公司中的应用已经非常普遍,开源软件层出不穷,hadoop生态系统,从hdfs到hbase,从mapreduce到spark,从storm到spark streaming,heron,flink等等。。这么多开源分布式系统,我们该如何入手学习和分析呢?从而避免在开源的汪洋中迷失自己?这里会从概念,模型以及实际例子几个方面来分析如何学习分布式系统,从而让新手很快的入门。
小编整理了一份[中文]分布式系统原理与范型资料集锦,需要领取的小伙伴可以 点我 免费领取
近年来随着服务体系的不断庞大以及用户量的迅速增长,传统单一应用架构已经无法满足我们系统的需求,本篇小编主要阐述了分布式系统的原理以及优劣方案,可以给一些中小型企业支撑高并发以及单一架构改为分布式架构提供一些架构级别的技术方案。
一、分布式系统
我的 Phd 研究方向是分布式系统,我老板也是分布式系统出身,我们实验室在这方面的积累还算不错,所以借此问题谈谈自己的看法。首先需要说明的是,分布式系统是一个复杂且宽泛的研究领域,学习一两门在线课程,看一两本书可能都是不能完全覆盖其所有内容的。介于这篇文章是引导初学者入门,所以我个人觉得为初学者介绍一下当前分布式系统领域的全貌,也许比直接推荐论文和课程更有帮助。当初学者对这个领域建立起一个大的 Picture 之后,可以根据自己的兴趣,有选择性的深入不同领域进行进一步的学习。
这篇文章主要试图回答以下两个个问题:
1. 近些年分布式系统领域都在做些什么。
2. 为什么现在投入分布式系统的学习和研究是值得的。
二、实用的分布式系统知识
我会尽可能多的去介绍更 “实用” 的分布式系统知识。
什么是实用?例如:
Paxos 是分布式系统里一个重要而且实用的技术。
Consistent Hash 也是分布式系统里一个重要而且实用的技术。
MapReduce, Spark 等等都是很实用的系统。
什么不实用? 例如:
Paxos 算法的数学证明。(注意此处“不实用” 和 “不重要”的区别)
当然,分布式系统实在是一个太宽泛的话题,本人才疏学浅,回答也仅仅可能侧重于我所关心的领域和方向,很多地方都不能面面俱到。所以在此只能抛砖引玉, 蜻蜓点水,欢迎大家提出宝贵意见,我也会及时对文章进行修改和补充。
三、分布式系统近些年都在做些什么?
分布式系统是一个古老而宽泛的话题,而近几年因为 “大数据” 概念的兴起,又焕发出了新的青春与活力。除此之外,分布式系统也是一门理论模型与工程技法并重的学科内容。相比于机器学习这样的研究方向,学习分布式系统的同学往往会感觉:“入门容易,深入难”。的确,学习分布式系统几乎不需要太多数学知识(相比于机器学习),这也是为什么会造成 “入门容易” 的错觉。然而一旦深入下去,往往需要我们去体会 system 研究的 “简洁” 与 “美”,正如楼上 李沐 的回答中说的那样,系统工作是 “艺术” 而不是 “科学” ,这一点我觉得是系统研究工作最难,同时也是最精华的地方。总之把握一点原则:好的系统研究工作,尤其是分布式系统研究,一定是尽可能地用最简单、最直观的方法去解决实际的问题(看看 MapReduce 就知道了),因为简单就意味着实用。
总的来说,分布式系统要做的任务就是把多台机器有机的组合、连接起来,让其协同完成一件任务,可以是计算任务,也可以是存储任务。如果一定要给近些年的分布式系统研究做一个分类的话,我个人认为大概可以包括三大部分:
分布式系统研究分类
- 分布式存储系统
- 分布式计算系统
- 分布式管理系统
近十年来在这三个方向上,毫无疑问, Google 都是开创者,甚至很多业内人士都说,这十年是外界追随谷歌技术的十年。我们之前说到,分布式系统的研究是一门由实际问题驱动的研究,而 google 则是最先需要面对这些实际问题的公司。下面我们分别看看这三个方面工业界以及学术界这几年都在做些什么。
分布式存储系统:
分布式存储系统是一个非常古老的话题,同时也是分布式系统里最难,最复杂,涉及面最广的问题。 往细了分,分布式存储系统大概可以分为四个子方向:
- 结构化存储
- 非结构化存储
- 半结构化存储
- In-memory 存储
除了这四个子方向之外,分布式存储系统还有一系列的理论、算法、技术作为支撑:例如 Paxos, CAP, ConsistentHash, Timing (时钟), 2PC, 3PC 等等,这些内容我们会在后面提到。现在,我们先来看看上述四个子方