1-a. 메시지 지향 미들웨어 (MOM) [SYS-study]
메시지 지향 미들웨어 중 한 가지인 메시지큐의 이론과 MSA에서의 역할
[ 0. MOM이란? ]
미들웨어 : 서로 다른 애플리케이션이 서로 통신하는 데 사용되는 소프트웨어
메세지 지향 미들웨어 (MOM) : 비동기적(Asynchronous) 방식을 이용해서 프로세스간의 데이터를 주고 받는 시스템
- 송수신 측의 동시 네트워크 연결 유지 필요성 제거 (강제 연결 X)
- 하나의 메세지를 여러 수신자에게 배포가 가능 (라우팅)
- 메세지의 백업 기능을 유지 (보관)
- 송수신 측의 요구에 따라 전달하는 메세지를 변환 가능 (변환)
[ 1. MQ ]
QUEUE(FIFO) 자료구조를 이용해서, MOM을 구현한 시스템
메세지를 발행하고 전달하는 부분을 Producer
메세지를 받아서 소비하는 부분을 ConsumerProducer와 Consumer 를 연결하는 것이 Message Queue
메시지 큐의 장점
1. 비동기(Asynchronous): Queue에 넣어두기 때문에 나중에 처리 가능
2. 낮은 결합도(Decoupling): 애플리케이션과 분리
3. 탄력성(Resilience): 실패가 전체 시스템에 영향 X
4. 과잉(Redundancy): 실패 할 경우 재실행이 가능
5. 신뢰성(Guarantees): 작업이 처리된 걸 확인 및 모니터링 가능
6. 확장성(Scalable): 부하 처리 방식이 편리
확장성 예시 1: Consumer 부족으로 부하 발생
- 사용자가 많아져서 큐에 메시지가 계속 쌓임
- Consumer가 하나밖에 없어서 처리 속도가 느림
⇒ Consumer를 5개로 늘림 → 큐가 병렬로 빨리 비워짐
확장성 예시 2: API 서버가 병목이라 Producer 확장
- 동시 요청이 많아 API 서버가 느림 (큐에 밀어넣기 전에 죽음)
⇒ Producer 서버 수를 늘려 메시지 큐로 더 많은 요청을 밀어 넣음
[ 2. Broker ]
메세지 브로커(Message Broker)
Consumer가 메세지 큐에서 데이터를 가져가게 되면 짧은 시간 내에 메세지 큐에서 삭제
ex) RabbitMQ, ActiveMQ, AWS SQS, Redis
- 이벤트 브로커(Event Broker)
- 이벤트 브로커 방식에서는
Consumer가 소비한 데이터를 필요한 경우 다시 소비 가능 - 대용량 데이터를 처리 가능
데이터 = 이벤트
이벤트 시점을 저장 가능
⇒ consumer가 특정 시점부터 이벤트를 다시 consume 할 수 있는 장점(ex : 장애가 일어난 시점부터 그 이후의 이벤트를 다시 처리할 수 있음)
이벤트 브로커는 기본적으로 메세지 브로커의 역할 가능!
but 반대로 메세지 브로커는 이벤트 브로커의 기능 불가!
⇒ 이벤트 브로커가 더 만능
- 메시지 기반: A가 B에게 "메일을 보내!"라고 직접 지시함 (명령 + 전달 대상 지정)
- 이벤트 기반: A는 "회원가입이 완료됨"이라는 사실을 말하고, 듣고 싶은 사람들(C, D, E)이 알아서 반응함
[ 3. Zookeeper & KAFKA ]
Kafka : 분산 이벤트 스트리밍 플랫폼 (이벤트 브로커 이용)
⇒ 여러 개의 이벤트 전송 Broker(서버)로 구성된 클러스터
Zookeeper : 분산 애플리케이션을 위한 코디네이션 시스템
⇒ 여러 분산 시스템의 중앙 관리 프로그램
KAFKA에서는
- 브로커의 leader와 follower 구분
- 브로커의 활성 여부 (heartbeat)
- 파티션 분할 등
Zookeeper ⇒ 위와 같은 데이터를 어딘가에 저장하고 조율
Zookeeper = 클러스터 메타데이터 + 상태 + 역할 + 리더 선출의 중심 시스템
KAFKA의 구조
event : 데이터
event stream : 관련된 이벤트들
topic : kafka에서 event stream의 명칭
partition : topic을 분산 저장하는 가장 작은 단위 (for 병렬 전달)
Subscribe 동작 ⇒ (Consumer가 카프카를 확인)
- Kafka 토픽
- a → 2개 파티션 (a-0, a-1)
- b → 1개 파티션 (b-0)
- c → 1개 파티션 (c-0)
- d→ 1개 파티션 (d-0)
- Consumer는 a, b, d 토픽을 구독
Green Frog Developer[기술 면접 준비 - 2일차] Spring Framework && DatabaseFRIPPUB/SUB, 잘 알고 쓰자!
https://ggop-n.tistory.com/89
TISTORY[Apache Kafka]구성요소 이해하기(Cluster, Broker, Topic, Partition, Producer, Consumer, Zookeeper)