Logstash와 Elasticsearch 사이의 데이터 브로커 / 메시징 시스템으로서 Redis Vs RabbitMQ


91

다양한 머신에 설치되어있는 Logstash 배송 업체의 로그 정보를 수집하고 하나의 Elasticsearch 서버에 데이터를 중앙에서 인덱싱하고 Kibana를 그래픽 레이어로 사용하는 아키텍처를 정의하고 있습니다. Logstash 배송 업체와 Elasticsearch 사이에 안정적인 메시징 시스템이 필요합니다. Logstash 배송 업체와 Elasticsearch 사이 또는 그 반대의 경우 데이터 브로커 / 메시징 시스템으로 RabbitMQ보다 Redis를 선택할 때 고려해야 할 요소는 무엇입니까?

답변:


94

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 배송 업체를보다 안정적으로 만드는 수정 작업을 진행 중입니다. 첫 번째 해결책은 동시에 실행할 수있는 프로세스를 더 추가하여 발송인에게 더 많은 전력을 제공하는 것입니다. 두 번째 해결책은 이론적으로 훨씬 빨라야하는 데이터를 RabbitMQ에 비동기 적으로 전송하도록 Beaver를 변경하는 것입니다. 이번 주 말까지 두 솔루션 모두 구현을 완료하기를 바랍니다.

여기에서 문제를 따를 수 있습니다 : https://github.com/josegonzalez/python-beaver/issues/323

여기에서 pull 요청을 확인하십시오 : https://github.com/josegonzalez/python-beaver/pull/324

더 많은 질문이 있으면 의견을 남겨주세요.


3
Redis는 RabbitMQ에 비해 더 강한 포인트가 있습니까? Redis는 구성하기가 더 쉬운 것 같습니다. 그리고 엄청난 처리량이 필요하지 않고 보안이 다른 수단으로 처리되고 있다면 RabbitMQ가 필요하지 않을 수 있습니다. 내가 틀렸다면 정정 해주세요.
Ricardo MS

당신은 정확하지만 확인하기 위해 당신은 두 제품 간의 성능을 비교해야합니다
톰 Kregenbild

4
"RabbitMQ는 병목 현상없이 초당 많은 양의 이벤트와 많은 연결을 처리 할 수있는 매우 안정적인 제품입니다." -나는 그것이 사실이라고 확신합니다. 이 레딧을 통해 rabbitmq의 장점되지 않도록
마틴 토마스

"RabbitMQ를 사용하면 SSL을 사용하여 내장 된 보안 계층을 사용할 수 있습니다."-reddis는 전송 계층 암호화도 허용하지 않습니까?
Martin Thoma 19

2
2019 여전히 redis에는 TLS가 내장되어 있지 않습니다
jjxtra

55

Redis는 몇 가지 기본 메시지 브로커 기능이 있음에도 불구하고 키 값 데이터 저장소로 생성됩니다 .

RabbitMQ는 메시지 브로커로 생성됩니다. 자연스럽게 많은 메시지 브로커 기능이 있습니다.


1
Redis 5의 Stream 도입으로 Redis에 대한 귀하의 진술은 더 이상 정확하지 않습니다. RabbitMQ는 확실히 대규모 시나리오에 더 나은 선택입니다. 중소 규모 시나리오 (전 세계 대부분의 프로젝트)의 경우 Redis는 안정적이고 빠르며 구성하기 쉬운 대안입니다.
Reza

헌신 해주셔서 감사합니다. 누군가 Redis의 새로운 기능에 대한 경험을 여기에 쓰면 좋을 것입니다.
Ferhat

44

나는이 주제에 대해 약간의 연구를하고있다. 성능이 중요하고 지속성이 중요하지 않은 경우 RabbitMQ는 완벽한 선택입니다. Redis는 다른 의도로 개발 된 기술입니다.

다음은 Redis를 통해 RabbitMQ를 사용하는 전문가 목록입니다.

  • RabbitMQ는 추가 보안 계층 ​​인 SSL을 사용하도록 구성 할 수있는 AMQP (Advanced Message Queuing Protocol)를 사용합니다.
  • RabbitMQ는 Redis가 메시지를받는 데 걸리는 시간의 약 75 %가 걸립니다.
  • RabbitMQ는 작업자가 우선 순위가 높은 메시지를 먼저 소비하는 데 사용할 수있는 메시지 우선 순위를 지원합니다.
  • 메시지를 사용한 후 작업자가 충돌하면 메시지를 잃을 가능성이 없습니다. 이는 Redis의 경우가 아닙니다.
  • RabbitMQ에는 메시지를 다른 대기열로 보내는 좋은 라우팅 시스템이 있습니다.

RabbitMQ 사용에 대한 몇 가지 단점 :

  • RabbitMQ는 유지 관리가 약간 어렵고 충돌을 디버그하기 어려울 수 있습니다.
  • node-name 또는 node-ip 변동은 데이터 손실을 유발할 수 있지만 잘 관리하면 내구성있는 메시지로 문제를 해결할 수 있습니다.

3
Redis는 Sorted Sets우선 순위 대기열과 같은 상호 작용을 허용합니다. Redis는 클러스터링 / 샤딩되어 다른 서버의 다른 대기열로 다른 메시지를 보낼 수도 있습니다. Redis 용 SSL에 대해 직접 확신 할 수는 없지만 AWS Elasticache를 살펴보고 있으며 Redis 3.2.6은 미사용 및 전송 중 암호화를 허용합니다. 참고 :이 경우에는 Redis가 더 낫다고 말하는 것은 아닙니다. Redis보다 RabbitMQ를 선택하는 이유가 아닐 수도 있습니다.
dwanderson

1
또한 Redis는 단일 스레드이므로 문제가 될 수있는 게시자 / 소비자가 많은 경우에도 잊지 마십시오.
Kedare

5

나는 똑같은 것을 궁금해하고 있습니다. Logstash 사람들의 이전 권장 사항은 RabbitMQ ( http://logstash.net/docs/1.1.1/tutorials/getting-started-centralized ) 보다 Redis를 권장 하지만 메모의 해당 섹션은 현재 문서에 더 이상 존재하지 않지만 브로커를 사용하여 스파이크를 처리하는 방법에 대한 일반적인 참고 사항은 여기 https://www.elastic.co/guide/en/logstash/current/deploying-and-scaling.html 입니다.

RabbitMQ도 매우 행복하게 사용하고 있지만 AMQP 프로토콜이 로깅 사용 사례에 과도 할 가능성이 높기 때문에 현재 Redis 브로커를 탐색하고 있습니다.


2

물어볼 빠른 질문 :

  1. 왜 브로커가 필요한가요? logstash 또는 logstash-forwarder를 사용하여 이러한 서버에서 파일을 읽는 경우 파이프 라인이 정체되면 둘 다 속도가 느려집니다.
  2. 래빗이나 레디 스를 관리 한 경험이 있습니까? 모든 것이 동일하면 사용 방법을 아는 도구가 더 나은 도구입니다.

의견의 영역에서 저는 redis를 브로커로 운영하고 싫어했습니다. 물론 redis에 대한 경험이 없었을 수도 있지만 (제품 자체의 문제는 아님) 파이프 라인에서 가장 약한 링크였으며 가장 필요할 때 항상 실패했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.