原文链接:Distributed systems
(相关资料图)
我希望有一本文本能够汇集许多最新分布式系统背后的理念 - 例如亚马逊的Dynamo, 谷歌的BigTable和MapReduce, Apache的Hadoop等等。
在这段文字中,我试图提供一个更易理解的分布式系统简介。对我来说,这意味着两件事情:介绍你需要了解的关键概念,以便在阅读更深入的文本时能够愉快度过,同时提供一个涵盖足够详细内容的叙述,以便你能够大致理解发生的事情,而不会陷入细节之中。现在是2013年,你拥有互联网,可以选择性地阅读你最感兴趣的主题。
在我看来,分布式编程的很大一部分是处理分布的两个后果的影响:
信息以光速传播独立的事物独立失败换句话说,分布式编程的核心是处理距离(嗯!)和拥有多个事物(嗯!)。这些约束条件定义了可能的系统设计空间,我希望在阅读完本文后,你能更好地理解距离、时间和一致性模型的相互作用。
这段文字专注于分布式编程和系统概念,这些是您需要了解数据中心中商业系统所需的。试图覆盖所有内容是不可能的。您将学习到许多关键的协议和算法(例如,涵盖了该学科中最常引用的论文之一),包括一些新的令人兴奋的方式来看待最终一致性,这些方式尚未被收录到大学教材中,例如 CRDTs 和 CALM 定理。
我希望你喜欢它!如果你想说谢谢,请在Github(或者 Twitter)上关注我。如果你发现错误,请在Github上提交一个拉取请求。
第一章概述了分布式系统的高层次内容,介绍了一些重要的术语和概念。它涵盖了高层次的目标,如可扩展性、可用性、性能、延迟和容错性;以及这些目标是如何难以实现的,以及抽象和模型以及分区和复制是如何发挥作用的。
第二章深入探讨抽象和不可能性结果。它以尼采的一句名言开头,然后介绍了系统模型以及在典型系统模型中所做的许多假设。然后讨论了CAP定理并总结了FLP不可能性结果。然后转向CAP定理的含义之一,即人们应该探索其他一致性模型。随后讨论了一些一致性模型。
理解分布式系统的一个重要部分是理解时间和顺序。在我们无法理解和建模时间的程度上,我们的系统将会失败。第三章讨论了时间和顺序,以及时钟和时间、顺序和时钟的各种用途(例如向量时钟和故障检测器)。
第四章介绍了复制问题,并介绍了两种基本的执行方法。事实证明,大部分相关特性都可以用这个简单的描述来讨论。然后,从最不容错的方法(2PC)到Paxos,讨论了用于维护单一副本一致性的复制方法。
第五章讨论了具有弱一致性保证的复制。它介绍了一个基本的协调场景,其中分区副本尝试达成一致。然后,它讨论了亚马逊的Dynamo作为一个具有弱一致性保证的系统设计的例子。最后,讨论了两种关于无序编程的观点:CRDTs和CALM定理。
附录包括了进一步阅读的建议。
*:这是一个谎言。Jay Kreps 的这篇文章详细阐述了。