简介
本人在多个大厂从事分布式系统的开发和研究近二十年,对亚马逊的 Dynamo、谷歌的 BigTable 和 MapReduce、Apache 的 Hadoop 以及国内的OBS, TOS, COS, OSS,juiceFS 都有过涉猎和研究。
鉴于自身对各种分布式系统的理解,在本专栏中我试图提供更易于理解的分布式系统介绍,能让分布式系统对于普通人来讲不再那么高不可攀。
对我来说,这意味着两件事:
- 介绍阅读更严肃的文本所需的关键概念。
- 提供涵盖足够详细内容的叙述,让你了解正在发生的事情,而不会陷入细节。
在我看来,大部分分布式编程都是为了处理分布式带来的两个后果:
- 信息能以光速传播(更快获取信息)
- 独立事物独立地失败(单一事物的失败导致该事物的价值不可再用)
换句话说,分布式编程的核心是处理距离和拥有备份冗余。这些约束定义了可能的系统设计空间,我希望在阅读本文后,你将更好地了解距离、时间和一致性模型之间的相互作用。
本文重点介绍分布式编程和系统概念,你需要了解数据中心的商业系统。试图涵盖所有内容是不切实际的,后续你还应该学习许多关键协议和算法(例如,涵盖该学科中许多被引用最多的论文),包括一些尚未进入大学教科书的 令人兴奋的看待最终一致性的新方法 - 例如 CRDT 和 CALM 定理。
我将按如下目录分多篇来阐述,力求把每个知识点讲透。
第一章 基础知识
第一章通过介绍一些分布式领域重要的术语和概念,从高层次介绍分布式系统。它涵盖了高层次的特性,例如可扩展性、可用性、性能、延迟和容错性;这些特性为何难以实现,以及抽象和模型以及分区和复制如何发挥关键作用。
第二章 抽象层次的上升和下降
第二章深入探讨了抽象和不可能性结果。它以尼采的名言开始,然后介绍系统模型和典型系统模型中做出的许多假设。然后讨论 CAP 定理并总结 FLP 不可能性结果。然后转向 CAP 定理的含义,其中之一是应该探索其他一致性模型。然后讨论了许多一致性模型。
第三章 时间与顺序
理解分布式系统的一个重要部分是理解时间和顺序。如果我们无法理解和建模时间,我们的系统就会失败。第三章讨论了时间和顺序、时钟以及他们的各种用途(例如矢量时钟和故障检测器)。
第四章 复制-防止分歧
第四章介绍了复制问题,以及解决复制问题的两种基本方法。事实证明,大多数相关问题都可以通过这种简单的描述来讨论。然后,讨论了从容错性最低的2PC到 Paxos 的保持单副本一致性的复制方法。
第五章 复制-接受分歧
第五章讨论了具有弱一致性保证的复制机制。它介绍了一个基本的协调场景,其中分区副本试图达成一致。然后讨论了亚马逊的 Dynamo 作为具有弱一致性保证的系统设计的实践。最后,讨论了无序编程的两个观点:CRDT 和 CALM 定理。
第六章 附录
包含进一步加强分布式技能的一些建议。