마이크로서비스 아키텍처 · 비동기 통신과 이벤트 · 퀴즈
퀴즈: 비동기와 이벤트
문항 5개. 정답과 해설은 풀어 본 뒤에 보여 드립니다.
가용성 99.9% 인 서비스 네 개를 동기로 직렬 호출하면 전체 가용성은?
- 약 99.6%
- 99.9% 그대로
- 약 99.99%
- 100%
`SendNotification` 대신 `OrderCreated` 로 이름 붙이는 것이 결합을 줄이는 이유는?
- 이벤트 이름이 짧아져 페이로드 크기가 줄기 때문
- 사실형 이름이 직렬화 속도를 높여 주기 때문
- 발행자가 수신자를 알 필요가 없어져 소비자가 늘어도 발행자가 바뀌지 않기 때문
- 이름만으로 이벤트 순서가 정해져 보장이 쉬워지기 때문
이벤트 페이로드 설계에서 소비자가 발행자의 DB 를 되짚어 조회하게 두면?
- 페이로드가 작아져 네트워크 사용량이 줄어든다
- 발행자가 늘 최신 상태를 주므로 순서가 보장된다
- 같은 조회를 반복해도 결과가 같아 멱등성이 생긴다
- 서비스 간 결합이 되살아나고 발행자 장애가 소비자로 전파된다
같은 주문의 `OrderCreated` 와 `OrderPaid` 순서를 보장하려면?
- 파티션을 1개로 줄인다
- 타임스탬프로 정렬한다
- 소비자를 1개만 둔다
- 집합체 ID(주문 ID)를 파티션 키로 쓴다
비동기 전환의 가장 큰 제품 차원 비용은?
- 서버 비용 — 브로커와 소비자를 따로 띄워야 함
- 코드량 — 재시도와 중복 제거 코드가 늘어남
- 최종 일관성 — 사용자가 아직 반영되지 않은 상태를 볼 수 있음
- 로그 양 — 발행과 소비 양쪽에 기록이 남음