TIL

3장 프로세스 간 통신

3.1 마이크로서비스 아키텍처 IPC 개요

3.1.1 상호 작용 스타일

3.1.2 마이크로서비스 API 정의

3.1.3 API 발전시키기

시멘틱 버저닝

하위 호환되는 소규모 변경

중대한 대규모 변경

3.1.4 메시지 포맷

텍스트 메시지 포맷

이진 메시지 포맷

3.2 동기 RPI 패턴 응용 통신

3.2.1 동기 RPI 패턴: REST

REST 성숙도 모델

REST 장단점

3.2.2 동기 RPI 패턴: gRPC

// 주문 서비스 gRPC API 예시
service OrderService {
    rpc createOrder(CreateOrderRequest) returns (CreateORderReply) {}
    rpc cancelOrder(CancelOrderRequest) returns (CancelORderReply) {}
    rpc reviseOrder(ReviseOrderRequest) returns (ReviseOrderReply) {}
    ...
}

message CreateOrderRequest {
    int64 restaurantId = 1;
    int 64 consumerId = 2;
    repeated LineItem lineItems = 3;
    ...
}

message LineItem {
    string menuItemId = 1;
    int32 quantity = 2;
    ...
}

...

3.2.3 부분 실패 처리: 회로 차단기 패턴

견고한 RPI 프록시 설계

넷플릭스 히스트릭스는 위와 같은 다양한 패턴이 구현된 오픈 소스 라이브러리이다. JVM 환경이라면 히스트릭스를 이용해 RPI 프록시를 구현해볼 수 있다.

불능 서비스 복구

3.2.4 서비스 디스커버리

서비스 디스커버리 개요

애플리케이션 수준의 서비스 디스커버리 패턴 적용

플랫폼에 내장된 서비스 디스커버리 패턴 적용

3.3 비동기 메시징 패턴 응용 통신

3.3.1 메시징 개요

3.3.2 메시징 상호 작용 스타일 구현

3.3.3 메시징 기반 서비스의 API 명세 작성

3.3.4 메시지 브로커

브로커리스 메시징

브로커 기반 메시징 개요

메시지 브로커로 메시지 채널 구현

메시지 브로커 점대점 채널 발행-구독 채널
JMS 토픽
아파치 카프카 토픽 토픽
AMQP 브로커 (RabbitMQ) 익스체인지 + 큐 팬아웃 익스체인지, 컨슈머 개별 큐
AWS 키네시스 스트림 스트림
AWS SQS -

브로커 기반 메시징의 장단점

3.3.6 중복 메시지 처리

멱등한 메시지 핸들러 작성

메시지 추적과 중복 메시지 솎아 내기

3.3.7 트랜잭셔널 메시징

DB 테이블을 메시지 큐로 활용

이벤트 발행: 폴링 발행기 패턴

이벤트 발행: 트랜잭션 로그 테일링 패턴

3.3.8 메시징 라이브러리/프레임워크

3.4 비동기 메시징으로 가용성 개선

3.4.1 동기 통신으로 인한 가용성 저하

3.4.2 동기 상호 작용 제거

비동기 상호 작용 스타일

데이터 복제

응답 반환 후 마무리