分布式系统简单地说就是研究进程之间的交互。每两个交互的进程构成一个分布式系统,无论它们是否位于同一主机上。与单进程系统相比,分布式系统在正确性(即一致性)、可靠性和性能(即延迟和吞吐量)方面带来了新的挑战。
了解分布式系统原理和基础知识的最佳方法是 1)阅读《设计数据密集型应用程序》和 2)通读论文并遵循MIT 分布式系统课程中的笔记。
对于《设计数据密集型应用程序》(DDIA),我强烈建议你在工作中或网络上找个朋友和你一起通读。你也可以随时加入Software Internals Discord的 #distsys 频道,在阅读过程中提问。不过,最好还是能有几个伙伴一起通读这本书,即使他们和你一样是新手。
我以前也认为你可能要等到职业生涯结束几年后再阅读 DDIA,但当你有朋友一起阅读时,我认为你不必等待。
如果你只是略读了这本书,那你绝对应该回去好好读一遍。我已经读了三遍了,明年第二版出版后,我会在“软件内部原理”读书俱乐部里再读一遍。
请记住,DDIA 的每一章都提供了您可以继续阅读的论文参考,以防您最终记住 DDIA 本身。
当你阅读了 DDIA 或 MIT 分布式系统课程的部分内容并想要练习时,Fly.io x Jepsen分布式系统挑战赛是一个不错的选择。其他选择可能包括简单的实现(逐步增加复杂度):
- 两阶段提交
- 三阶段提交
- 单一判决 Paxos
- 链式复制(或 CRAQ),使用第三方共识库
- 筏
- 埃帕索斯
如果您觉得无聊,可以参阅 Alex Miller 的数据复制设计光谱,了解更多想法和变体。
如果您希望更多人关注,请查看我最喜欢的博客页面的分布式系统部分。
如果这些项目和论文听起来晦涩难懂或令人望而生畏,请记住,无论你是否了解并理解这些解决方案,你都会看到它们解决的问题。开发人员最终往往会重新发明这些方案的 hacked 版本,而这些版本更有可能存在一些细微的 bug。
相反,你可以识别并使用其中一种众所周知的构建模块。或者至少,当你必须使用一个新的分布式系统或最终需要自己设计一个新系统时,你能够更好地推理其正确性。
再说一次,如果您希望与大家交流想法或提出问题,我强烈建议您加入 Software Internals Discord 并在那里提问!
我写了一篇关于学习分布式系统基础知识的短文,其中有一些建议阅读的资源和一些建议尝试的项目。pic.twitter.com/b0EhDP8K0t
— Phil Eaton (@eatonphil) 2025年8月9日
原文: http://notes.eatonphil.com/2025-08-09-what-even-is-distributed-systems.html