消息队列与负载平衡。 我真的不了解其中的差别

帮助我理解一些东西。 我已经看了几个企业应用程序体系结构,我注意到其中有几个使用了Message Queue服务,比如ActiveMQ或者RabbitMQ。 我对消息排队服务器有什么样的表面层次的知识,但是我不明白为什么我会select使用一种应用程序基础结构,而不是使用像HAProxy这样的标准负载平衡技术。

两者的真正区别是什么? 两者似乎都将stream量和/或消息路由到订阅队列或池的节点。 这些每个都有利/弊吗?

正如迈克尔所说,这两者在function和能力上差别很大。

消息队列系统

消息队列服务的主要function是允许应用程序不同部分之间的asynchronous通信。 MQ服务器通常允许configuration任意数量的路由规则,队列等,消息由应用程序的某些部分发布到应用程序的其他部分。

举个例子,一个video转码应用程序。 所需的基本function是:

  1. 用户上传video文件
  2. 系统将video转码为不同的格式
  3. 系统使转码video可供下载

第1步完成后,您确实希望用户的浏览器会话在转码发生时挂起45分钟吗? 不,不这样认为。 因此,不是同步执行代码转换,而是将消息转储到需要执行的消息队列中。 然后这个消息被你的应用程序的后端处理部分拾取,它执行转码,然后在完成时发布“我完成了! 消息发送到另一个队列,这会触发应用程序的第三部分,通过电子邮件向用户表明他们的工作已完成。

除了分离应用程序的不同部分之外,MQ系统还允许作业排队。 假设您的硬件只允许您每30分钟处理一个video,但在高峰负载期间,您的用户上传的不仅仅是这些。 使用MQ允许这些作业优雅地排队,并按照后端能够顺序处理。

负载平衡系统

负载平衡的主要function是将来自客户端的传入请求置于区域中,并将这些请求分配给一个或多个后端应用程序服务器。

结论

换一种说法,消息队列服务专注于不同应用程序部分之间的asynchronous通信,而负载平衡服务专注于客户端与一个或多个后端服务器池之间的同步通信。