마이크로서비스에 대한 비동기 통신을 구현하기 위해서 메시지 브로커를 선택해 사용할 수 있다.
MSA를 구축하기 위해서 메시지 브로커가 무엇인지를 이해하고, 많은 브로커들 중 어떤걸 사용할 지도 정해야 한다.
그래서 메시지 브로커중에서 가장 많이 쓰이는 RabbitMQ, Redis, kafka를 비교, 정리해보려고 한다.
RabbitMQ, Redis, Kafka 같은 기술을 메시지 플랫폼이라고 한다.
메시지 플랫폼은 2가지 종류로 나뉘어진다.
- 메시지 브로커
- 이벤트 브로커
이 둘을 간단히 설명하면 다음과 같다.
메시지 브로커는 이벤트 브로커의 역할을 할 수 없지만, 이벤트 브로커는 메시지 브로커의 역할을 할 수 있다.
메시지 브로커
대규모 메시지 기반 미들웨어 아키텍쳐에서 사용되어왔다.
미들웨어란?
애플리케이션과 이들이 동작하는 인프라간의 효율적인 연결을 위해 존재하는 소프트웨어이다.
메시징 플랫폼, 인증 플랫폼, 데이터베이스같은 것들을 의미한다.
메시지를 받아서 적절히 처리하면 짧은 시간내에 메시지가 삭제되는 특징이있다.
데이터 손실의 위험이 있다.
이벤트 브로커
이벤트 또는 메시지라고 불리는 정보를 하나만 보관하고 인덱스를 통해 개별 엑세스를 관리한다.
업무상 필요한 시간동안 이벤트를 관리한다.
메시지 브로커와 다르게 이벤트가 삭제되지 않는다는 특징이 있다.
그리고 서비스에서 발생하는 이벤트를 DB에 저장하듯이 이벤트 브로커의 큐에 저장한다.
이벤트를 저장함으로써 얻는 장점은 다음과 같다.
- 딱 한 번 일어난 이벤트 데이터를 브로커에 저장함으로써 모든 데이터 요소를 한 곳에서만 제어 또는 편집하도록 조직하는 관례(단일 진실 공급원)에 맞게 동작한다.
- 장애가 발생했을 때 장애가 일어난 지점부터 재처리할 수 있다.
- 많은 양의 실시간 스트림 데이터를 효과적으로 처리할 수 있다.
생산자와 소비자
생산자 : 데이터를 메시지 큐에 전달하는 입장
소비자 : 메시지 큐에서 데이터를 가져오는 입장
RabbitMQ
메시지 브로커
- 구성이 쉽다.
- 복잡한 라우팅을 지원
- 오래되었고, 안정성이 높다
- 20K/sec 정도의 속도를 보인다.
- 소비자 중심의 설계
- 데이터 손실의 위험성
- 성능 문제가 있다.
Redis
메시지 브로커
메모리 기반의 딕셔너리 구조 데이터 관리 시스템이다.
- 처리 속도가 빠름
- 캐시의 역할도 가능하다.
- 명시적으로 데이터 삭제가 가능하다
- 메모리 기반이므로 서버가 다운되면 Redis내의 모든 데이터가 사라진다.
Kafka
이벤트 브로커
구독 방식의 비동기식 구성
분산처리에 효과적
생산자 중심의 설계
이벤트 기반 마이크로 서비스 아키텍쳐로 발전하는데 큰 도움이 될 수 있다.
100K/sec 정도의 속도
RabbitMQ가 kafka에 비해서 구성이 편하고 다루기 쉽지만 생산자와 소비자간의 결합도가 높기 때문에 서비스의 확장이 없다면 RebbitMQ를 사용하는것이 좋다.
하지만 대규모 트래픽이 예상되고, 확장이 예상된다면 kafka를 선택하는것이 더 좋아보인다.
'Back-End > MSA' 카테고리의 다른 글
[Cloud Native] 분산 시스템의 기초 개념들 (3) | 2022.11.05 |
---|---|
[MSA] 리액티브 마이크로 서비스 패턴 (0) | 2022.05.18 |
모놀리식 & 마이크로서비스 아키텍처(분산 시스템) (0) | 2022.01.13 |
MSA(MicroService Architecture)에 대한 내 생각 한 줌 (6) | 2022.01.05 |