← 질문 목록
#17깊이 0

메시지 큐를 두면 무엇을 얻고 무엇을 잃는가?

아키텍처 · 분산시스템심화확장성장애 대응

답변 연습

내 답변 적어보기접힘
이 브라우저에 자동 저장 · 0자
모범답안 확인하기내 답변 뒤에 열어보세요

보내는 쪽과 받는 쪽의 시간을 떼어내는 대신 완료 확인과 재처리를 따로 설계한다. 트래픽이 몰려도 받는 쪽이 자기 속도로 처리할 수 있는 것이 가장 큰 이득이다.

큐를 두면 받는 쪽의 잠깐 장애를 요청 처리와 분리할 수 있다. 하지만 큐가 있다고 유실이 자동으로 사라지지는 않는다. 어디까지 처리했는지 확인하는 프로토콜이 필요하다.

구간안전하게 넘기는 조건비어 있으면 생기는 일
발행자 → 브로커영속·복제 저장과 publisher confirm확인 전 종료하면 유실 가능
브로커 → 컨슈머업무 처리 완료 후 consumer ack먼저 ack하고 죽으면 유실 가능
확인이 안 온 발행재전송과 중복 제거재전송하면 중복 가능

대가도 분명하다. 주문 접수와 실제 처리 사이에 틈이 생긴다. 화면은 접수를 완료로 보이지 않고 처리 중과 실패를 따로 보여줘야 한다. 적체량과 재시도도 관측해야 한다.

confirm이 유실되면 브로커가 받았는지 발행자는 알 수 없다. 안전하게 재전송하면 중복이 생길 수 있다. 그래서 전달 보장은 큐 제품의 고정 속성이 아니라 영속·복제 설정, confirm·ack, 재전송, 컨슈머 멱등성을 합친 결과다.

순서도 파티션 수와 컨슈머 병렬성에 따라 달라진다. 같은 주문의 순서가 필요하면 같은 키를 같은 파티션으로 보내고 처리 병렬성을 그 범위에서 제한한다.

추천 꼬리질문

0/300

적은 내용은 AI 학습에 쓰일 수 있습니다. 이름이나 연락처는 넣지 말아 주세요.

관련 질문

메시지 큐를 두면 무엇을 얻고 무엇을 잃는가?