반응형

MSA(Microservice Architecture)의 핵심은 ①비즈니스 민첩성, 장애대응, 개발 및 운영 조직, 배포중요도, 도메인 관련성특성에 따라 서비스를 분리하고(바운디드 컨텍스트를 만들고 서비스를 추출) ②분리된 서비스별 결합도를 낮추기 위해 독립된 데이터베이스를 두며 ③서비스간 데이터 전달은 이벤트 기반의 메시지 전달을 하는 것이라고 생각한다.

 

이렇게 각 서비스 별로 필요한 데이터를 이벤트 형식으로 비동기적으로 전송하는 아키텍처를 EDA(Event Driven Architectur)라 한다. 최근 MSA를 고려할때 비동기 통신을 위해 반드시 EDA를 고려해야 하고 EDA의 핵심인 Event Broker(Queue)의 제품별 특성을 반드시 이해하고 프로젝트에 적용해야 한다.

 

이 포스팅에서는 AWS 환경하에서 이용 가능한 Event Broker(Queue)에 대해 알아보도록한다.

AWS Message Queue 제품 비교

구분 Native Service Managed Service
Amazon SQS Amazon SNS Kinesis Amazon MQ Amazon MSK
개요
Queue 기반 단순 메시지 송/수신 시스템
SQS(Simple Queue Service)
Point to Point 통신
Topic 기반 메시지 Push 시스템
SNS(Simple Notification Service)
Multi Point 통신
Data Stream 기반 데이터 송/수신 시스템
Kinesis Data Stream
전통적인 Message Broker 기반 데이터 송/수신 시스템
Apache MQAWS 관리형 버전
Data Stream 기반 데이터 송/수신 시스템
Apache KafkaAWS 관리형 버전
기능 및 특징
1:1 송수신 업무
개별 메시지 별로 확인/실패 검증 필요시
메시지별 지연 시간 지정 등이 필요할 때
동적 Consumer의 처리량을 동적으로 증가하고자 할 경우
메시지 전송등 Push형 업무에 적합
Fan-out 아키텍처
Push형 서비스 기반으로 Consumer Pull 또는 Polling 기능 없음
대용량 로그, 모바일, Click Stream 데이터 수집/분석 업무 적합
Real Time 분석
Big Data 기반 분석 시스템 구축시 사용
Cloud 최적화 아키텍처가 아닌 Apache MQ 기반 App Migration에 적합
메시지 사이즈 제약 없이 전송 가능
Binary 메시지 지원
Big Data 플랫폼 구축을 위한 Amazon Kinesis Data Stream의 기능 제공
Kafka Connector를 응용한 CDC 기능 구현 가능
EDA 지원을 위한 Pub/Sub 기반 애플리케이션 가능
장단점
장점:
신뢰성 있는 메시지 전달
동적 확장
단점:
Text 메시지만 지원
하나의 메시지를 다수의 컨슈머에 전달 불가
장점:
신뢰성 있는 메시지 전달
동적 확장
단점:
Pub/Sub 미지원
장점:
안정적인 대규모 처리
Auto Scaling
편리한 개발 지원
단점:
Subscriber에서 Offset 관리(복잡한 Failover 처리 필요)
장점:
높은 신뢰성 및 업계 호환성(J2EE, JMS, NMS, Web Socket )
단점:
상대적으로 낮은 인지도 및 레퍼런스(개발자 수급 및 난이도 높음)
장점:
EDA의 사실상 DeFacto
Zookeeper를 통한 Offset 관리(강력한 Failover 제공)
단점:
상대적 구현 난이도
비고
 
 
 
- 2021년 현재 Apache MQ이외 Rabbit MQ 제품도 추가됨
 

 

EDA(Event Driven Architecture)를 위한 AWS기반 Event Broker(Queue) 제품 비교표

AWS Re:Invent 자료 및 기타 소개 자료를 기반으로 EDA를 위한 Event Broker의 특성을 나열하고 각 서비스별 특성을 맵핑하면 아래와 같은 결과가 나온다. MQ(Message Queue)와 MSK(Managed Streming Service for Kafka)를 제외하고 각 특성에 대해선 아래의 Reinvent 동영상을 보길 권장한다.

Evidence: https://www.youtube.com/watch?v=4-JmX6MIDDI (2018, Choosing the right message service for your distributed Apps.)

 

결론적으로 Event Broker로 가장 적절한 솔루션은 Managed 방식의 경우 MSK가 적당해 보이지만 2021.12 현재 Amazon MQ 에 Apache MQ이외 Rabbit MQ도 추가 되었기 때문에 구축하고자 하는 시스템의 규모에 맞게 적절한 솔루션 선택을 권장한다.(국내에서 Message Broker로는 Kafka와 Rabbit MQ가 가장 많이 사용된다.)

 

AWS 기반 Event Broker(Queue) 과금 비교

종류 과금 기준 비용(USD) 비고
Amazon SQS 무료 요청 100만건, 100~ 1천억개 요청
데이터 전송은 수신은 무료
, 송신은 최대 1GB 무료
0.5 요청 1백만 개당
Amazon SNS 모바일 푸시 알림 100만 개 무료 0.5 알림 1백만개 당
Email/Email-JSON 알림 1,00개 무료 2 알림  100,000개 당
HTTP/s 100,000개 무료 0.6 알림 1백만개 당
데이터 전송 수신은 무료, 송신은 최대 1GB 무료    
Amazon Kinesis Data Stream 샤드 시간(초당 1MB 수신, 초당 2MB 수신) 0.0185  
PUT 페이로드 단위, 백만 유닛당 0.0204  
Amazon ActiveMQ 단일 인스턴스 브로커(mq.m5.xlarge) 0.708 시간당
활성/대기 인스턴스 브로커(mq.m5.xlarge) 1.416 시간당
단일 인스턴스 브로커 스토리지 요금 (EFS) 0.33 GB-월당 요금
활성/대기 인스턴스 브로커 스토리지 요금(EFS) 0.33 GB-월당 요금
Amazon MSK 브로커 인스턴스 요금 0.516 시간당 요금
브로커 스토리지 요금 0.114 GB-월당 요금
MSK Connect 요금 0.135 MSK Connect Unit, 시간당, 초 단위로 청구

 

AWS SQS 적용 예

SQS(Simple Queue Service) 서비스는 Point to Point 기반 Message Broker로써 데이터의 신뢰도가 중요한 Point to Point 간의 통신시 적용이 유리

AWS SQS 적용 예

 

Reference: 

 

Implementing enterprise integration patterns with AWS messaging services: point-to-point channels | Amazon Web Services

This post is courtesy of Christian Mueller, Sr. Solutions Architect, AWS and Dirk Fröhner, Sr. Solutions Architect, AWS At AWS, we see our customers increasingly moving toward managed services to reduce the time and money that they spend managing infra

aws.amazon.com

 

AWS SNS 적용 예

SNS(Simple Notification Service) 서비스는 Topic 기반 Message Broker로써 다양한 소스(Computing, Storage, Database, Networking)에서 발생하는 이벤트성 로그들을 Mail, SMS, Alert 시스템등에 중계하는 업무등에 적합

AWS SNS 적용 예

Reference:

 

 

Amazon SNS를 통한 이벤트 기반 컴퓨팅으로 AWS 주요 서비스 활용하기 | Amazon Web Services

모든 개발자가 그렇듯이 여러분은 점점 더 복잡해지는 비즈니스 문제를 풀어야 합니다. 이 때, 가장 중요한 성공 요소는 대규모 프로젝트를 작게 나눠서 관리하기 쉬운 요소로 분류할 수 있어야

aws.amazon.com

 

AWS Kinesis 적용 예

Kinesis Data Stream 서비스는 Stream 기반 Message Broker로써 다양한 소스(Computing, Storage, Database, Networking)에서 발생하는 이벤트성 데이터들을 수집해 다양한 서비스로 통합하는 업무에 적합(e.g. Big Data)

AWS Kinesis 적용 예

Reference:

 

 

High Performance Data Streaming with Amazon Kinesis: Best Practices (…

Amazon Kinesis makes it easy to collect, process, and analyze real-time, streaming data so you can get timely insights and react quickly to new information. In…

www.slideshare.net

 

Kafka(MSK) 적용 예

Apache Kafka MSA의 핵심인 EDA 아키텍처를 지원하며 이를 통해 응용프로그램에서 발생한 이벤트 전달 및 시스템간 종속성을 최소화 할 수 있음

EDA 아키텍처를 위한 Kafka 적용 예

 

맺으며

Event Driven Architecture 구현을 위해 Kafka를 Event Broker로 사용해 Event를 송/수신하는 예제는 아래의 링크를 통해 참조 및 Hands-on 해볼수 있다.

 

 

Spring Boot를 이용한 Kafka Pub Sub 개발

Kafka Pub Sub 모델 링크드인(Linkedin)은 초창기 Point to Point 구조를 이용해 시스템간 데이터 전송을 사용하다가 증가하는 메시지 전송에 대해 대응을 하지 못했다. Linkedin은 이 문제를 해결하기 위해

sharplee7.tistory.com

 

 

반응형

+ Recent posts