ZeroMQ, RabbitMQ ve Apache Qpid arasındaki performans karşılaştırması

Uygulamam için yüksek performanslı bir mesaj veriyoluna ihtiyacım var, bu yüzden ZeroMQ , RabbitMQ ve Apache Qpid performanslarını değerlendiriyorum. Performansı ölçmek için, 10.000 iletiyi, ileti kuyruğu uygulamalarından birini kullanarak yayımlayan ve bu 10.000 iletiyi tüketmek için aynı makinede başka bir işlem yürüten bir test programı yürütüyorum. Ardından, yayınlanan ilk mesaj ile alınan son mesaj arasındaki zaman farkını kaydederim.

Karşılaştırma için kullandığım ayarlar aşağıdadır.

  1. RabbitMQ: I used a "fanout" type exchange and a queue with default configuration. I used the RabbitMQ C client library.
  2. ZeroMQ: My publisher publises to tcp://localhost:port1 with ZMQ_PUSH socket, My broker listens on tcp://localhost:port1 and resends the message to tcp://localhost:port2 and my consumer listens on tcp://localhost:port2 using ZMQ_PULL socket. I am using a broker instead of peer to to peer communication in ZeroMQ to to make the performance comparison fair to other message queue implementation that uses brokers.
  3. Qpid C++ message broker: I used a "fanout" type exchange and a queue with default configuration. I used the Qpid C++ client library.

Performans sonucu aşağıdaki gibidir:

  1. RabbitMQ: it takes about 1 second to receive 10,000 messages.
  2. ZeroMQ: It takes about 15 milli seconds to receive 10,000 messages.
  3. Qpid: It takes about 4 seconds to receive 10,000 messages.

Sorular:

  1. İleti kuyrukları arasında benzer performans karşılaştırması yapan var mı? Sonra sonuçlarımı seninkiyle karşılaştırmayı seviyorum.
  2. Performansı daha iyi hale getirmek için RabbitMQ veya Qpid 'i ayarlayabileceğim herhangi bir yol var mı?

Not:

Testler, iki tahsisli işlemci ile sanal bir makinede yapıldı. Sonuç, farklı donanımlar için farklılık gösterebilir, ancak temel olarak MQ ürünlerinin göreceli performansıyla ilgilenmekteyim.

68
Bu test, her testte kaç bayt oldu?
katma yazar arsenal, kaynak
nanomsg - Martin Sustrik, ZeroMQ ortak babası tarafından geliştirilen başka bir çocuk için bir deneme yapın. Okumak için iyi bir yer >>> nanomsg.org/documentation-zeromq.html
katma yazar user3666197, kaynak
İşte iyi bir karşılaştırma, 10 Nisan 2013 tarihli: x-aeon.com/wp/2013/04/10/…
katma yazar Daniel F, kaynak
RabbitMQ, Kafka, HornetQ, SQS ve Mongo tabanlı çoğaltılmış kuyrukların performanslarının karşılaştırması: warski.org/blog/2014/07/…
katma yazar adamw, kaynak
RabbitMQ, Kafka, HornetQ, ActiveMQ, SQS ve Mongo performans karşılaştırmalarının güncellenmiş bir sürümü şu anda burada: softwaremill.com/mqperf
katma yazar adamw, kaynak
Benzer sonuçlarla aylar önce basit testler yaptım. Ve ben RabbitMQ veya Qpid ile çalışırken sistemin oldukça boş olduğunu fark ettim. Sanırım bir şey yanlış olmalı.
katma yazar Gary Shi, kaynak
"RabbitMQ: 10.000 mesajın alınması yaklaşık 12 saniye sürüyor." - Kendi testlerimizde düzenli olarak CPU başına 20-25.000/sn'lik bir giriş yapıyoruz. Yani, yanlış bir şey yapıyorsunuz veya yavaş bir istemci kullanıyorsunuz. Rabbitmq ile e-posta göndermeyi denediniz mi?
katma yazar user1021067, kaynak

8 cevap

RabbitMQ muhtemelen bu mesajlarda ısrar ediyor. Mesaj önceliğini veya iletilerde başka bir seçeneği kalıcı hale getirmek için ayarlamanız gerektiğini düşünüyorum. Performans o zaman 10 kat artacak. Bir AMQP brokerından en az 100K mesaj bekleyiniz. OpenAMQ'da 300K mesaja/saniyeye kadar performans elde ettik.

AMQP , hız için tasarlandı (örneğin onları yönlendirmek için iletileri açmıyor), ancak ZeroMQ, anahtar yollarla daha iyi tasarlandı. Örneğin. Bir komisyoncu olmadan düğümleri bağlayarak bir atlama kaldırır; AMQP istemci yığınlarından herhangi birinden daha iyi eşzamansız G/Ç yapar; daha agresif mesaj topluyor. ZeroMQ'yu inşa etmek için harcanan zamanın belki de% 60'ı performans ayarına girmiştir. Çok zor bir işti. Kaza ile daha hızlı değil.

Yapmak istediğim bir şey var, ama çok meşgulüm, ZeroMQ'nun üzerinde bir AMQP benzeri komisyoncuyu yeniden yaratmak. Burada bir ilk katman var: http://rfc.zeromq.org/spec:15 . Bütün yığın, RestMS gibi bir şekilde işe yarayacaktı, taşıma ve semantik iki katmana ayrıldı. AMQP/0.9.1 ile aynı işlevselliği sağlar (ve semantik olarak birlikte çalışabilir) ancak çok daha hızlıdır.

84
katma
RIP arkadaşı, harika şeyler yaptın.
katma yazar RPGillespie, kaynak
Daha sonra bir kişi daha iyi bir çözüm ile gelene kadar rabbitmq kullanmaya devam edeceğiz. bana büyük patent hikayesini hatırlatıyor [1]. [1] youtube.com/watch?v=5QqbDyZ8Eu4
katma yazar Kunthar, kaynak

Hmm, of course ZeroMQ will be faster, it is designed to be and does not have a lot of the broker based functionality that the other two provide. The ZeroMQ site has a wonderful comparison of broker vs brokerless messaging and drawbacks & advantages of both.

RabbitMQ Blog:

RabbitMQ ve 0MQ mesajlaşmanın farklı yönlerine odaklanıyor. 0MQ, mesajların tel üzerinden nasıl aktarıldığına daha fazla odaklanır. Diğer taraftan RabbitMQ, mesajların nasıl depolandığına, filtreleneceğine ve izlendiğine odaklanır.

(Ben de RabbitMQ ile ZeroMQ kullanarak hakkında konuşur gibi yukarıdaki RabbitMQ yazı gibi)

So, what I'm trying to say is that you should decide on the tech that best fits your requirements. If the only requirement is speed, ZeroMQ. But if you need other aspects such as persistence of messages, filtering, monitoring, failover, etc well, then that's when u need to start considering RabbitMQ & Qpid.

31
katma
Evet, komisyoncu olmadığını ve komisyoncu ile komisyoncu olmayan bir makaleye bağlı olduğunu belirttim. Bu net değil miydi? Ayrıca, bu cevabı 2011'de yayınladığımda, Ekim 2014'te görünen Malamute yoktu.
katma yazar Steve Casey, kaynak
ZeroMQ'nun aracı yok. Aracıyı, uygulamanın genel tasarımının bir parçası olarak tasarlarsınız ve aracınız, hedefleri için uygun şekilde yönlendirme mesajlarını bir zeromq üzerinde dinler. ZeroMQ sadece bir iş yapar ve çok iyi yapar: mesaj kuyruğu. ZeroMQ kullanıcıları tarafından ZeroMQ için tasarlanmış bir komisyoncu uygulaması olan Malamute var, fakat kutudan ZeroMQ'nun bir parçası değil. ZeroMQ ile kendi işleminizde veya mesaj brokeringine ayrılmış ayrı bir kutuda kurabileceğiniz bir hizmettir. Bu kendi projesi. github.com/zeromq/malamute
katma yazar user356540, kaynak

ZeroMQ'da eşler arası iletişimi gerçekleştirmek için broker kullanıyorum. Broker kullanan diğer mesaj kuyruğu uygulamalarında performans karşılaştırmalarını adil yapmak için.

Neden bunu yapmak istediğinizden emin değilsiniz - önemsediğiniz tek şey performanssa, oyun alanı seviyesine geçmeye gerek yoktur. Kalıcılık, filtreleme vb. İle ilgilenmiyorsanız neden fiyatı ödersiniz?

Ayrıca, VM'lerde benchmarkların çalıştırılmasından çok memnunum - sonuçların net olmayan şekillerde etkilenebileceği çok fazla katman var. (Gerçek sistemi sanal makinede çalıştırmayı planlamıyorsanız, elbette ki bu, çok geçerli bir yöntemdir).

4
katma

C ++/qpid'i test ettim

Kuyrukta beklemeden iki farklı makina arasında saniyede 50000 mesaj gönderdim.

Bir fanout kullanmadım, sadece basit bir değişim (kalıcı olmayan mesajlar)

Kalıcı mesajlar kullanıyor musunuz? Mesajları ayrıştırıyor musunuz?

Sanırım, 0MQ mesaj yapıları olmadığı için.

Eğer komisyoncu çoğunlukla boşta ise, muhtemelen gönderici ve alıcıya önceden getirme ayarını yapmadınız. Bu çok mesaj göndermek için çok önemlidir.

3
katma
Durağan olmayan bir sıra kullanıyorum, iletiyi ayrıştırmıyorum, Aslında her üç sıra denemesi için ileti oluşturmak için aynı kodu kullanıyorum. Değişen değişim türünün performansa etkisi yoktu. Ayrıca gönderici akış denetimi (api sender.SetCapaclity (8)) kullandıktan sonra, zamanlama daha da kötüleşti. Gönderenin akış kontrolü olmadan, sıra sınırsız büyür. Zaman ölçülürken, tüm mesajlar alınana kadar beklediniz mi ve kuyruk tamamen tükendi mi?
katma yazar ahsankhan, kaynak
Qpid-perftest programının Qpid'in "eski mesajlaşma Apis" kullandığını buldum. Eski Apis'e geçmek testimde 10 kez performans artışı sağladı.
katma yazar ahsankhan, kaynak

Kereviz kullanırsan, Rabbitmq performansı iyileşir

3
katma
OP, python kullanarak bahsetmez ve harika bir kütüphane iken, kereviz kara büyülü değildir ve sadece onu kullanarak daha hızlı tavşanmq yapamaz.
katma yazar gawry, kaynak

RabbitMQ'yu, SocketPro'yla ( http://www.udaparts.com/ ) kalıcı mesaj kuyruğunda karşılaştırdık. site http://www.udaparts.com/document/articles/fastsocketpro.htm Tüm kaynak kodları ile. İşte RabbitMQ için elde ettiğimiz sonuçlar:

Aynı makine enque ve dequeue:

"Merhaba dünya" -
  Enqueue: Saniyede 30000 mesaj;   Dequeue: Saniyede 7000 mesaj.

     

1024 baytlık metin -
  Enqueue: Saniyede 11000 mesaj;   Dequeue: Saniyede 7000 mesaj.

     

10 * 1024 baytlık Metin -
  Enqueue: Saniyede 4000 mesaj;   Dequeue: Saniyede 4000 mesaj.

Ağ bant genişliği 100 mbps ile çapraz makine enque ve dequeue:

"Merhaba dünya" -
  Enqueue: Saniyede 28000 mesaj;   Dequeue: Saniyede 1900 mesaj.

     

1024 baytlık metin -
  Enqueue: Saniyede 8000 mesaj;   Dequeue: Saniyede 1000 mesaj.

     

10 * 1024 baytlık Metin -
  Enqueue: Saniyede 800 mesaj;   Dequeue: Saniyede 700 mesaj.

1
katma

ZeroMQ'nun üzerine inşa edilmiş bir açık kaynak mesaj veriyolu geliştirdik - başlangıçta bunu Qpid'in yerini aldık. Brokersızdır, bu yüzden tamamen adil bir kıyaslamadır, ancak aracılık edilen çözümler ile aynı işlevselliği sağlar.

Our headline performance figure is 140K msgs per second between two machines but you can see more detail here: https://github.com/Abc-Arbitrage/Zebus/wiki/Performance

0
katma

Gönderen ve reseptör üzerinde önceden 100 gibi bir değer ile prefetch yapılandırmaya çalışın.

0
katma
Fro qpid, Receiver.setCapacity (100) alıcı için prefetch ayarladığı izlenimine sahipti. Afer, performansın "yeni qpid api" ve Qpid eski mesajlaşma Api'ye benzer performans bacası kullanılarak 10 kez geliştirildiğini söylüyor. Yayını sonucuyla güncelledim. Ancak Qpid hala tavşanmq'den 4 kat daha yavaş görünüyor.
katma yazar ahsankhan, kaynak