消息隊列

使用場景

  1. 應用解耦合:應用之間不用直接調用,可以通過隊列來傳遞消息,完成通信。
  2. 異步任務:隊列可以用來執行異步任務,任務提交方無需等待結果。
  3. 削峯填谷:在突發流量時,可以通過隊列做緩衝,不會對後端服務產生較大的壓力,當峯值過去時,可以逐漸消費堆積的數據,來填平流量的低谷。
  4. 消息廣播:一寫多讀

消息協議

  1. JMS:是Java的消息服務,規定了Java使用消息服務的API,Spring提供了支持JMS的組件
  2. AMQP:是高級消息隊列協議,是應用層協議的開放標準,AMQP不從API層進行限定,而是直接定義網絡交換的數據格式,因此支持跨語言的能力。

常用的消息隊列

  1. RabbitMQ:支持AMQP、XMPP、SMPP等多種協議,比較重量級,單機吞吐量在萬級。
  2. ActiveMQ:可以部署於代理模式和P2P模式,支持多種協議,單機吞吐量在萬級,不夠請求,隊列較多的情況支持不是很好。有較低概率丟失消息。
  3. RocketMQ:單機支持10萬級的吞吐量,使用Java開發,具有高吞吐量,高可用性的特點,適合在大規模分佈式系統中應用。
  4. Kafka:高性能跨語言分佈式消息隊列,單機吞吐量可以達到10萬級,消息延遲在毫秒級,kafka是完全的分佈式系統,broker、producer、consumer都是原生自動支持分佈式,依賴於zookeeper做分佈式協調,kafka支持一寫多讀,消息可以被多個客戶端消費,消息有可能會重複但是不會丟失。

常用的數據庫中間件

數據庫中間件一般提供了讀寫分離、數據庫水平擴展的能。

  1. Sharding-Sphere:開源分佈式數據庫中間件解決方案,由Sharding-JDBC、Sharding-Proxy、Sharding-Sidecar幾個獨立的產品組成,使用不同的場景,這幾個產品都提供標準化的數據分片、讀寫分離、柔性事務和數據治理功能,可適用於Java同構異構語言,容器,雲原生等應用場景。
  2. Mycat:提供分庫分表能,基於Proxy代理模式,後端可以基於多種數據庫實現,代理模式對性能會有一定的影響。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章