Distributed Message Systems


整理 分散式通訊系統 (Distributed Message Systems) 相關的基本概念,包含名詞定義、常用情境、實作技術、架構樣式、以及參考資料。

名詞

  • Message Queue:只處理基本的訊息儲存 (Holding)、轉送 (Passing)、傳遞 (Delivering)
  • Task Queue or Job Queue:管理儲存工作的狀態,包含不同種類的 Message Queue
  • Message Broker: 訊息協調器、訊息中介者
  • Pub/Sub: Publisher 和 Subscriber 的縮寫,基本的概念可以說是 Design Pattern 的 觀察者模式 (Observer Pattern)。整個運作的機制可以非同步、同步;可以是一對多、多對多。
  • 通訊協議 (Protocol)
    • MQTT: 全名 Message Queueing Telemetry Transport,是 IBM 發明的通訊協議,一開始用途在有限頻寬之下、輕量、可靠的傳輸。現在已經因為互聯網的發展,用途已經不只是當初設計的目的,更多是應用在 IoT 上。更多參閱 MQTT教學(一):認識MQTT
    • AMQP:全名 Advanced Message Queuing Protocol,是個通訊協議。協議中定義了 Message、Producer、Consumer、Virtual Host、Exchange、Queue … 等。
  • CQRS:全名是 Command Query Responsibility Segregation,主要是命令和查詢責任隔離,可從寫入作業分隔讀取作業。在 Microservice 中是很實用的架構。

實作

整理一些常見且流行的實作:

  • Message Queue
    • Redis Pub/Sub
    • RabbitMQ: AMQP
    • Amazon SQS
    • Apache ActiveMQ
    • Apache Kafka
    • GCP Pub/Sub
    • IronMQ
    • NATS - by golang
    • NSQ - golang
  • Task Queue / Job Queue
    • beanstalkd
    • Resque
    • IronWorker
    • Celery

Task Queue 的應用:我在實作 分散式測試架構 時,就是在實作 Task Queue 的架構。


團隊裡的 Message System 是什麼?

簡單講就是 Issue Tracking System,所有的事情都要集中到這裡,這裡是個 QueueWorking in Process (WIP)、企業的 小數據,成就決策的 大數據 … 這個系統是內部溝通協作的 Message 系統。

底下這張圖是在討論 Issue Tracking溝通成本 時會提的概念,也就是組織裡的訊息一致性的問題,如果沒有好的 Queue System 作為 Bufferring,那麼四散的訊息,各式各樣的溝通工具,最後會造成資訊紊亂、決策沒有依據,最後就是類似於 腦裂問題 (brain-split)

再任意地方我都可以驗證 康威定律

延伸閱讀

參考資料

書籍

網站文章


Comments