了解分布式系统:从哪里开始?

2020-06-10 21:51:22

这绝对不是21天后学习分布式系统的帖子。我推荐一个有原则的、从头开始学习分布式系统的项目,第一个阶段需要整整三个月的时间,之后需要更多的时间来建立能力。如果你是一个务实的、面向编码的人,你可能不太喜欢我的建议。你可能会反对这样的说法,我不应该通过编码和动手来学习分布式系统吗?为什么我不能从部署Hadoop集群或研究RAFT代码开始呢?";我认为这是学习分布式系统的错误方式,因为看到类似的代码和编程语言构造会让您认为这是熟悉的领域,并且会给您一种错误的安全感。但是,没有什么比真相更远的了。这句话实际上是我的分布式系统教学大纲中的第一句话。与其试图将分布式系统构造与集中式构造相关联,您应该将分布式系统视为一种全新的事物。您应该首先深入研究分布式系统中固有的困难(关于并发性和容错的推理),而不是涉足偶然的困难(框架的实现)。对于分布式系统的原则性基础研究,这是我推荐的。要理解并发性推理的挑战,重要的是从谓词逻辑的快速速成课程开始,以及关于安全属性(下一步是稳定的、不变的)和活跃性属性(瞬态、确保、引导、变量函数)的推理。Paolo Sivilotti是统一伪代码和推理框架创建者之一的学生,他在自己的书中有一个很好的教学方法来教授这些概念,这本书可以免费下载。我上课的第一个月用这本书。(谢谢你,保罗!)。对你来说,这可能看起来像是枯燥的工作,就像对我的许多学生一样。但让我告诉你,就像我告诉他们的那样,这是你首先需要学习/内化的东西,这样你才能开始练习Dist-sys功夫。(为了激励学生进行这项跑腿工作,我向学生展示了“空手道小子”中的场景。)。在了解了关于安全和进度的推理的背景知识之后,您可以开始使用TLA+/Pluscal框架,在该框架中您可以编写分布式算法,并且模型检查器可以告诉您您有多傻。您可以在我的博客中的许多帖子中找到有关TLA+如何帮助您了解分布式系统的信息。希尔勒的TLA+简介网站非常适合您入门。在此之后,您可以阅读兰波特免费提供的许多书籍和视频。然后,我建议研究分布式系统中的不可能结果。没有什么比看看你如何在常见的失败就业情况下甚至连最基本的协调任务都做不到更好的了,以明确这一点,即有两个重大的不可能结果,协同攻击和FLP不可能结果。协同攻击结果表明,如果通信信道可以丢弃消息,则不能在有限轮次内使用确定性协议解决分布式共识。好的,让我们假设可靠的渠道,或者最终在足够长的时间内保持可靠的渠道。战死了!当着你的面。FLP表明,即使有可靠的信道,在异步模型下,您也不能在存在单个崩溃故障的情况下,在有限轮次内使用确定性协议解决分布式共识。CAP定理考虑了原子存储问题的协同攻击模型,这是一个比分布式共识更容易的问题,并表明对于任意不可靠的信道,也不能解决原子存储问题。为了流畅地介绍不可能的结果,我使用两阶段提交作为工作示例,并通过TLA+建模展示了这些不可能的结果如何在简单的两阶段提交协议的上下文中发挥作用。在您了解了这些不可能的结果之后,您就可以开始学习如何规避(而不是击败)这些不可能的结果。这就把我们带到了共识和容错讨论上。我找不到一本好的教科书来很好地报道不可能的结果以及分布式共识和原子存储协议。如果你知道哪本教科书能很好地涵盖这些主题,请告诉我。一本补充的免费pdf图书是Maarten van Steen Andrew S.Tanenbaum。分布式系统。从现在开始,您可以从https://www.distributed-systems.net/index.php/books/ds3/免费获得,您应该尝试阅读原始的研究论文和有能力的博客文章来解释它们。我可以推荐的一些博客是:用Paxos协议和变体跟踪不可能的结果是很好的,以展示它们是如何巧妙地绕过这些结果的。学好帕克索斯需要相当长的时间。但有一天,你终于了解了帕克索斯,觉得事情进展顺利