Redis Vs RabbitMQ sebagai perantara data / sistem pesan di antara Logstash dan elasticsearch

90

Kami mendefinisikan arsitektur untuk mengumpulkan informasi log oleh pengirim Logstash yang dipasang di berbagai mesin dan mengindeks data dalam satu server elasticsearch secara terpusat dan menggunakan Kibana sebagai lapisan grafis. Kami membutuhkan sistem pesan yang andal di antara pengirim Logstash dan elasticsearch untuk memberikan pengiriman. Faktor apa yang harus dipertimbangkan saat memilih Redis daripada RabbitMQ sebagai perantara data / sistem pesan di antara pengirim Logstash dan elasticsearch atau sebaliknya?

Salindaw
sumber

Jawaban:

94

Setelah mengevaluasi Redis dan RabbitMQ, saya memilih RabbitMQ sebagai broker kami karena alasan berikut:

  1. RabbitMQ memungkinkan Anda untuk menggunakan lapisan keamanan bawaan dengan menggunakan sertifikat SSL untuk mengenkripsi data yang Anda kirim ke broker dan itu berarti tidak ada yang akan mengendus data Anda dan memiliki akses ke data penting organisasi Anda.
  2. RabbitMQ adalah produk yang sangat stabil yang dapat menangani sejumlah besar kejadian per detik dan banyak koneksi tanpa harus menjadi penghambat.
  3. Di organisasi kami, kami sudah menggunakan RabbitMQ dan memiliki pengetahuan internal yang baik tentang penggunaannya dan integrasi yang sudah disiapkan dengan chef.

Mengenai penskalaan, RabbitMQ memiliki implementasi klaster bawaan yang dapat Anda gunakan selain penyeimbang beban untuk mengimplementasikan lingkungan pialang yang redundan.

Apakah klaster RabbitMQ saya Aktif Aktif atau Pasif Aktif?

Sekarang ke titik lemah menggunakan RabbitMQ:

  1. kebanyakan pengirim Logstash tidak mendukung RabbitMQ tetapi di sisi lain, yang terbaik, bernama Beaver, memiliki implementasi yang akan mengirim data ke RabbitMQ tanpa masalah.
  2. Implementasi yang dimiliki Beaver dengan RabbitMQ dalam versi saat ini agak lambat dalam kinerjanya (untuk tujuan saya) dan tidak mampu menangani tingkat 3000 kejadian / detik dari satu server dan dari waktu ke waktu layanan macet.
  3. Saat ini saya sedang mengerjakan perbaikan yang akan menyelesaikan masalah kinerja untuk RabbitMQ dan membuat pengirim Beaver lebih stabil. Solusi pertama adalah menambahkan lebih banyak proses yang dapat berjalan secara bersamaan dan akan memberikan lebih banyak kekuatan kepada pengirim. Solusi kedua adalah mengubah Beaver untuk mengirim data ke RabbitMQ secara asynchronous yang secara teori akan lebih cepat. Saya berharap saya akan menyelesaikan penerapan kedua solusi tersebut pada akhir minggu ini.

Anda dapat mengikuti masalahnya di sini: https://github.com/josegonzalez/python-beaver/issues/323

Dan periksa permintaan tarik di sini: https://github.com/josegonzalez/python-beaver/pull/324

Jika Anda memiliki pertanyaan lain, silakan tinggalkan komentar.

Tom Kregenbild
sumber
3
Apakah Redis memiliki poin yang lebih kuat dibandingkan RabbitMQ? Redis tampaknya lebih mudah dikonfigurasi. Dan jika Anda tidak membutuhkan throughput yang besar dan keamanan ditangani dengan cara lain, RabbitMQ mungkin tidak diperlukan. Tolong, perbaiki saya jika saya salah.
Ricardo MS
Anda benar tetapi untuk memastikan Anda harus membandingkan kinerja antara kedua produk
Tom Kregenbild
4
"RabbitMQ adalah produk yang sangat stabil yang dapat menangani sejumlah besar kejadian per detik dan banyak koneksi tanpa harus menjadi penghambat." - Saya cukup yakin itu benar reddis juga. Jadi ini BUKAN keuntungan dari rabbitmq atas Reddit
Martin Thoma
"RabbitMQ memungkinkan Anda menggunakan lapisan keamanan bawaan dengan menggunakan SSL" - bukankah reddis mengizinkan enkripsi lapisan transport juga?
Martin Thoma
2
2019 masih redis belum dibangun di TLS
jjxtra
55

Redis dibuat sebagai penyimpanan data nilai kunci meskipun memiliki beberapa kemampuan broker pesan dasar .

RabbitMQ dibuat sebagai broker pesan. Ini memiliki banyak kemampuan broker pesan secara alami.

Ferhat
sumber
1
Pernyataan Anda tentang Redis tidak lebih akurat dengan diperkenalkannya Stream di Redis 5. RabbitMQ jelas merupakan pilihan yang lebih baik untuk skenario skala besar. Untuk skenario skala kecil hingga menengah (yang sebagian besar merupakan proyek di dunia), Redis adalah alternatif yang andal, cepat, dan mudah dikonfigurasi.
Reza
Terima kasih atas komitmennya, alangkah baiknya jika seseorang menulis di sini pengalamannya tentang fitur-fitur baru Redis.
Ferhat
44

Saya telah melakukan beberapa penelitian tentang topik ini. Jika kinerja itu penting dan ketekunan bukan, RabbitMQ adalah pilihan yang sempurna. Redis adalah teknologi yang dikembangkan dengan tujuan berbeda.

Berikut ini adalah daftar pro untuk menggunakan RabbitMQ dibandingkan Redis:

  • RabbitMQ menggunakan Advanced Message Queuing Protocol (AMQP) yang dapat dikonfigurasi untuk menggunakan SSL, lapisan keamanan tambahan.
  • RabbitMQ membutuhkan waktu sekitar 75% dari waktu yang dibutuhkan Redis untuk menerima pesan.
  • RabbitMQ mendukung prioritas untuk pesan, yang dapat digunakan oleh pekerja untuk menggunakan pesan prioritas tinggi terlebih dahulu.
  • Tidak ada kemungkinan kehilangan pesan jika ada pekerja yang mogok setelah mengonsumsi pesan, yang tidak terjadi pada Redis.
  • RabbitMQ memiliki sistem perutean yang baik untuk mengarahkan pesan ke antrian yang berbeda.

Beberapa kontra untuk menggunakan RabbitMQ:

  • RabbitMQ mungkin agak sulit dipelihara, sulit untuk di-debug.
  • Node-name atau Node-ip Fluktuasi dapat menyebabkan kehilangan data, tetapi jika dikelola dengan baik, pesan yang tahan lama dapat memecahkan masalah.
Arun Reddy
sumber
3
Redis memiliki Sorted Setsyang memungkinkan interaksi seperti antrian prioritas. Redis juga dapat dikelompokkan / dibagi untuk mengirim pesan yang berbeda ke antrian yang berbeda di server yang berbeda. Tidak yakin tentang SSL langsung untuk Redis, tetapi saya melihat AWS Elasticache dan Redis 3.2.6 mereka memungkinkan enkripsi saat istirahat dan dalam transit. Catatan: sama sekali tidak mengatakan Redis lebih baik untuk kasus ini; hanya menunjukkan bahwa itu mungkin bukan alasan untuk memilih RabbitMQ daripada Redis.
dwanderson
1
Juga jangan lupa bahwa Redis adalah single threaded jadi jika Anda memiliki banyak penerbit / konsumen, itu bisa menjadi masalah.
Kedare
5

Saya telah bertanya-tanya hal yang sama. Rekomendasi sebelumnya oleh orang-orang Logstash merekomendasikan Redis melalui RabbitMQ ( http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized ), namun bagian catatan itu tidak lagi ada dalam dokumentasi saat ini meskipun ada catatan umum tentang cara menggunakan broker untuk menangani lonjakan di sini https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html .

Meskipun saya juga menggunakan RabbitMQ dengan cukup senang, saat ini saya sedang menjelajahi broker Redis, karena protokol AMQP kemungkinan besar berlebihan untuk kasus penggunaan logging saya.

opennomad
sumber
2

Pertanyaan cepat untuk ditanyakan:

  1. mengapa Anda membutuhkan broker? Jika Anda menggunakan logstash atau logstash-forwarder untuk membaca file dari server ini, keduanya akan melambat jika pipeline macet.
  2. apakah Anda memiliki pengalaman dalam mengelola kelinci atau redis? Semua hal dianggap sama, alat yang Anda tahu cara menggunakannya adalah alat yang lebih baik.

Di ranah opini, saya menjalankan redis sebagai broker, dan membencinya. Tentu saja, itu bisa jadi karena saya tidak berpengalaman dengan redis (bukan masalah dengan produk itu sendiri), tetapi itu adalah tautan terlemah dalam pipa dan selalu gagal saat kami sangat membutuhkannya.

Alain Collins
sumber