这是一个非常简化的答案,但它给出了一般的想法。
让我们从电话与电子邮件的角度来考虑这一点。假装一分钟电子邮件不存在。要完成工作,您必须给每个人打电话。当您通过电话与某人交流时,您需要让他们在他们的办公桌前才能联系到他们(假设他们在工厂并且听不到他们的手机铃声):-) 如果您希望联系的人不是'在办公桌前,您被困在等待他们回电话之前(或者更有可能,您稍后再给他们回电话)。你也一样——在有人打电话给你之前,你没有任何工作要做。如果多人同时打电话,你不知道,因为你一次只能处理一个人。
但是,如果我们有电子邮件,您可以将您的请求与其他人“排队”,在他们方便的时候回答(但更有可能忽略)。如果他们确实忽略了您的电子邮件,您可以随时重新发送。您不必等待他们在办公桌前,他们也不必等到您挂断电话。工作量均匀,事情运行得更加顺利。作为额外的奖励,您可以将不想处理的消息转发给您的 peons。
在系统工程中,我们使用术语“紧密耦合”来定义像上面的电话场景一样工作的程序(或程序的一部分)。它们彼此非常紧密地依赖,经常在程序的各个部分之间共享实现。在这些程序中,数据按串行顺序处理,一次一个。这些系统通常很容易构建,但有一些重要的缺点需要考虑:(1)更改程序的任何部分可能会导致整个代码的级联更改,这会引入错误;(2) 系统的可扩展性不是很好,通常必须随着需求的增长而报废和重建;(3) 系统的所有部分必须同时运行,否则整个系统将无法运行。
基本上,如果程序非常简单或者有一些特殊的原因需要使用紧密耦合的程序,那么紧密耦合的程序是好的。
在现实世界中,事情要复杂得多。程序不可能那么简单,以紧密耦合的方式开发企业应用程序成为一场噩梦。因此,我们使用术语“松散耦合”来定义由许多较小部分组成的大型系统。这些部件具有非常明确的边界和功能,因此可以更轻松地完成系统的更改。它是面向对象设计的精髓。消息队列(如 RabbitMQ)允许在各种程序和程序的各个部分之间进行类似电子邮件的通信,从而使工作流程更像与人一起工作。然后,添加额外的容量就变得很简单,只需在需要的地方启动和额外的计算机即可。
显然,这是一个粗略的简化,但我认为它传达了总体思路。构建使用消息队列的应用程序使您能够利用云服务提供商部署可大规模扩展的应用程序。这是一篇关于云设计的文章:http:
//blogs.msdn.com/b/silverlining/archive/2011/08/23/designing-and-building-applications-for-the-cloud.aspx