더북(TheBook)

주문 생성의 이벤트 순서는 다음과 같습니다.

1. 클라이언트가 주문 서비스에 HTTP POST /orders 요청을 합니다.

2. 주문 서비스는 소비자 서비스에 HTTP GET /consumers/id를 요청하여 소비자 정보를 조회합니다.

3. 주문 서비스는 음식점 서비스에 HTTP GET /restaurant/id를 요청하여 음식점 정보를 조회합니다.

4. 주문 서비스는 이렇게 조회한 소비자/음식점 정보로 올바른 주문인지 확인합니다.

5. 주문 서비스는 주문을 생성합니다.

6. 주문 서비스는 클라이언트에 HTTP 응답합니다.

 

세 서비스 모두 HTTP를 사용하기 때문에 주문 생성 요청이 정상 처리되려면 세 서비스 모두 가동 중이어야 합니다. 어느 한 서비스라도 내려가면 주문 생성은 불가능합니다. 수학적으로 표현하면 시스템 작업의 가용성은 그 작업이 호출한 서비스의 가용성을 모두 곱한 값과 같습니다. 가령 주문 서비스와 이 서비스가 호출한 두 서비스의 가용성이 99.5%라면, 전체 가용성은 99.5%3 = 98.5%로 더 낮습니다. 더 많은 서비스가 요청 처리에 개입할수록 가용성은 더 낮아지겠죠.

REST 통신만 그런 것이 아닙니다. 어떤 서비스가 다른 서비스의 응답을 받은 이후에 자신의 클라이언트에 응답하는 구조라면 가용성은 떨어집니다. 비동기 메시징을 통해 요청/응답하는 방식도 사정은 마찬가지입니다. 예를 들어 주문 서비스가 메시지 브로커를 거쳐 소비자 서비스에 메시지를 보낸 후 응답을 기다려야 한다면 가용성은 역시 떨어집니다.

그러므로 가용성을 최대화하려면 동기 통신을 최소화해야 합니다. 어떻게 하면 좋을까요?

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.