본문 바로가기

Infrastructure/Microservice

[MSA] Communication

Communication

MSA(Micro Service Architecture)에서 서비스와 프로세스 간 커뮤니케이션 방법에 대해서 알아본다.

전통적인 SOA(Service Oriented Architecture)에서 서비스 간 커뮤니케이션은 ESB(Enterprise Service Bus)로 알려져 있는 센트럴 런타임를 통해 구현되었으며 통신을 위한 로직이 비즈니스 로직의 중간 레이어에 존재한다. 반면 MSA는 ESB(중앙 메시지 버스)를 제거하고 다른 서비스를 호출하기 위해 필요한 비즈니스 로직 및 네트워크 통신 로직은 마이크로서비스의 일부분으로써 실행된다.


서비스 간 통신

MSA는 서비스 간 통신을 위해서 크게 액티브 컴포지션과 리액트 컴포지션 스타일이 있으며 둘을 혼합하여 사용하는 하이브리드 컴포지션 스타일이 존재한다.

1. 액티브 컴포지션

아토믹/코어 서비스(Atomic/Core Service)는 독립적인 서비스로써 대부분 비즈니스 로직으로만 구성되어 있으며 외부 서비스 종속이 거의 없기 때문에 네트워크 통신을 위한 로직을 적게 포함하고 있다.

아토믹 서비스는 비즈니스 기능성에 따라 직접적으로 매핑이 불가능한 경우가 발생할 수 있다. 따라서 특정 비즈니스 기능은 다수의 아토믹/코어 서비스의 구성이 요구될 것이다. 하나의 서비스는 동기 방식의 요청-응답 메시징 스타일로 다수의 다운스트림 서비스를 호출하여 복합 서비스를 만들 수 있다. 이렇게 구성된 서비스를 복합(Composite) 또는 혼합(Integration)서비스라고 부르며 라우팅, 변경, 오케스트레이션, 복원력 및 안정성 패턴과 같은 SOA에서 가지고 있는 ESB 기능의 특정 부분을 포함한다.

이미지만 확인하면 아토믹 서비스와 통합(Composite/Integration) 서비스의 차이가 크게 느껴지지 않지만 위의 글을 다시 해석해보면 하나의 통합(Composite) 서비스는 여러개의 아토믹 서비스로 구성되어 있다는 것을 알 수 있다. 한 마디로 정리하면 통합 서비스에서 통합은 여러개의 아토믹 서비스가 통합되었음을 의미한다.

비즈니스 기능은 API Management의 API 서비스에 의해 사용자에게 제공되며 요청이 어떤 서비스로 라우팅 되는지는 API 서비스에서 관리한다. API 서비스는 API 버전 관리, API 보안 패턴, 쓰로틀링과 같은 기능을 제공한다.


2. 리액티브 컴포지션

액티브 컴포지션은 API 혹은 외부 서비스와 통신하기에는 좋지만 복합 서비스가 완전히 자율적으로 운영될 수는 없다. 필자가 참고한 문서에서는 위처럼 간략하게만 설명하고 있어서 완전히 자율적으로 운영될 수 없는 이유가 명확하게 파악은 불가능했다. 하지만 API 통신 방식 자체가 결국 내가 원하는 데이터를 얻기위해 다른 서비스의 API 주소를 의존해야 하기 때문에 완전 자동화 운영은 불가능하며 동기 방식이기 때문에 다른 서비스에 장애가 발생하여 응답을 하지 않는 경우 장애가 전파되기 때문인 것으로 해석된다.

반면 이벤트 버스 방식은 비동기 방식의 통신이기 때문에 데이터 제공자(Producer)와 소비자(Consumer)는 서로를 알고 있지 않아도 되고 다른 서비스의 장애가 전파되지 않는다. 물론 중앙에 위치한 이벤트 버스에 장애가 발생하면 모든 서비스가 통신하지 못하기 때문에 중앙 이벤트 버스의 중요도가 상당히 높아진다. 마치 EBS의 통신 방식과 유사하다고 볼 수 있다.


3. 하이브리드 컴포지션

하이브리드 컴포지션은 기본적인 구조는 액티브 컴포지션 스타일로 구성하고 필요한 부분에 리액티브 컴포지션 스타일을 추가한 방식이다. 일반적으로 상호작용이 필요한 서비스나 외부에 의존하고 있는 서비스의 경우 액티브 스타일을 사용하고 내부의 다른 서비스와 통신하며 전달되었음을 보장해야 하는 통신은 리액티브 스타일로 실행할 수 있다.

MSA 서비스간의 통신을 어떠한 방식으로 하던 우리의 서비스는 API 게이트웨이를 통해 노출될 수 있고 이렇게 노출된 API는 API 관리 기술(API Management)레이어에 의해 관리된다. 해당 레이어는 보안, 쓰로틀링, 캐싱, 모니터링과 같은 기능을 포함해야 한다. API 게이트웨이는 다수의 API 게이트웨이 인스턴스로 분리될 수 있으며 API 관리 컴포넌트는 중앙에 위치한다. API 게이트웨이는 필수적인 기능을 제외한 비즈니스 로직을 포함하는 것을 최소화해야 한다. 만약 API 게이트웨이에서 비즈니스 로직을 많이 포함하게 된다면 결국 이전 SOA방식으로 돌아가게 된다.


참고한 자료

'Infrastructure > Microservice' 카테고리의 다른 글

[MSA] DOMA 구현  (0) 2022.09.23
[MSA] DOMA 개념  (0) 2022.09.23