1. 程式人生 > >Redis作為訊息佇列與RabbitMQ的效能對比

Redis作為訊息佇列與RabbitMQ的效能對比

週末測試了一下RabbitMQ的效能,RabbitMQ是使用Erlang編寫的一個開源的訊息佇列,本身支援很多的協議:AMQP,XMPP, SMTP, STOMP,也正是如此,使的它變的非常重量級,更適合於企業級的開發。個人認為,在網際網路開發中,使用訊息佇列,更多的因為在高併發環境下,由於來不及同步處理,請求會發生堵塞,所以我們需要一個佇列服務來進行非同步的處理,在這種場景下,只要佇列服務滿足最基本的Push/Pop已經足夠了。

Redis是一個Key-Value的NoSQL資料庫,開發維護很活躍,雖然它是一個Key-Value資料庫儲存系統,但它本身支援list資料結構的操作,所以完全可以當做一個輕量級的佇列服務來使用。

本文簡單對比了Redis作為訊息佇列和RabbitMQ的效能表現情況。

測試環境

1. 硬體環境:在個人筆記本上測試,Server和Client使用同一臺機器,硬體資訊如下

Processor : Inter(R) Core(TM)2 Duo CPU P8400 @2.26GHz
RAM : 4.00GB
Operating System : 32-bit Ubuntu 10.10

2. 軟體化境:RabbitMQ和Redis的Server啟動都是用預設配置,客戶端使用Java,JVM啟動使用預設引數:

RabbitMQ Server 2.2.0
RabbitMQ Java Client 2.2.0

Redis 2.0 Stable
Jedis

對於RabbitMQ和Redis的入隊和出隊操作,各執行100萬次,每10萬次記錄一次執行時間。測試資料分為128Bytes、512Bytes、1K和10K四個不同大小的資料。

入隊效能對比

四種不同大小的資料入隊效能對比(RPS):

mqperformance_001

測試結果:

mq_table_001

可以看到對於入隊操作,當資料比較小時Redis的效能要高於RabbitMQ,而如果資料大小超過了10K,Redis慢的無法忍受。

出隊效能對比

四種不同大小的資料出隊對比(PRS):

mqperformance_002

測試結果:

mq_table_002

可以看到對於出隊操作,無論資料大小,Redis都表現出非常好的效能,而RabbitMQ的出隊效能則遠低於Redis。

Redis入隊和出隊對比

針對Redis入隊和出隊對比(RPS):

mqperformance_003

測試資料:

mq_table_003

不管資料大小,Redis的出隊效能都表現的非常優秀,而入隊效能在資料比較大時,慢的無法忍受。

RabbitMQ入隊和出隊對比

針對RabbitMQ的入隊和出隊對比(RPS):

mqperformance_004

測試資料:

mq_table_004

不管資料大小,RabbitMQ的入隊和出隊效能都保持一個均衡的狀態,但總體上,出隊效能遠低於入隊效能。

總結

總體看來,Redis比較適合在Web場景下作為佇列服務使用,但當資料比較大的時候,入隊效能有些問題,也可能是我配置上不正確,所以還需要進一步研究。而RabbitMQ本身支援太多的協議,不適合在Web環境中使用。另外有一個MySQL的外掛Q4M,可以使用SQL語法來操作訊息佇列,只不過效能表現怎麼樣,還需要進一步測試。