피드로 돌아가기
강남언니 공식 블로그
원문 읽기
너의 실패는 나의 실패가 아니야 - Self-contained Service
강남언니가 Self-contained Service 패턴으로 병원 서비스 장애를 상품 서비스로부터 격리해 월 P99.999 가용성 달성
AI 요약
Context
분산 마이크로서비스 환경에서 상품 서비스가 병원 서비스에 동기 호출로 의존하면서, 병원 서비스의 장애가 상품 서비스의 등록/수정/조회 기능까지 영향을 주는 장애 전파 문제가 발생했다.
Technical Solution
- 병원 서비스의 변경 이벤트를 트리거로 최신 스냅샷을 조회하여 상품 DB에 복제: Event-driven Architecture 기반으로 병원 정보를 상품 서비스 내부 DB에 복제본으로 저장
- Thin event 패턴 도입: 이벤트에 병원 ID만 담고 나머지 정보는 추가 API 호출로 조회하는 방식으로 이벤트 버전 관리 부담 경감
- Upsert 연산으로 멱등성 보장: 동일한 이벤트를 여러 번 수신해도 최신 상태를 덮어쓰는 방식으로 중복 처리 부작용 제거
- 초기 일괄 적재 및 재구축 전략 구성: 상품 서비스의 병원 복제본 데이터를 초기에 일괄 적재하고 장애 시 재구축 가능하도록 설계
- 동기 호출 제거: 상품 서비스의 동기 요청 코드 경로에서 병원 서비스 응답 대기 제거
Impact
- 상품 API 월 단위 가용성: P99.999 달성
- 장애 전파로 인한 다운타임: 관측 없음
- HTTP API 통신 제거로 인한 레이턴시 감소: DB 호출로 변경
Key Takeaway
Event-driven 데이터 복제를 통한 Self-contained Service 패턴은 결과적 일관성을 허용하는 도메인에서 서비스 간 장애 격리와 독립적 확장성을 동시에 달성할 수 있으며, 실시간성보다 가용성이 중요한 핵심 도메인에 적합한 아키텍처 선택이다.