跳到主要内容

第一章:分布式系统导论

·7 分钟阅读
John DeTreville

RabbitMQ 需要更多更好的文档。(谁不需要呢?)特别是,我们需要更多更好的介绍性材料,向读者介绍各种基本概念,解释它们为什么重要,并激励他或她继续阅读并了解更多关于 RabbitMQ 的信息。这是该介绍的第一章的草稿。欢迎您的评论,第二章和第三章将很快发布。(您可能已经知道所有这些,但令人惊讶的是很多人不知道。本介绍是为他们准备的。)

旧的未来

很久很久以前,美国科幻作家艾萨克·阿西莫夫想象了一个未来世界,在这个世界里,一台巨大的计算机 Multivac 将控制人类的所有事务。信息将从全球各地的人们、企业和政府流入,Multivac 将存储和处理这些信息,并将完全正确的、重要的新信息发送回馈。各种各样的未来问题将从我们未来的自我涌入,而正确的未来答案将涌出。这个未来是一个美好的地方!

我们现在的世界与阿西莫夫的未来并没有那么不同,只是没有那么闪亮。我们有互联网,它连接着全球各地的人们、企业和政府,信息流入,信息流出,问题涌入,答案涌出。我们有谷歌、亚马逊、eBay 和 Facebook,我们的生活每天都在变得更好。更多更好的信息;更多更好的存储和处理;更多更好的答案。

但阿西莫夫只是一位卑微的化学博士,后来成为科幻小说作家,而不是像我们现在这样的真正的计算机科学家,他从未弄清楚如何准确地构建位于北极的那台巨大的、全知全能的 Multivac 的所有(或实际上,任何!)技术细节,以及准确地谁来为它买单,以及准确地他们会允许什么用途,等等。他把那部分留给后代去解决,如果他们真的能解决的话。随着时间的推移,事实证明,任何人在街角的电脑商店都能买到的任何一台电脑,仍然比控制人类所有事务所需的规模小几个数量级,也弱几个数量级。这是坏消息。

新的未来

好消息是,阿西莫夫没有预料到(哈!),未来的计算机便宜,几乎是白菜价,主要是用硅制成的,毕竟硅只是经过处理的泥土。因此,如果您在商店购买的任何一台计算机(或从亚马逊云端租用的计算机,或其他任何东西)的存储或处理能力比您想对人类做的事情少一百万倍,那就只需购买一百万台并将它们连接在一起!(需要一些组装。)谷歌正接近做到这一点,一旦它完成对北极的收购,其他所有人都在努力紧随其后。谷歌有自己的计算机来执行其世界计划,Facebook 也有自己的计算机和自己的计划,中央情报局也有,您的公司或组织也有,每个人都在合作和竞争,以控制人类的所有事务。我们旧的集中式计算机系统不可能变得足够大,所以我们正在用闪亮的新分布式系统取代它们,这些系统大概可以永远增长。我们的生活每天都在变得更好。

但是,让您的数百万台计算机(甚至只是几千台,甚至更少!)协同工作来完成分配的任务,并不像您的上层管理人员听起来那么容易。一台给定的服务器计算机可能每年崩溃一次,原因是硬件故障、软件故障、电源故障或其他任何故障,这通常已经非常乐观了。如果您只有一千台服务器计算机,平均每 9 小时就会崩溃一台;如果您有一百万台,大约每 30 秒就会崩溃一台;如果您有十亿台,即使谷歌还没有达到这个数量级,大约每秒钟就会崩溃 30 台,祝您好运,让剩下的计算机不会崩溃或以其他方式发疯!一台集中式计算机可以是正常运行宕机,仅此而已,但一个分布式计算机系统更可能在任何时刻都处于 99% 正常运行和 1% 宕机的状态,而那 1% 宕机的部分不断转移,进一步迷惑其他 99%。分布式系统中的问题是不可避免的,而且它们可能会无限增长。欢迎来到未来!

到目前为止,您可能只有一千台计算机,或者可能只有一百台,甚至可能只有十几台左右,但您仍然会遇到问题,坏事仍然会发生。崩溃是一个明显的起因,但消息丢失或系统配置错误或微妙的竞争条件也会增加错误率。如果您想不出另外六个大型分布式系统的潜在问题,您可能从未构建或操作过一个。构建位于北极的那台巨大的 Multivac 可能会非常困难,但弄清楚您购买的那些数百万台小型计算机究竟如何协同工作可能会更加困难。该怎么办?

完美可靠性(并非真的)

有一句名言:如果您看到任何计算机系统被描述为可靠,请寻找星号和脚注,上面写着并非真的。完美可靠性是不可能实现的。将您的计算机放在加利福尼亚州昂贵的数据中心,一次足够大的地震可能会将它们全部摧毁。将它们分散在不同大陆板块上的许多昂贵的数据中心,您只需要再来几次地震(或海啸,或其他任何东西)就可以摧毁足够多的计算机(或网络链接,或其他任何东西),使其他计算机变得无用。足够多的自然或人为灾难可以摧毁任何东西,而且它们发生的频率可能比您想象的要高得多,尤其是人为灾难!这是坏消息。

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

货物崇拜和银行

不幸的是,在很多时候,似乎我们对分布式系统的需求增长速度快于我们的专业知识。分布式系统很难构建,而且可能永远不会变得那么容易。目前,我们通常只能采用最佳实践,研究那些做得对的分布式系统,并尝试弄清楚它们为什么成功,并尝试复制它们的成功。这有点像运行您自己的货物崇拜,但没有所有的椰子。

银行在许多方面都是一个值得研究和或许值得模仿的优秀行业。银行(和其他金融机构)显然非常关心可靠性,而且银行在相当长一段时间以来一直在构建相当大、相当可靠的分布式系统。今天的银行倾向于在可靠的消息队列系统之上构建其可靠的分布式系统,他们甚至为这种消息队列系统开发了一个开放标准,这对他们来说效果很好,这就是我们接下来要研究的内容。

© . All rights reserved.