Redis、Kafka或RabbitMQ:選擇哪個作為微服務訊息代理? - otonomo
將非同步通訊用於微服務時,通常使用訊息代理。代理確保不同微服務之間的通訊可靠且穩定,確保訊息在系統內得到管理和監視,並且訊息不會丟失。您可以選擇一些訊息代理,它們的規模和資料功能各不相同。這篇部落格文章將比較三種最受歡迎的經紀人:RabbitMQ,Kafka和Redis。
但是首先,讓我們瞭解微服務通訊。
微服務通訊:同步和非同步
微服務之間有兩種常見的通訊方式:同步和非同步。在同步通訊中,呼叫方在傳送下一條訊息之前等待響應,並且它作為HTTP之上的REST協議執行。相反,在非同步通訊中,無需等待響應即可傳送訊息。這適用於分散式系統,通常需要訊息代理來管理訊息。
您選擇的通訊型別應考慮不同的引數,例如微服務的結構方式,適當的基礎架構,延遲,規模,依賴關係以及通訊目的。非同步通訊的建立可能會更加複雜,並且需要新增更多元件才能堆疊,但是將非同步通訊用於微服務的好處遠大於缺點。
非同步通訊的優勢
首先,根據定義,非同步通訊是非阻塞的。它也支援比同步操作更好的縮放。第三,在微服務崩潰的情況下,非同步通訊機制提供了各種恢復技術,通常更擅長處理與崩潰有關的錯誤。另外,當使用代理而不是REST協議時,接收通訊的服務實際上並不需要彼此瞭解。在舊的服務執行了很長時間之後,甚至可以引入新的服務,即更好的解耦服務。
最後,在選擇非同步操作時,您將增強將來建立集中發現,監視,負載平衡甚至策略執行器的能力。這將為您提供在程式碼和系統構建中具有靈活性,可伸縮性和更多功能的功能。
選擇合適的訊息代理
非同步通訊通常透過訊息代理進行管理。也有其他方法,例如aysncio,但它們更加稀少和有限。
在選擇代理執行非同步操作時,應考慮以下幾點:
- 代理規模–系統中每秒傳送的訊息數。
- 資料永續性–恢復訊息的能力。
- 消費者能力–經紀人是否有能力管理一對一和/或一對多的消費者。
一對一
一對多
我們檢查了那裡最新和最出色的服務,以找出這三個類別中最強的提供商。
規模:根據配置和資源,這裡的執行速度約為每秒50K msg。
永續性:支援永續性訊息和瞬時訊息。
一對一與一對多的消費者:兩者都有。
RabbitMQ於2007年釋出,是最早建立的常見訊息代理之一。它是一個開放原始碼,透過實現高階訊息佇列協議(AMQP)透過點對點和pub-sub方法傳遞訊息。它旨在支援複雜的路由邏輯。
有一些託管服務可讓您將其用作SaaS,但它不是本機主要雲提供商堆疊的一部分。RabbitMQ支援所有主要語言,包括Python,Java,.NET,PHP,Ruby,JavaScript,Go,Swift等。
在持久模式下,可能會遇到一些效能問題。
規模:每秒最多可以傳送一百萬條訊息。
永續性:是的。
一對一vs一對多的消費者:只有一對多(乍一看似乎很奇怪,對吧?!)。
Kafka由Linkedin於2011年建立,旨在處理高吞吐量,低延遲的處理。作為一個分散式流平臺,Kafka複製了一個釋出-訂閱服務。它提供資料永續性並儲存記錄流,使其能夠交換高質量訊息。
Kafka曾在Azure,AWS和Confluent上管理SaaS。他們都是Kafka專案的建立者和主要貢獻者。Kafka支援所有主要語言,包括Python,Java,C / C ++,Clojure,.NET,PHP,Ruby,JavaScript,Go,Swift等。
規模:每秒最多可以傳送一百萬條訊息。
永續性:基本上不是,它是記憶體中的資料儲存。
一對一與一對多的消費者:兩者都有。
Redis與其他訊息代理有點不同。Redis的核心是一個記憶體中的資料儲存,可以用作高效能鍵值儲存或訊息代理。另一個區別是Redis沒有永續性,而是將其記憶體轉儲到Disk / DB中。它還非常適合實時資料處理。
最初,Redis不是一對一和一對多的。但是,由於Redis 5.0引入了pub-sub,因此功能得到了增強,一對多成為真正的選擇。
每個用例的訊息代理
我們介紹了RabbitMQ,Kafka和Redis的一些特徵。這三種動物都是它們的類別,但是如上所述,它們的執行方式大不相同。這是我們建議正確的訊息代理根據不同用例使用的建議。
短命訊息:Redis
Redis的記憶體資料庫幾乎適用於不需要永續性的訊息短暫的用例。因為Redis提供了非常快速的服務和記憶體功能,所以它是短保留訊息的理想選擇,在這些訊息中永續性不是很重要,您可以容忍一些丟失。隨著5.0中Redis流的釋出,它也成為了一對多用例的候選者,由於侷限性和舊的pub-sub功能,絕對需要使用它。
大量資料:Kafka
Kafka是一個高吞吐量的分散式佇列,用於長時間儲存大量資料。對於需要永續性的一對多用例,Kafka是理想的選擇。
複雜路由:RabbitMQ
RabbitMQ是一個較老但很成熟的代理,具有許多支援複雜路由的功能。當所需速率不高(超過數萬msg / sec)時,它甚至將支援複雜的路由通訊。
考慮您的軟體堆疊
當然,最後要考慮的是您當前的軟體堆疊。如果您正在尋找一個相對簡單的整合過程,並且不想在堆疊中維護其他代理,那麼您可能更傾向於使用已由堆疊支援的代理。
例如,如果您在RabbitMQ之上的系統中使用Celery for Task Queue,那麼您會獲得與RabbitMQ或Redis一起使用的動力,而不是不支援Kafka且需要進行一些重寫的Kafka。
在Otonomo,我們透過平臺的發展和壯大使用了以上所有內容,然後再進行一些使用!重要的是要記住,每種工具都有自己的優點和缺點,這與瞭解它們併為工作以及特定的時機,情況和要求選擇合適的工具有關。
相關文章
- 微服務選擇哪個訊息代理:RabbitMQ、Kafka和Redis? - Payoda微服務MQKafkaRedis
- 微服務訊息代理比較:Redis vs Kafka vs RabbitMQ - Mertcan微服務RedisKafkaMQ
- Kafka 與 RabbitMQ 如何選擇使用哪個?KafkaMQ
- 如何為微服務選擇正確的訊息佇列微服務佇列
- 微服務02 Kafka訊息佇列, Dubbo, Springcloud微服務框架, Nacos微服務Kafka佇列SpringGCCloud框架
- 訊息驅動式微服務:Spring Cloud Stream & RabbitMQ微服務SpringCloudMQ
- 訊息中介軟體部署及比較:rabbitMQ、activeMQ、zeroMQ、rocketMQ、Kafka、redisMQKafkaRedis
- RabbitMQ,RocketMQ,Kafka 訊息模型對比分析MQKafka模型
- Kafka,Mq和Redis作為訊息佇列使用時的差異有哪些KafkaMQRedis佇列
- RabbitMQ,RocketMQ,Kafka 事務性,訊息丟失和訊息重複傳送的處理策略MQKafka
- 訊息中介軟體(RabbitMq、Kafka)分析比較MQKafka
- 在SpringCloud使用RSocket替代Rabbit或Kafka作為訊息路由中繼的原始碼案例SpringGCCloudKafka路由中繼原始碼
- .NET為什麼推薦它作為RabbitMQ訊息佇列的首選開發工具MQ佇列
- Go 微服務:基於 RabbitMQ 和 AMQP 進行訊息傳遞Go微服務MQ
- IM系統的MQ訊息中介軟體選型:Kafka還是RabbitMQ?MQKafka
- Spring Boot系列十七 Spring Boot 整合 websocket,使用RabbitMQ做為訊息代理Spring BootWebMQ
- RabbitMQ,RocketMQ,Kafka 幾種訊息佇列的對比MQKafka佇列
- 訊息中介軟體選型分析:從Kafka與RabbitMQ的對比看全域性KafkaMQ
- 5 種微服務閘道器,該選哪個?微服務
- Java訊息佇列:RabbitMQ與Kafka的整合與應用Java佇列MQKafka
- 微服務之間通過RabbitMQ通訊微服務MQ
- RabbitMQ訊息模式MQ模式
- SEO業務如何選擇代理IP?
- 複雜業務下,我們為何選擇 Akka 作為非同步通訊框架?非同步框架
- 為何選擇阿里雲 簡訊服務阿里
- DDD之1微服務設計為什麼選擇DDD微服務
- 以事務方式傳送 Kafka 訊息Kafka
- Spring Cloud Stream微服務訊息框架SpringCloud微服務框架
- C#中的訊息中介軟體(RabbitMQ 和 Redis)C#MQRedis
- 學習Java哪個好?選擇哪個版本Java
- Maven 和 Gradle:選擇哪個?MavenGradle
- 即時通訊系統為什麼選擇GaussDB(for Redis)?Redis
- 2-如何選擇訊息佇列佇列
- [訊息佇列]RabbitMQ佇列MQ
- RabbitMQ訊息佇列MQ佇列
- RabbitMQ與Kafka選型對比MQKafka
- RabbitMQ和Kafka到底怎麼選?MQKafka
- 代理型別升級,APISIX 支援 Kafka 作為上游型別APIKafka