跳至主要内容

第 1 章:分布式系统简介

·阅读时长:7 分钟
John DeTreville

RabbitMQ 需要更多更好的文档。(谁不需要呢?) 特别是,我们需要更多更好的入门资料,介绍读者各种基本概念,解释它们的重要性,并鼓励他们继续阅读,了解更多关于 RabbitMQ 的知识。以下是该介绍的第 1 章。欢迎您的评论,第 2 章和第 3 章将很快发布。(您可能已经知道所有这些内容,但令人惊讶的是,很多人并不知道。本介绍是为他们准备的。)

旧的未来

很久很久以前,美国科幻作家艾萨克·阿西莫夫设想了一个未来世界,一台巨大的超级计算机 Multivac 控制着人类的所有事务。信息将从世界各地的人们、企业和政府流入,Multivac 会存储和处理这些信息,并将恰好正确的重要新信息发送回去。各种未来的问题会从我们未来的人们那里涌入,正确的未来答案也会随之涌现。这个未来是一个很棒的地方!

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

但是阿西莫夫只是一个低级的化学博士,转行做了科幻作家,而不是我们现在拥有的真正的计算机科学家,而且他从未完成过(或者说,实际上,任何!)关于如何在北极建造那台巨大的、无所不知、无所不能的 Multivac 的技术细节,以及究竟谁来支付它,以及究竟他们会允许使用它,等等。他将这一部分留给后代去解决,如果他们确实能够解决的话。随着时间的推移,事实证明,任何一家商店都能买到的计算机,其存储量和处理能力都比你想要对人类做的事情或为人类做的事情低几个数量级。这是坏消息。

新的未来

好消息是,阿西莫夫没有预料到(哈!),未来这里的计算机便宜,几乎是白菜价,主要由硅制成,毕竟硅只是经过处理的泥土。因此,如果你在商店里买到的任何一台计算机(或从亚马逊云中租用的,或者其他什么)的存储容量或处理能力都比你想要对人类做的事情或为人类做的事情低一百万倍,那就买一百万台,将它们连接在一起!(需要组装。)Google 正在接近实现这一目标,只要它完成对北极的收购,其他人也都紧随其后。Google 有自己的计算机来执行其对世界的计划,Facebook 也有自己的计算机和自己的计划,CIA 也有,你的公司或组织也有,每个人都在合作和竞争,以控制人类的所有事务。我们旧的集中式计算机系统不可能变得足够大,所以我们正在用闪亮的新分布式系统来取代它们,这些系统原则上可以无限地扩展。我们的生活每天都在变得更好。

但是让你的百万台计算机(甚至仅仅是一千台,或者更少!)共同完成它们的任务并不像听起来那么容易,尤其是对你的上层管理来说。一台给定的服务器计算机每年可能会因硬件故障、软件故障、电源故障或其他原因而崩溃一次,这通常是相当乐观的。如果你只有一千台服务器计算机,平均每 9 个小时就会有一台崩溃;如果你有一百万台,平均每 30 秒就会有一台崩溃;如果你有十亿台,即使 Google 还没有达到这个数量,平均每秒就会有 30 台崩溃,祝你好运,让剩下的计算机不要崩溃或出现其他故障!一台集中式计算机要么启动,要么关闭,仅此而已,但一个分布式计算机系统更有可能在任何时刻都是 99% 启动,1% 关闭,而 1% 关闭的部分会不断地转移,并进一步混淆另外 99% 的部分。分布式系统中的问题是不可避免的,而且它们会无限制地增加。欢迎来到未来!

你可能到目前为止只有几千台计算机,或者只有一百台,或者甚至只有十台左右,但你仍然会遇到问题,并且糟糕的事情仍然会发生。崩溃是一个明显的起因,但丢失的消息、系统配置错误或细微的竞争条件都会增加错误率。如果你想不出大型分布式系统中可能存在的其他几个问题,你可能从未构建或运行过一个。在北极建造那台巨大的 Multivac 将是极其困难的,但弄清楚你购买的数百万台较小的计算机究竟如何协同工作,可能更加困难。该怎么办?

完美的可靠性(不完全是)

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

好消息是,虽然你不能构建完全可靠的系统,但你可以构建足够可靠的系统,无论这个足够是什么。也就是说,你可以构建任意可靠的计算机系统。你可以确保如果足够多的计算机处于启动状态,并且已连接并正常工作,那么整个系统将继续执行正确的事情,即使更多计算机出现故障,那么整个系统也不会做任何错误的事情。(它可能什么都不做,但这就是生活。)如果你想要更高的可靠性,你可以购买更多计算机(可能要多得多),并将它们正确地连接起来。如果你知道怎么做的话。

货物崇拜和银行

不幸的是,很多时候,我们的分布式系统需求似乎比我们的专业知识增长得更快。分布式系统很难构建,而且它们可能永远不会变得容易。现在,我们所能做的通常是采用最佳实践,研究构建正确的分布式系统,并尝试找出它们成功的原因,并尝试复制它们的成功。这有点像经营你自己的货物崇拜,但没有椰子。

银行在很多方面都是一个值得学习和模仿的行业。银行(和其他金融机构)显然非常重视可靠性,而且银行已经构建了一些相当庞大、相当可靠的分布式系统,有一段时间了。如今,银行往往是在可靠的消息队列系统之上构建其可靠的分布式系统,而且他们甚至为这种消息队列系统制定了一个开放标准,这对他们来说非常有效,这也是我们接下来要关注的。

© 2024 RabbitMQ. All rights reserved.