Redis Vs RabbitMQ, Logstash ve elasticsearch arasında bir veri aracısı / mesajlaşma sistemi olarak


92

Çeşitli makinelere kurulu Logstash göndericilerinin günlük bilgilerini toplamak ve verileri tek bir elasticsearch sunucusunda merkezi olarak indekslemek ve grafik katman olarak Kibana'yı kullanmak için bir mimari tanımlıyoruz. Teslimatı sağlamak için Logstash göndericileri ile elasticsearch arasında güvenilir bir mesajlaşma sistemine ihtiyacımız var. Logstash göndericileri ile elasticsearch arasında bir veri aracısı / mesajlaşma sistemi olarak Redis'i RabbitMQ yerine seçerken hangi faktörler dikkate alınmalıdır?

Yanıtlar:


95

Hem Redis hem de RabbitMQ'yu değerlendirdikten sonra, aşağıdaki nedenlerden dolayı brokerimiz olarak RabbitMQ'yu seçtim:

  1. RabbitMQ, komisyoncuya gönderdiğiniz verileri şifrelemek için SSL sertifikaları kullanarak yerleşik bir güvenlik katmanı kullanmanıza olanak tanır ve bu, hiç kimsenin verilerinizi koklamayacağı ve hayati kurumsal verilerinize erişemeyeceği anlamına gelir.
  2. RabbitMQ, saniye başına büyük miktarda olayı ve çok sayıda bağlantıyı, şişe boynu olmadan idare edebilen çok kararlı bir üründür.
  3. Organizasyonumuzda zaten RabbitMQ kullandık ve kullanımı hakkında iyi bir iç bilgiye ve şef ile önceden hazırlanmış bir entegrasyona sahiptik.

Ölçeklendirme ile ilgili olarak, RabbitMQ, yedek bir aracı ortamını uygulamak için bir yük dengeleyiciye ek olarak kullanabileceğiniz yerleşik bir küme uygulamasına sahiptir.

RabbitMQ kümem Aktif Aktif mi yoksa Aktif Pasif mi?

Şimdi RabbitMQ kullanmanın daha zayıf noktasına:

  1. Çoğu Logstash nakliyecisi RabbitMQ'yu desteklemez, ancak öte yandan Beaver adlı en iyisi, RabbitMQ'ya sorunsuz bir şekilde veri gönderecek bir uygulamaya sahiptir.
  2. Beaver'ın mevcut sürümünde RabbitMQ ile sahip olduğu uygulama, performans açısından biraz yavaş (benim amaçlarım için) ve bir sunucudan 3000 olay / saniye oranını işleyemedi ve zaman zaman hizmet çöktü.
  3. Şu anda, RabbitMQ için performans sorununu çözecek ve Beaver göndericisini daha kararlı hale getirecek bir düzeltme üzerinde çalışıyorum. İlk çözüm, eşzamanlı olarak çalışabilen ve göndericiye daha fazla güç verecek daha fazla işlem eklemektir. İkinci çözüm, Beaver'ı, teorik olarak çok daha hızlı olması gereken, eşzamansız olarak RabbitMQ'ya veri gönderecek şekilde değiştirmektir. Umarım bu haftanın sonunda her iki çözümü de uygulamayı bitirmiş olurum.

Sorunu buradan takip edebilirsiniz: https://github.com/josegonzalez/python-beaver/issues/323

Ve buradan çekme isteğini kontrol edin: https://github.com/josegonzalez/python-beaver/pull/324

Daha fazla sorunuz varsa yorum bırakmaktan çekinmeyin.


3
Redis'in, RabbitMQ ile karşılaştırıldığında daha güçlü noktaları var mı? Redis'in yapılandırılması daha kolay görünüyor. Ve büyük bir iş hacmine ihtiyacınız yoksa ve güvenlik başka yollarla işleniyorsa, RabbitMQ gerekli olmayabilir. Yanılıyorsam lütfen beni düzeltin.
Ricardo MS

Doğru söylüyorsunuz, ancak emin olmak için iki ürün arasındaki performansı karşılaştırmanız gerekecek
Tom Kregenbild

4
"RabbitMQ, saniye başına büyük miktarlarda olayı ve çok sayıda bağlantıyı şişe boynu olmadan işleyebilen çok kararlı bir ürün. - Bunun reddis de doğru olduğundan oldukça eminim. Yani bu, rabbitmq'in Reddit'e göre bir avantajı DEĞİL
Martin Thoma

"RabbitMQ, SSL kullanarak yerleşik bir güvenlik katmanı kullanmanıza izin verir" - reddis, taşıma katmanı şifrelemesine de izin vermiyor mu?
Martin Thoma

2
2019 hala redis dahili TLS'ye sahip değil
jjxtra

55

Redis, bazı temel mesaj aracısı yeteneklerine sahip olmasına rağmen bir anahtar değer veri deposu olarak yaratılmıştır .

RabbitMQ, bir mesaj simsarı olarak yaratılmıştır. Doğal olarak birçok mesaj komisyoncusu yeteneğine sahiptir.


1
Redis ile ilgili ifadeniz Redis 5'te Stream'in tanıtılmasıyla artık doğru değil. RabbitMQ, büyük ölçekli senaryolar için kesinlikle daha iyi bir seçimdir. Küçük ila orta ölçekli bir senaryo için (dünyadaki çoğu projenin olduğu) Redis güvenilir, hızlı ve yapılandırması kolay bir alternatiftir.
Reza

Bağlılığınız için teşekkürler, birinin Redis'in yeni özellikleri hakkındaki deneyimlerini buraya yazması iyi olur.
Ferhat

44

Bu konuda biraz araştırma yapıyorum. Performans önemliyse ve sebat değilse, RabbitMQ mükemmel bir seçimdir. Redis, farklı bir amaçla geliştirilmiş bir teknolojidir.

Aşağıda, Redis üzerinden RabbitMQ kullanmanın avantajlarının bir listesi bulunmaktadır:

  • RabbitMQ, ek güvenlik katmanı olan SSL kullanmak için yapılandırılabilen Gelişmiş Mesaj Kuyruk Protokolü'nü (AMQP) kullanır.
  • RabbitMQ, Redis'in mesajları kabul etme süresinin yaklaşık% 75'ini alır.
  • RabbitMQ, çalışanlar tarafından önce yüksek öncelikli mesajları tüketmek için kullanılabilen mesaj önceliklerini destekler.
  • Herhangi bir işçi mesajı tükettikten sonra çökerse mesajı kaybetme şansı yoktur, Redis'de durum böyle değildir.
  • RabbitMQ, mesajları farklı kuyruklara yönlendirmek için iyi bir yönlendirme sistemine sahiptir.

RabbitMQ kullanmanın birkaç eksisi:

  • RabbitMQ'nun bakımı biraz zor olabilir, çökmelerde hata ayıklaması zor olabilir.
  • düğüm adı veya düğüm ip dalgalanmaları veri kaybına neden olabilir, ancak iyi yönetilirse kalıcı mesajlar sorunu çözebilir.

4
Redis, Sorted Setsöncelik sırası benzeri etkileşimlere izin veren özelliklere sahiptir . Redis ayrıca farklı iletileri farklı sunuculardaki farklı sıralara göndermek için kümelenebilir / parçalanabilir. Doğrudan Redis için SSL hakkında emin değilim, ancak AWS Elasticache'e bakıyorum ve Redis 3.2.6 kullanımda olmayan ve geçiş sırasında şifrelemeye izin veriyor. Not: Redis'in bu durum için daha iyi olduğunu söylemiyoruz; Redis yerine RabbitMQ'yu seçmek için neden olmayabileceğini belirtmek isterim.
dwanderson

1
Ayrıca Redis'in tek iş parçacıklı olduğunu da unutmayın, bu nedenle sorun olabilecek birçok yayıncınız / tüketiciniz varsa.
Kedare

5

Ben de aynı şeyi merak ediyordum. Logstash ekibinin önceki önerileri Redis'i RabbitMQ ( http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized ) üzerinden önermektedir , ancak notların bu bölümü artık mevcut belgelerde bulunmamaktadır Buradaki ani artışlarla başa çıkmak için bir komisyoncu kullanma hakkında genel notlar https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html .

RabbitMQ'yu da oldukça mutlu bir şekilde kullansam da, şu anda bir Redis brokerini araştırıyorum, çünkü AMQP protokolü muhtemelen günlük kullanım durumum için aşırı derecede kullanılıyor.


2

Sorulacak hızlı sorular:

  1. neden bir komisyoncuya ihtiyacınız var? Bu sunuculardaki dosyaları okumak için logstash veya logstash-forwarder kullanıyorsanız, ardışık düzen tıkandığında ikisi de yavaşlayacaktır.
  2. tavşan veya redis uygulama konusunda herhangi bir tecrübeniz var mı? Her şey eşit olduğunda, nasıl kullanılacağını bildiğiniz araç daha iyi bir araçtır.

Fikirler alanında, bir komisyoncu olarak redis'i çalıştırdım ve bundan nefret ettim. Tabii ki, bu benim redis konusundaki deneyimsizliğim olabilirdi (ürünün kendisiyle ilgili bir sorun değil), ancak bu boru hattındaki en zayıf halkaydı ve en çok ihtiyacımız olduğunda her zaman başarısız oldu.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.