跳至主要内容

[System Design] Message Queue

Overview

  • Message Queue 的角色
    • 讓 sender (producer) 和 receiver(consumer)解耦
    • 能夠更有效率的處理請求
  • IBM MQ
    • 1993 年發布
    • 支援 persistent 和 non-persistent messaging,確保系統出錯時,資料不會流失
    • 支援 Transaction,可以把 messages group 起來後,執行 commit 或 rollback
    • keywords: Messaging Middleware, Queue Manager
  • RabbitMQ
    • 2007 年發布
    • Flexible and dynamic messaging model
    • 支援多種不同的 protocol,例如 AMQP、MQTT、和 STOMP
    • 提供 message routing、queuing 和 pub-sub messaging
    • 有 RabbitMQ plugin 的設計,可以擴充功能
    • 支援 clustering
    • keywords: Message Broker, Producer, Consumer, Exchange, Bindings, Queues, direct, topic, fanout, binding key, routing pattern
  • Apache Kafka
    • 2011 年發布,由 Linkedin 開發
    • 設計來處理高吞吐量(throughput)、即時資料串流(realtime data streaming),能夠處理大量的資料
    • distributed commit log
    • partition log architecture
    • keywords: event streaming, producer, consumer, consumer group, broker, topic, partition
  • Apache Pulsar
    • 由 Yahoo 開發
    • 結合 Kafka 的 scalability 和 performance,以及傳統 message queue 的彈性和豐富的功能
    • 設計成 multi-tenancy(多租戶架構):不同的客戶可以共享 cluster,同時又維持獨立性和安全性
    • 支援 Geo replication:讓資料可以在不同的 data center 建立 replica
    • 支援把舊的資料保存在 S3 等較便宜的儲存空間上