Redis Vs RabbitMQ เป็นนายหน้าข้อมูล / ระบบส่งข้อความระหว่าง Logstash และ elasticsearch


92

เรากำลังกำหนดสถาปัตยกรรมเพื่อรวบรวมข้อมูลบันทึกโดยผู้ส่ง Logstash ซึ่งติดตั้งในเครื่องต่างๆและจัดทำดัชนีข้อมูลในเซิร์ฟเวอร์ elasticsearch เดียวจากส่วนกลางและใช้ Kibana เป็นเลเยอร์กราฟิก เราต้องการระบบการส่งข้อความที่เชื่อถือได้ระหว่างผู้จัดส่ง Logstash และ elasticsearch เพื่อให้ผู้รับบริการจัดส่ง ปัจจัยใดบ้างที่ควรพิจารณาเมื่อเลือก Redis ผ่าน RabbitMQ เป็นนายหน้าข้อมูล / ระบบการส่งข้อความระหว่างผู้ขนส่ง Logstash และ elasticsearch หรือในทางกลับกัน?

คำตอบ:


95

หลังจากประเมินทั้ง Redis และ RabbitMQ แล้วฉันเลือก RabbitMQ เป็นโบรกเกอร์ของเราด้วยเหตุผลดังต่อไปนี้:

  1. RabbitMQ ช่วยให้คุณใช้ชั้นความปลอดภัยในตัวโดยใช้ใบรับรอง SSL เพื่อเข้ารหัสข้อมูลที่คุณส่งไปยังโบรกเกอร์และหมายความว่าจะไม่มีใครดักฟังข้อมูลของคุณและเข้าถึงข้อมูลสำคัญขององค์กรของคุณได้
  2. RabbitMQ เป็นผลิตภัณฑ์ที่มีความเสถียรสูงซึ่งสามารถรองรับเหตุการณ์จำนวนมากต่อวินาทีและการเชื่อมต่อจำนวนมากโดยไม่ต้องเป็นคอขวด
  3. ในองค์กรของเราเราใช้ RabbitMQ อยู่แล้วและมีความรู้ภายในที่ดีเกี่ยวกับการใช้มันและการผสานรวมกับเชฟที่เตรียมไว้แล้ว

สำหรับการปรับขนาด RabbitMQ มีการใช้งานคลัสเตอร์ในตัวซึ่งคุณสามารถใช้นอกเหนือจากตัวโหลดบาลานเซอร์เพื่อใช้สภาพแวดล้อมโบรกเกอร์ที่ซ้ำซ้อน

คลัสเตอร์ RabbitMQ ของฉันเป็น Active Active หรือ Active Passive?

ตอนนี้ถึงจุดที่อ่อนแอกว่าในการใช้ RabbitMQ:

  1. ผู้ขนส่ง Logstash ส่วนใหญ่ไม่รองรับ RabbitMQ แต่ในทางกลับกันผู้ให้บริการที่ดีที่สุดชื่อ Beaver มีการใช้งานที่จะส่งข้อมูลไปยัง RabbitMQ โดยไม่มีปัญหา
  2. การใช้งานที่ Beaver มีกับ RabbitMQ ในเวอร์ชันปัจจุบันนั้นมีประสิทธิภาพช้าเล็กน้อย (สำหรับวัตถุประสงค์ของฉัน) และไม่สามารถจัดการกับอัตรา 3000 เหตุการณ์ / วินาทีจากเซิร์ฟเวอร์หนึ่งเครื่องและบริการขัดข้องในบางครั้ง
  3. ตอนนี้ฉันกำลังแก้ไขปัญหาที่จะแก้ปัญหาประสิทธิภาพของ RabbitMQ และทำให้ผู้ขนส่งของ Beaver มีเสถียรภาพมากขึ้น ทางออกแรกคือการเพิ่มกระบวนการอื่น ๆ ที่สามารถทำงานได้พร้อมกันและจะทำให้ผู้ขนส่งมีอำนาจมากขึ้น วิธีที่สองคือการเปลี่ยน Beaver เพื่อส่งข้อมูลไปยัง RabbitMQ แบบอะซิงโครนัสซึ่งในทางทฤษฎีควรจะเร็วกว่ามาก ฉันหวังว่าจะใช้ทั้งสองโซลูชันให้เสร็จสิ้นภายในสิ้นสัปดาห์นี้

คุณสามารถติดตามปัญหาได้ที่นี่: https://github.com/josegonzalez/python-beaver/issues/323

และตรวจสอบคำขอดึงที่นี่: https://github.com/josegonzalez/python-beaver/pull/324

หากคุณมีคำถามเพิ่มเติมอย่าลังเลที่จะแสดงความคิดเห็น


3
Redis มีคะแนนที่แข็งแกร่งกว่าเมื่อเทียบกับ RabbitMQ หรือไม่? Redis ดูเหมือนจะง่ายกว่าในการกำหนดค่า และหากคุณไม่ต้องการปริมาณงานที่มากและการรักษาความปลอดภัยถูกจัดการด้วยวิธีอื่น RabbitMQ ก็อาจไม่จำเป็น กรุณาแก้ไขฉันถ้าฉันผิด
Ricardo MS

คุณถูกต้อง แต่เพื่อให้แน่ใจว่าคุณจะต้องเปรียบเทียบประสิทธิภาพระหว่างผลิตภัณฑ์ทั้งสอง
Tom Kregenbild

4
"RabbitMQ เป็นผลิตภัณฑ์ที่เสถียรมากซึ่งสามารถรองรับเหตุการณ์จำนวนมากต่อวินาทีและการเชื่อมต่อมากมายโดยไม่ต้องเป็นคอขวด" - ฉันค่อนข้างมั่นใจว่าจริงก็คือเรดดิสเช่นกัน ดังนั้นนี่ไม่ใช่ข้อได้เปรียบของ rabbitmq มากกว่า Reddit
Martin Thoma

"RabbitMQ อนุญาตให้คุณใช้เลเยอร์ความปลอดภัยในตัวโดยใช้ SSL" - reddis ไม่อนุญาตให้มีการเข้ารหัสชั้นขนส่งด้วยหรือ?
Martin Thoma

2
2019 redis ยังไม่ได้สร้าง TLS
jjxtra

55

Redis ถูกสร้างขึ้นเพื่อเป็นที่เก็บข้อมูลค่าคีย์แม้ว่าจะมีความสามารถพื้นฐานของนายหน้าข้อความ

RabbitMQ ถูกสร้างขึ้นเพื่อเป็นนายหน้าส่งข้อความ มีความสามารถในการเป็นนายหน้าข้อความมากมายตามธรรมชาติ


1
คำแถลงของคุณเกี่ยวกับ Redis ไม่ถูกต้องอีกต่อไปด้วยการแนะนำ Stream ใน Redis 5 RabbitMQ เป็นตัวเลือกที่ดีกว่าสำหรับสถานการณ์ขนาดใหญ่อย่างแน่นอน สำหรับสถานการณ์ขนาดเล็กถึงขนาดกลาง (ซึ่งโครงการส่วนใหญ่ในโลกเป็น) Redis เป็นทางเลือกที่เชื่อถือได้รวดเร็วและง่ายต่อการกำหนดค่า
Reza

ขอบคุณสำหรับความมุ่งมั่นคงจะดีถ้ามีคนเขียนถึงประสบการณ์ของเขาเกี่ยวกับฟีเจอร์ใหม่ของ Redis
Ferhat

44

ฉันได้ทำการค้นคว้าเกี่ยวกับหัวข้อนี้ หากประสิทธิภาพเป็นสิ่งสำคัญและความคงอยู่ไม่ได้ RabbitMQ เป็นตัวเลือกที่สมบูรณ์แบบ Redis เป็นเทคโนโลยีที่พัฒนาขึ้นโดยมีเจตนาที่แตกต่างกัน

ต่อไปนี้เป็นรายชื่อข้อดีสำหรับการใช้ RabbitMQ บน Redis:

  • RabbitMQ ใช้ Advanced Message Queuing Protocol (AMQP) ซึ่งสามารถกำหนดค่าให้ใช้ SSL เพิ่มชั้นความปลอดภัย
  • RabbitMQ ใช้เวลาประมาณ 75% ของเวลาที่ Redis ใช้ในการยอมรับข้อความ
  • RabbitMQ รองรับลำดับความสำคัญของข้อความซึ่งพนักงานสามารถใช้เพื่อใช้ข้อความที่มีลำดับความสำคัญสูงก่อน
  • ไม่มีโอกาสที่จะสูญเสียข้อความหากพนักงานคนใดขัดข้องหลังจากใช้งานข้อความซึ่งไม่ใช่กรณีของ Redis
  • RabbitMQ มีระบบการกำหนดเส้นทางที่ดีเพื่อส่งข้อความไปยังคิวต่างๆ

ข้อเสียเล็กน้อยสำหรับการใช้ RabbitMQ:

  • RabbitMQ อาจดูแลรักษายากเล็กน้อยและยากที่จะแก้ไขข้อขัดข้อง
  • ความผันผวนของชื่อโหนดหรือโหนด - ไอพีอาจทำให้ข้อมูลสูญหายได้ แต่หากมีการจัดการที่ดีข้อความที่คงทนสามารถแก้ปัญหาได้

4
Redis มีSorted Setsการโต้ตอบแบบคิวลำดับความสำคัญ Redis ยังสามารถคลัสเตอร์ / แยกส่วนเพื่อส่งข้อความที่แตกต่างกันไปยังคิวต่างๆบนเซิร์ฟเวอร์ที่แตกต่างกันได้ ไม่แน่ใจเกี่ยวกับ SSL โดยตรงสำหรับ Redis แต่ฉันกำลังดูที่ AWS Elasticache และ Redis 3.2.6 ของพวกเขาอนุญาตให้มีการเข้ารหัสที่เหลือและระหว่างการส่ง หมายเหตุ: ไม่เลยที่บอกว่า Redis ดีกว่าสำหรับกรณีนี้ เพียงแค่ชี้ให้เห็นว่าสิ่งเหล่านี้อาจไม่ใช่เหตุผลในการเลือก RabbitMQ กับ Redis
dwanderson

1
อย่าลืมว่า Redis เป็นเธรดเดียวดังนั้นหากคุณมีผู้เผยแพร่ / ผู้บริโภคจำนวนมากที่อาจเป็นปัญหาได้
Kedare

5

ฉันเคยสงสัยในสิ่งเดียวกัน คำแนะนำก่อนหน้านี้โดยคน Logstash แนะนำให้ Redis ผ่าน RabbitMQ ( http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized ) อย่างไรก็ตามส่วนของบันทึกย่อนั้นไม่มีอยู่ในเอกสารปัจจุบันอีกต่อไปแม้ว่าจะมี หมายเหตุทั่วไปเกี่ยวกับการใช้นายหน้าเพื่อจัดการกับ spikes ที่นี่https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html

ในขณะที่ฉันใช้ RabbitMQ อย่างมีความสุขฉันกำลังสำรวจโบรกเกอร์ Redis เนื่องจากโปรโตคอล AMQP มีแนวโน้มที่จะใช้งานมากเกินไปสำหรับกรณีการใช้งานการบันทึกของฉัน


2

คำถามด่วนที่จะถาม:

  1. ทำไมคุณถึงต้องการนายหน้า? หากคุณใช้ logstash หรือ logstash-forwarder เพื่ออ่านไฟล์จากเซิร์ฟเวอร์เหล่านี้ทั้งสองอย่างจะทำงานช้าลงหากไปป์ไลน์ติดขัด
  2. คุณมีประสบการณ์ในการดูแลกระต่ายหรือเรดิสบ้างไหม? ทุกสิ่งเท่าเทียมกันเครื่องมือที่คุณรู้วิธีใช้คือเครื่องมือที่ดีกว่า

ในขอบเขตของความคิดเห็นฉันใช้ redis ในฐานะนายหน้าและเกลียดมัน แน่นอนว่านั่นอาจเป็นความไม่มีประสบการณ์ของฉันกับ redis (ไม่ใช่ปัญหากับตัวผลิตภัณฑ์) แต่มันเป็นลิงค์ที่อ่อนแอที่สุดในท่อและมักจะล้มเหลวเมื่อเราต้องการมากที่สุด

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.