본문 바로가기
AWS

[AWS] 서버리스 애플리케이션을 위한 AWS 메시징 서비스와 아키텍처 구현 패턴

by yonikim 2021. 7. 30.
728x90

 

대부분의 서버리스 애플리케이션 아키텍처는 AWS Lambda 서비스와 다양한 AWS 서비스 및 마이크로서비스를 조합하여 만든다. 이중 메시징 서비스는 분산 애플리케이션이 서로 통신할 수 있도록 하는 중요한 역할을 수행하기 때문에, 대부분의 서버리스 워크로드에서 기본적으로 사용된다. 

 

메시징 서비스를 적절하게 사용하는 경우 탄력성, 가용성 및 확장성을 향상시킬 수 있다. 또한 AWS 클라우드를 넘어 통신할 수 있도록 하고 향후 서비스 기능 및 버전에 대한 확장성을 제공할 수 있다. 

 

 

AWS 메시징 서비스 종류

서버리스 개발자에게 가장 유용한 세가지 메시징 패턴은 큐, 발행(Pub)/구독(Sub) 및 이벤트버스 이다. AWS에서는 각각 Amazon Simple Queue Service(SQS), Amazon Simple Notification Service(SNS) 및 Amazon EventBridge 에서 제공한다. 이 서비스들은 완전 관리형으로 고가용성을 제공하므로, 별도로 관리할 인프라가 없다. 세가지 모두 Lambda 와 통합되어 AWS SDK 를 통해 람다 함수를 대상으로 호출 및 메시지를 게시할 수 있다. 

 

Amazon SNS

Amazon SNS 를 사용하면 인프라 내에서 안정적으로 메시지를 보낼 수 있다. 다운스트림 대상을 사용할 수 없는 경우 강력한 재시도 매커니즘을 사용한다. 전송 정책이 소진되면 향후 재전송을 위해 선택적으로 배달 못한 편지 대기열 로 보낼 수 있다. SNS 는 주제를 사용하여 논리적으로 메시지를 분리하고 Lambda 함수는 이들 주제와 상호작용한다.

 

 

Amazon SQS

Amazon SQS 는 서버리스 애플리케이션을 위한 대기열을 제공한다. 큐를 사용하여 워크로드의 서로 다른 서비스 간에 메시지를 보내고 저장 및 수신할 수 있다. 대기열은 분산 시스템에서 재결함성을 제공하고 애플리케이션의 다른 부분을 분리하는데 도움이 되는 중요한 메커니즘이다. SQS 는 탄력적으로 확장되며 대기열당 메시지 수에는 제한이 없다. 서비스를 다운스트림 소비자가 처리할 때까지 메시지를 지속적으로 유지한다.

 

 

Amazon EventBridge

Amazon EventBridge 는 서버리스 이벤트버스 서비스로 내부 AWS 서비스, 외부 SaaS(Software as a Service) 공급자 및 자체 애플리케이션 간의 이벤트 라우팅을 단순화한다. 이벤트버스를 사용하여 라우팅을 논리적으로 분리하고 규칙을 사용하여 라우팅 로직을 구현한다. 서비스 수준에서 수신 메시지를 필터링 및 변환하고 Lambda 함수를 비롯한 여러 대상으로 이벤트를 라우팅할 수 있다.

 

 

SQS 와 SNS 비교

SQS 대기열과 SNS 주제는 다른 기능을 제공하지만, 둘 다 다운스트림 Lambda 함수에 게시할 수 있다. SQS 메시지는 구독자가 성공적으로 처리할 때까지 최대 14일동안 대기열에 저장된다. SNS는 메시지를 보관하지 않기 때문에 주제에 대한 구독자가 없으면 메시지가 삭제된다.

SNS 주제는 여러 대상에게 브로드캐스트될 수 있다. 이 동작을 팬아웃 이라고 한다. Lambda 함수 전체에서 작업을 병렬화하거나 테스트 및 개발환경과 같은 여러 환경에 메시지를 보내는데 사용할 수 있다. SNS 주제는 최대 12,500,000명의 구독자를 가질수 있어 확장성이 뛰어난 팬아웃 기능을 제공한다. 대상에는 HTTP/S 엔드포인트, SMS 문자메시지, SNS 모바일푸시, 이메일, SQS 및 Lambda 기능이 포함되어 있다.

 

 

EventBridge 와 SNS 비교

SNS 와 EventBridge 는 유사한 점이 많다. 둘 다 게시자와 구독자를 분리하고 메시지 또는 이벤트를 필터링하고 팬인 또는 팬아웃 기능을 제공하는데 사용할 수 있다. 그러나 각 서비스의 대상 및 가능 목록에는 차이가 있으며 서비스 선택은 사용 사례의 요구사항에 따라 다르다.

 

EventBridge 는 SNS 에서 사용할 수 없는 두가지 기능을 제공한다. 첫번째는 SaaS(Software as a Service) 통합이다. 이를 통해 지원되는 SaaS 공급자가 EventBridge 이벤트버스에서 계정의 파트너 이벤트 버스로 직접 이벤트를 보낼 수 있는 권한을 부여할 수 있다. 이는 폴링 또는 웹훅 구성의 필요성을 대체하고 SaaS 이벤트를 AWS 계정으로 직접 수집하는 확장성이 뛰어난 방법을 생성한다.

두번째는 이벤트에 대한 OpenAPI 스키마를 더 쉽게 검색하고 관리할 수 있는 스키마 레지스트리 기능이다. EventBridge 는 스키마 검색을 사용하여 이벤트버스를 통해 라우팅된 이벤트를 기반으로 스키마를 유추할 수 있다. 이것은 Python, Java 및 TypeScript 와 같은 유형의 안전언어용 IDE에 직접 코드 바인딩을 생성하는데 사용할 수 있다. 이는 이벤트에서 직접 클래스 및 코드 생성을 자동화하여 개발을 가속화하는데 도움이 될 수 있다.

Amazon SNS Amazon EventBridge
대상 수 1000만(소프트) 규칙당 5개 대상
가용성 SLA 99.9% 99.99%
서비스 할당량 100,000개의 주제. 주제당 12,500,000개의 구독. 100개의 이벤트 버스. 이벤트 버스당 300개의 규칙.
게시 처리량 지역에 따라 다릅니다. 조정 가능한 할당량. 지역에 따라 다릅니다. 조정 가능한 할당량.
입력 변환 아니오 예 – 자세히 보기
메시지 필터링 예 – 자세한 보기 예, IP 주소 일치를 포함 자세히 보기
최대 메시지 크기 256KB 256KB
청구 64KB당 64KB당
체재 Raw 또는 JSON JSON
AWS CloudTrail에서 이벤트 수신 아니오
대상 HTTP(S), SMS, SNS 모바일 푸시, 이메일/이메일-JSON, SQS, Lambda 함수 AWS Lambda , Amazon SQS , Amazon SNS , AWS Step Functions , Amazon Kinesis Data Streams , Amazon Kinesis Data Firehose , API Gateway REST API 엔드포인트  Amazon Redshift 클러스터 등
SaaS 통합 아니오 예 – 자세히 보기
스키마 레지스트리 통합 아니오 예 – 자세히 보기
배달 못한 편지 대기열 지원 예 – 자세히 보기
FIFO 주문 가능 아니오
공개 가시성 공개 주제 생성 가능 공공 버스 생성 불가능
가격 $0.50/백만 요청 + 가변 전송 비용 + 데이터 전송 비용 $1.00/백만 이벤트
청구 가능한 요청 크기 1 요청 = 64KB 이벤트 1개 = 64KB
AWS 프리 티어 적격 아니오
교차 리전 기능 모든 리전에서 Amazon SNS 주제에 대한 AWS Lambda 함수를 구독 가능 대상은 동일한 리전에 있어야 함 (리전 간에 다른 이벤트 버스에 게시 가능)
재시도 정책 SQS/Lambda의 경우 23일 동안, SMTP, SMS 및 모바일 푸시의 경우 6시간 동안 재시도 최대 24시간 동안 재시도를 포함하여 대상에 최소 한 번 이벤트 전달

 


더 나아가기

SNS 와 SQS 결합하기

SNS 에는 23일동안 최대 100,010 번의 전송 시도를 발생하는 강력한 재시도 정책이 있다. 다운스트림 서비스를 사용할 수 없는 경우 다시 온라인 상태가 될때 이러한 재시도에 압도될 수 있다. 이 때 SQS 대기열을 추가하여 이 문제를 해결할 수 있다.

 

SNS 주제와 구독자 사이에 SQS 대기열을 추가하면 두가지 이점이 있다. 첫째, 메시지가 대기열에 영구적으로 저장되기 때문에 메시지 배달에 탄력성을 추가한다. 둘째, 컨슈머에 대한 메시지 속도를 조절하여 서비스가 누락된 메시지를 따라잡음으로써 발생하는 트래픽 버스트를 완화하는데 도움이 된다.

 

 

EventBridge 와 SNS 결합하기 

EventBridge 에는 규칙당 대상이 5개로 제한되어 있다. 수백 또는 수천개의 대상에 이벤트를 보내야 하는 경우 먼저 SNS 에 게시한 다음 해당 대상을 주제에 구독하면 이 제한을 해결할 수 있다. 두 서비스의 대상이 다르기 때문에 이 패턴을 이용하면 EventBridge 이벤트를 SMS, HTTP/S, 이메일 및 SNS 모바일 푸시로 전달할 수 있다. 

 

Lambda 함수 없이도 메시지를 변환하고 필터링할 수 있고, 다른 AWS 계정 및 다른 AWS 리전의 Lambda 함수에 이벤트를 전달할 수 있으며 다른 리전 및 계정의 SNS 주제에서 Lambda 를 호출할 수 있다. 

 

 

EventBridge 와 SQS 로 내결함성 마이크로서비스 구축하기

EventBridge 는 이벤트를 마이크로서비스와 같은 대상으로 라우팅할 수 있다. 다운스트림 실패의 경우, 서비스는 최대 24시간동안 이벤트를 재시도한다. 메시지를 저장하고 다시 시도하는데 더 오랜 시간이 필요한 워크로드의 경우 각 마이크로서비스의 SQS 대기열에 이벤트를 전달할 수 있다. 이렇게 하면 다운스트림 서비스가 복구될 때까지 해당 이벤트를 영구적으로 저장한다. 이 패턴을 사용하면 메시지 전달을 조절하여 대규모 트래픽 버스트로부터 마이크로서비스를 보호한다. 

 

(출처: https://aws.amazon.com/ko/blogs/korea/choosing-between-messaging-services-for-serverless-applications/)

728x90