分布式系统
该文档主要是 mit 6.824 课程的笔记以及一些扩展。
Distributed Systems
Drivens and Challenges
分布式系统的核心是通过网络来协调,共同完成一致任务的一些计算机。包括大型网站的存储系统、大数据运算(MapReduce)。在设计一个系统时或者面对一个需要解决的问题时,如果可以在一台计算机上解决,而不需要分布式系统,那就应该用一台计算机解决问题。很多的工作都可以在一台计算机上完成,并且通常比分布式系统简单很多。所以,在选择使用分布式系统解决问题之前,应该充分尝试别的思路,因为分布式系统会让问题解决变得复杂。
分布式系统会让问题的解决变得复杂,引入分布式系统的驱动力主要是:
- 需要获得更高的计算性能:大量的并行运算、大量 CPU、大量内存、以及大量磁盘在并行的运行;
- 可以提供容错(tolerate faults)。比如两台计算机运行完全相同的任务,其中一台发生故障,可以切换到另外一台;
- 有一些问题天然在空间上就是分布式的。例如银行转账,本身就分布在不同的地域,这就需要一种两者之间协调的方法,所以有一些天然的原因导致系统是物理分布的;
- 构建分布式系统来达成一些安全的目标。比如有一些代码并不被信任,但是有需要和它进行交互,这些代码不会立即表现的恶意或者出现 Bug。你不会想要信任这些代码,所以想要将代码分散在多处运行,这样你的代码在另外一台计算机运行,我的代码在我的计算机上运行,通过一些特定的网络协议通信。所以,我们可能会担心安全问题,我们把系统分成多个的计算机,这样可以限制出错域。