[elixir! #0071] 功能強大的消息處理庫 ---- Broadway (1)

互聯網產品每每要面對突如其來的巨大請求量,然後端業務可以支持的併發請求數量是有限的。經常使用的架構是首先讓請求進入消息隊列,例如 Kafka,RabbitMQ,GooglePubSub 等等。同時後端服務最爲消費者分批地從消息隊列中獲取本身可以處理的消息。後端

這裏就涉及到一些複雜問題,例如:網絡

  1. 消息處理的原子性,或者叫事務性。即一個消息處理到一半出錯了,那麼這個消息不該該被從消息隊列中刪除。
  2. 消息的批處理,尤爲是網絡延遲較高的狀況下,批量消費消息能夠減小不少等待時間。
  3. 避免消息丟失,在出錯的時候消息不該該丟失。
  4. 「軟着陸」,或者說正確處理關機,在關機前應該作好準備工做。

以上這些功能 Broadway 都提供了,而且還有更多。架構

而要用好 Broadway,首先須要熟悉 GenStage。GenStage 是一個更加基礎的庫,使用它能夠定義出消息的消費者和生產者。併發

使用 GenStage 定義出的生產者和消費者本質上是一個個進程,包含了特定的預設的行爲模式。隊列

相關文章
相關標籤/搜索