跳至主内容

第一章:分布式系统入门

·阅读 7 分钟
John DeTreville

RabbitMQ 需要更多、更好的文档。(谁不需要呢?)特别是,我们需要更多、更好的入门材料,向读者介绍各种基本概念,解释它们为什么重要,并激励他们继续阅读并了解更多关于 RabbitMQ 的信息。这是那篇介绍的第一章。欢迎您提出意见,第二章和第三章将很快跟进。(您可能已经知道所有这些了,但令人惊讶的是,很多人并不知道。本介绍是为他们准备的。)

旧的未来

很久很久以前,美国科幻作家艾萨克·阿西莫夫设想了一个未来世界,在这个世界里,一台名为“Multivac”的巨型计算机将控制人类的所有事务。来自全球各地的人们、企业和政府的信息将源源不断地输入,Multivac 会存储和处理这些信息,然后精确地回传最新、最重要的信息。各种各样关于未来的问题将从我们未来的自己那里涌入,而正确的未来答案也将随之涌出。这个未来真是太美好了!

而我们当今的世界与阿西莫夫的未来并没有太大区别,只是少了那些闪闪发光的东西。我们有了互联网,它连接着全球的人们、企业和政府,信息流入,信息流出,问题涌入,答案涌出。我们有了谷歌、亚马逊、eBay 和 Facebook,我们的生活也因此每天都在变得更好。更多更好的信息;更多更好的存储和处理;更多更好的答案。

但阿西莫夫只是一位普通的化学博士转行的科幻作家,并非我们现在拥有的真正的计算机科学家,他从未详细(甚至根本没有!)阐述过如何建造那台位于北极的、全知全能的巨型 Multivac 的技术细节,也没有说明到底由谁来支付费用,以及他们会允许使用它的哪些方面,等等。他把这部分留给了后人去解决,如果他们能解决的话。随着时间的推移,人们也发现,任何一台我们可以在街角电脑商店买到的普通计算机,对于控制人类的所有事务来说,其存储和处理能力都远远不够。这便是坏消息。

新的未来

好消息是,阿西莫夫没有预料到(哈哈!),未来的计算机非常便宜,几乎是白菜价,因为它们主要由硅制成,而硅本质上就是经过加工的泥土。所以,如果任何一台你能在商店买到的(或者从亚马逊云上租用的,或其他任何方式)计算机,其存储或处理能力都比你想要为人类做的事情少一百万倍,那就买一百万台把它们连接起来!(需要一些组装。)谷歌正朝着这个方向努力,一旦完成对北极的收购。其他公司也在紧随其后。谷歌有自己的计算机来执行它的全球计划,Facebook 也有自己的计算机和计划,中央情报局也是,你的公司或组织也是,所有人都合作竞争,共同掌控人类的事务。我们旧的*集中式*计算机系统根本无法扩展到足够大的规模,所以我们正在用闪亮的新*分布式*系统取而代之,这些系统理论上可以无限扩展。我们的生活也因此每天都在变得更好。

但让你的那一百万台计算机(甚至只是一千台,或者更少!)协同完成分配的任务,并没有你向上级汇报时听起来那么容易。一台服务器计算机可能每年因硬件、软件、电源故障或其他原因崩溃一次,这通常是比较乐观的估计。如果你只有一千台服务器计算机,平均每 9 小时就会有一台崩溃;如果你有一百万台,大约每 30 秒就会有一台崩溃;如果你有一亿台,甚至谷歌*至今*也没有那么多,每秒就会有大约 30 台崩溃,而且祝你好运,别让剩下的也崩溃或出现其他疯狂问题!一台*集中式*计算机要么是*运行中*,要么是*宕机*,仅此而已,但*分布式*计算机系统在任何时刻更有可能是 99% 运行中和 1% 宕机,而那 1% 宕机的部分会不断变化,进一步让其他 99% 的部分感到困惑。分布式系统中的问题是不可避免的,而且它们可能会无限制地增长。欢迎来到未来!

你可能至今只有一千台计算机,或者可能只有一百台,甚至可能只有十台左右,但你仍然会遇到问题,糟糕的事情仍然会发生。崩溃是一个明显的原因,但丢失的消息、配置错误的系统或微妙的竞态条件都会增加错误率。如果你想不出另外半打以上可能出现的大型分布式系统问题,你可能从未构建或操作过它们。建造北极那台巨型 Multivac 会非常困难,但弄清楚你购买的那些数以亿计的小型计算机如何协同工作,可能会更加困难。该怎么办?

完美可靠性(并非如此)

有一句名言:如果你看到一个计算机系统被描述为*可靠*,请留意星号和脚注,上面写着*并非如此*。完美可靠性是不可能实现的。把你的计算机放在加州的昂贵数据中心,一次足够大的地震就能让它们全部瘫痪。把它们分散在不同大陆板块的几个昂贵数据中心,你只需要多几次地震(或海啸,或其他灾难)就能让足够多的计算机(或网络链路,或其他东西)瘫痪,从而让其余的计算机变得无用。足够的自然或人为灾难可以毁掉任何东西,而且它们发生的频率比你想象的要频繁得多,尤其是人为灾难!这便是坏消息。

好消息是,虽然你无法构建完美可靠的系统,但你可以构建*足够*可靠的系统,无论“足够”意味着什么。也就是说,你可以构建任意可靠的计算机系统。你可以确保,如果*足够多*的计算机正常运行、连接并正常工作,那么整个系统将继续做正确的事情,即使更多的计算机发生故障,整个系统也不会做任何错误的事情。(它可能什么都不做,但这就是生活。)如果你想要更高的可靠性,你可以购买更多的计算机(可能多很多)并将它们正确连接。如果你知道怎么做的话。

模拟崇拜和银行

不幸的是,很多时候,我们的分布式系统需求似乎比我们的专业知识增长得更快。分布式系统很难构建,而且它们可能永远都不会变得很容易。现在,我们往往只能做到遵循*最佳实践*,研究那些做得好的分布式系统,试图找出它们成功的原因,并努力复制它们的成功。这有点像在运行自己的模拟崇拜,只是没有椰子。

从很多方面来看,*银行*都是一个值得研究甚至模仿的绝佳行业。银行(和其他金融机构)显然*非常*关心可靠性,而且银行已经构建了相当庞大、相当可靠的分布式系统一段时间了。如今,银行倾向于在可靠的*消息队列系统*之上构建它们可靠的分布式系统,并且它们甚至为此类消息队列系统制定了开放标准,这对它们来说效果相当不错,而这正是我们接下来要研究的。

© . This site is unofficial and not affiliated with VMware.