消息队列与负载平衡。我不太明白两者的区别

消息队列与负载平衡。我不太明白两者的区别

帮我理解一些事情。我研究过几种企业应用程序架构,我注意到其中几种使用了消息队列服务,如 ActiveMQ 或 RabbitMQ。我对消息队列服务器的功能有一些粗略的了解,但我不明白为什么我会选择构建使用消息队列服务器的应用程序基础架构,而不是使用标准的负载平衡技术,如 HAProxy 等。

两者之间的真正区别是什么?两者似乎都将流量和/或消息路由到订阅队列或池的节点。它们各有优缺点吗?

答案1

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

消息队列系统

消息队列服务的主要功能是允许应用程序的不同部分之间进行异步通信。MQ 服务器通常允许配置任意数量的路由规则、队列等,应用程序的各部分向其发布消息,而应用程序的其他部分则订阅这些消息。

以视频转码应用程序为例。所需的基本功能包括:

  1. 用户上传视频文件
  2. 系统将视频转码为其他格式
  3. 系统使转码视频可供下载

完成第 1 步后,您真的希望用户的浏览器会话在转码过程中挂起 45 分钟吗?不,您不想这样。因此,您不必同步执行转码,而是将一条消息转储到消息队列中,告知用户有工作要做。然后,应用程序的后端处理部分会拾取此消息,执行转码,然后在完成后向另一个队列发布“我完成了!”消息,这会触发应用程序的第三部分向用户发送电子邮件,告知用户他们的工作已完成。

除了分离应用程序的不同部分之外,MQ 系统还允许作业排队。假设您的硬件仅允许您每 30 分钟处理一个视频,但在高峰负载期间,您的用户上传的视频数量超过这个数字。使用 MQ 可让这些作业优雅地排队,并按顺序处理,因为后端能够这样做。

负载平衡系统

负载平衡的主要功能是处理来自客户端的传入请求,并将这些请求分发到一个或多个后端应用程序服务器。

结论

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

相关内容