마이크로서비스 간의 통신방식에 대해 알아보겠습니다.
Synchronouse Solution에는 당연히 동기적으로 하는 것이므로, Rest API가 있습니다. 이는 매우 익숙한 방법입니다.
Asynchronouse Messaging는 서비스 A가 서비스 B로 메세지를 보낼 때, 서비스A는 브로커한테 바로 메세지를 보냅니다. 그리고 서비스A는 응답을 기다리지 않습니다. 그래서 일단 비동기라고 지칭합니다. 그리고 서비스B는 준비가 되었을 때, 결과를 브로커에게 보냅니다. 그리고 브로커가 A에게 결과를 보내는 방식입니다.
이를 위해서는 RabbitMQ와 Apache Kafka를 사용합니다. 우리의 실습에서는 RabbitMQ를 일단 사용해보도록 하겠습니다.
만약 서비스 A가 B로 요청을 보냈는데 B가 오프라인상태여서 응답을 받는데 시간이 많이걸릴 수도 있습니다. 반대로 머신러닝같은걸 B에서 돌리고 있고 응답을 받을 때, 응답을 A에 줘야 하는데, 이게 오프라인상태일 수 있습니다. 그럼 이때까지의 모든 머신러닝의 결과물이 날라간다고 보시면 됩니다.
결국적으로 이러한 결과가 왜 생기냐면, 서비스A, B가 독립적이기 떄문입니다. A는 B의 상황을 모르고, B도 A의 상황을 모르기 때문입니다.
위와 같은 문제를 해결하기 위해서 이와 같은 비동기적 모델을 사용합니다. Producer가 메시지를 Consumer에 보냅니다. 그러면 Message Broker는 보낸 메세지를 Producer에서 메세지를 수신하여 Consumer에게 메시지를 전달하여 작업을 수행합니다
그리고 Producer가 여러개의 메세지를 보낼 수도 있고, 당연히 그 메세지에는 수신자와 발신자 정보가 같이 있을겁니다. 어디에다 보내야 하는지 알아야 하니까요. 또한 만약 보내려는 곳이 오프라인 상태라면 Message Broker가 잠시 보관해주는 역할도 합니다. 다시 온라인이 되면 보내겠죠.
즉 Message Broker는 PM과 같은 역할을 하게 되는 것입니다.
'DevOps > AWS Architecture' 카테고리의 다른 글
[ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개발) 도메인 서비스 구현 - Django, Docker (0) | 2022.07.07 |
---|---|
[ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (설계) 마이크로서비스 아키텍쳐 (0) | 2022.07.07 |
[ DevOps ] - AWS 기반 대규모 아키텍트 설계 - (개요) 마이크로서비스의 장단점 (0) | 2022.07.07 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 2 (0) | 2022.07.07 |
[ DevOps ] - AWS 기반 소규모 & 중규모 아키텍트 설계 - (인프라) AWS CodeDeploy 1 (0) | 2022.07.07 |