-
Message System이란?MSA & 쿠버네티스(Kubernetes) - k8s 2022. 3. 18. 17:03
용어 정리
MOM ( Message Oriented Middleware, 메시지 지향 미들웨어)
독립된 애플리케이션 간에 데이터를 주고받을 수 있도록 하는 시스템 디자인
함수 호출, 공유 메모리 등의 방식이 아닌, 메시지 교환을 이용하는 중간 계층에 대한 인프라 아키텍처 개념
서비스 간의 결합이 낮아지고 비동기로 메시지를 전달함.
Message Broker
메시지 처리 또는 메시지 수신자에게 메시지를 전달하는 시스템으로 MOM을 기반으로 구축됨
MQ(Message Queue, 메시지 큐)
Message Broker와 MOM을 구현한 소프트웨어 ( RabbitMQ, ActiveMQ, kafka 등)
MOM은 메시지 전송 보장을 해야 하므로 AMQP를 구현함
AMQP(Advanced Messgae Queueing Protocol)
메시지를 안정적으로 주고받기 위한 인터넷 프로토콜
메시지 시스템이란?
메시지하면 가장 먼저 떠오르는 건 "문자"입니다. 그러면 문자를 보내는 시스템?이라고 생각할 수 있지만, 꼭 그런 건 아닙니다.
애플리케이션 간에 로그 데이터, 이벤트 메시지 등 API로 호출할 때 보내는 데이터들을 처리하는 시스템입니다.
MSA에서는 데이터 송수신 방법으로 메시징 시스템을 사용합니다.
메시징 시스템으로는 Kafka, RabbitMQ, Active MQ, AWS SQS, Java JMS 등이 있습니다.
메시징 시스템에는 Point to Point 방식, Pub/Sub 방식이 존재합니다.
Point to Point 방식
보내는 사람이 큐를 통해서 전달할 메시지를 전달하면 받는 사람이 큐에서 메시지를 사용하는 방식입니다.
모두 큐를 하나씩 가지고 있으며 보내는 사람들이 목적지 Queue를 정해서 전송하면 받는 사람이 Queue에서 하나씩 꺼내 읽는 방식입니다.
Pub/Sub 방식
구독자(Subscriber)가 특정 토픽이나 이벤트에 대해 구독을 해 놓으면 해당 토픽이라 이벤트에 대한 통지를 비동기 방식으로 받는 방식을 Pub/Sub 방식이라 합니다.
즉, 게시자(Publisher)가 특정 토픽에 메시지를 보내면, 해당 topic을 구독해놓은 모든 사용자들에게 메시지가 전송되는 방식입니다.
메시징 시스템을 사용하는 이유는?
MSA에서는 시스템 간의 호출이 많이 때문에 서비스 간 결합도를 낮추기 위해서, 비동기 요청, 성능, 안정성 등 여러 가지 이점이 있기 때문에 메시징 시스템을 사용합니다.
또한 메시지 큐가 없는 경우를 생각해 보겠습니다.
User 서비스가 존재한다고 생각해 보겠습니다.
서비스에 사용자 들이 많아졌다고 가정해 보겠습니다.
우리의 컨테이너 오케스트레이션 툴에 의해 Scale-out을 하게 되고 다음과 같이 두 개의 컨테이너가 생성됩니다.
여기서 동일한 서비스에 데이터가 분산되어 저장될 수 있습니다.
API Gateway가 보내는 요청에 따라 동일한 서비스에 서로 다른 데이터가 저장될 수 있습니다.
그러면 동기화를 어떻게 진행해야 할까요?
1. 하나의 서비스 인스턴스가 Sacle-Out 되더라도 동일한 데이터베이스 사용하기
(여러 인스턴스가 동일한 DB를 보고 작업을 하게 되면 동시성 문제가 발생할 수 있습니다.)
2. Message Queue를 이용하기
Kafka나 RabbiyMQ와 같은 Message broker(메시지를 전달하는 시스템)을 사용합니다.
Message Queue를 이용하는 방법에도 크게 2가지가 존재합니다.
2-1. 인스턴스 각각의 데이터베이스를 운영하여 큐잉 서버에 구독
2-2. 하나의 데이터베이스를 운영하며 중간에 큐잉 서버를 두는 방식
출처
https://coding-nyan.tistory.com/129
https://victorydntmd.tistory.com/343
https://goneoneill.tistory.com/48
'MSA & 쿠버네티스(Kubernetes) - k8s' 카테고리의 다른 글
Service Discovery란? (0) 2022.03.24 로드 밸런서(Load Balancer)란? (0) 2022.03.22 서비스 메시(Service Mesh)란? + API Gateway와 차이점 (0) 2022.03.17 API 게이트웨이(Gateway)란? (0) 2022.03.14 프록시 서버란? (0) 2022.03.13