← 질문 목록
#17깊이 0
메시지 큐를 두면 무엇을 얻고 무엇을 잃는가?
답변 연습
내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요
보내는 쪽과 받는 쪽의 시간을 떼어내는 대신 완료 확인과 재처리를 따로 설계한다. 트래픽이 몰려도 받는 쪽이 자기 속도로 처리할 수 있는 것이 가장 큰 이득이다.
큐를 두면 받는 쪽의 잠깐 장애를 요청 처리와 분리할 수 있다. 하지만 큐가 있다고 유실이 자동으로 사라지지는 않는다. 어디까지 처리했는지 확인하는 프로토콜이 필요하다.
| 구간 | 안전하게 넘기는 조건 | 비어 있으면 생기는 일 |
|---|---|---|
| 발행자 → 브로커 | 영속·복제 저장과 publisher confirm | 확인 전 종료하면 유실 가능 |
| 브로커 → 컨슈머 | 업무 처리 완료 후 consumer ack | 먼저 ack하고 죽으면 유실 가능 |
| 확인이 안 온 발행 | 재전송과 중복 제거 | 재전송하면 중복 가능 |
대가도 분명하다. 주문 접수와 실제 처리 사이에 틈이 생긴다. 화면은 접수를 완료로 보이지 않고 처리 중과 실패를 따로 보여줘야 한다. 적체량과 재시도도 관측해야 한다.
confirm이 유실되면 브로커가 받았는지 발행자는 알 수 없다. 안전하게 재전송하면 중복이 생길 수 있다. 그래서 전달 보장은 큐 제품의 고정 속성이 아니라 영속·복제 설정, confirm·ack, 재전송, 컨슈머 멱등성을 합친 결과다.
순서도 파티션 수와 컨슈머 병렬성에 따라 달라진다. 같은 주문의 순서가 필요하면 같은 키를 같은 파티션으로 보내고 처리 병렬성을 그 범위에서 제한한다.
추천 꼬리질문
관련 질문
- 분산 트랜잭션에서 Saga 패턴이 필요한 이유는?아키텍처 · 분산시스템Saga 패턴은 주로 메시지 큐를 이용한 비동기 이벤트 기반으로 구현되어 서비스 간의 느슨한 결합과 신뢰성 있는 상태 전이를 관리한다.
- 메시지 순서는 어디까지 보장되는가?아키텍처 · 분산시스템메시지 큐를 통한 비동기 통신 시 메시지 전달 순서 보장 문제는 핵심적인 고려 사항이다.
- 메시지 형식을 바꾸면 옛 소비자는 어떻게 되는가?아키텍처 · 분산시스템큐가 생산자와 소비자를 분리한다는 구조를 알아야 형식 변경이 소비자를 깨뜨리는 문제가 보인다.
- 이벤트 소싱을 도입할 때의 트레이드오프는 무엇인가?아키텍처 · 분산시스템둘 다 이벤트를 쌓아 두고 나중에 소비하는 구조의 트레이드오프를 다룬다.
- 게이트웨이를 두면 무엇을 얻고 무엇을 걱정해야 하는가?아키텍처 · 분산시스템