[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 等較便宜的儲存空間上