Linux
消息隊列與負載平衡。我真的不明白其中的區別
幫助我理解一些事情。我查看了幾種企業應用程序架構,並註意到其中一些使用消息隊列服務,例如 ActiveMQ 或 RabbitMQ。我對消息隊列伺服器的作用有初步的了解,但我真的不明白為什麼我會選擇建構一個使用它的應用程序基礎架構,而不是像 HAProxy 之類的標準負載平衡技術。
兩者之間的真正區別是什麼?兩者似乎都將流量和/或消息路由到訂閱隊列或池的節點。這些都有優點/缺點嗎?
正如邁克爾所說,這兩者在功能和能力上大不相同。
消息隊列系統
消息隊列服務的主要功能是允許應用程序的不同部分之間進行非同步通信。MQ 伺服器通常允許配置任意數量的路由規則、隊列等,消息由應用程序的一部分發布並由應用程序的其他部分訂閱。
以影片轉碼應用程序為例。所需的基本功能是:
- 使用者上傳影片文件
- 系統將影片轉碼為不同的格式
- 系統使轉碼後的影片可供下載
步驟 1 完成後,您真的希望使用者的瀏覽器會話在轉碼發生時掛起 45 分鐘嗎?不,不這麼認為。因此,不是同步執行轉碼,而是將消息轉儲到有工作要做的消息隊列中。然後這條消息被你的應用程序的後端處理部分接收,它執行轉碼,然後在完成時發布“我完成了!” 消息發送到不同的隊列,這會觸發應用程序的第三部分通過電子郵件向使用者發送他們的工作已完成。
除了分離應用程序的不同部分之外,MQ 系統還允許作業排隊。假設您的硬體僅允許您每 30 分鐘處理一個影片,但在高峰負載期間,您的使用者上傳的影片不止於此。使用 MQ 允許這些作業優雅地排隊並按順序處理,因為後端能夠這樣做。
負載平衡系統
負載平衡的主要功能是處理來自客戶端的傳入請求並將這些請求分發到一個或多個後端應用程序伺服器。
結論
換句話說,消息隊列服務專注於不同應用程序部分之間的非同步通信,而負載平衡服務專注於客戶端與一個或多個後端伺服器池之間的同步通信。