SECTION 17. Decoupling applications: SQS, SNS, Kinesis, Active MQ

‎김연수·2024년 6월 16일

SAA 자격증 공부

목록 보기
14/16

Amazon SQS(Simple Queue Service)

  • 마이크로서비스, 분산 시스템 및 서버리스 애플리케이션을 위한 완전관리형 메시지 대기열
  • 애플리케이션 분리하는데 사용되는 완전 관리형 서비스

SQS - 메시지 생산자

  • 생산자는 SDK 소프트웨어 개발 키트를 사용하여 SQS에 메시지를 보낸다.
    -SendMessage API 사용한다.
  • 소비자가 해당 메시지를 읽고 삭제할 때까지 SQS 대기열에 유지된다.

SQS - 메시지 소비자

  • 소비자는 일부 코드로 작성해야 하는 애플리케이션이고 이러한 애플리케이션은 EC2 인스턴스에서 실행될 수 있다.
    -온프레미스, AWS Lambda의 람다 함수
  • 대기열에는 소비자가 있고 소비자는 SQS 메시지를 폴링한다.
    -소비자는 한 번에 최대 10개의 메세지를 받는다.
  • 소비자는 이 메시지들을 폴링하고 처리할 책임이 있다.
  • 이후 소비자가 이 메시지들을 DeleteMessage API로 대기열에서 삭제한다.

SQS - 다중 EC2 인스턴스 소비자

  • SQS 대기열은 소비자가 메시지를 동시에 받고 병렬적으로 처리할 수 있다.
  • 중복으로 메시지를 받을 수 있기 때문에, 최선의 노력으로 메시지 순서를 지정한다.
  • 메시지 처리 이후에는 메시지를 삭제해야 한다.
  • SQS 대기열에서 더 많은 메시지가 있어서 처리량을 늘려야 하면
    소비자를 추가하고 수평 확장(ASG)을 수행해서 처리량을 개선할 수 있다.

SQS with Auto Scaling Group(ASG)

  • 메시지를 스케일링할 때 SQS 큐에 있는 CloudWatch Metric 을 사용한다.
  • 큐의 길이가 일정 수준을 넘으면 알람을 설정하고, 그 알람이 배율을 증가시키도록 하여 메시지 처리량을 더 높게 처리하도록 한다.

SQS - 애플리케이션 계층 간에 분리(decouple)

  • 프론트엔드 앱은 파일 처리 요청을 바을 때 큐에 메시지를 보낸다.
  • 백엔드 응용 프로그램을 메시지를 수신하고 s3 버킷에 삽입하기 위한 ASG에 있게 된다.

Security

  • 암호화
    - HTTPS API를 사용하여 전송 중 암호화를 한다.
    - KMS 키를 사용하여 미사용 암호화를 얻는다.
  • 액세스 제어
    -SQS API에 대한 액세스를 규제
  • SQS 액세스 정책
    -S3 버킷 정책과 유사
    -SQS 대기열에 대한 교차 계정 액세스를 수행하려는 경우
    -SNS 혹은 Amazon S3 같은 다른 서비스가 SQS 대기열에 S3 이벤트 같은 것을 쓸 수 있도록 허용

SQS - 메시지 가시성 시간 초과(Timeout)

  • 메시지가 폴링된 이후, 다른 컨슈머에게 보이지 않게 된다.
  • 디폴트로, 메시지 가시성 타임 아웃은 30초
  • 메시지는 30초 동안 실행된다.
  • 메시지 가시성 타임 아웃이 끝난 이후, 메시지는 sqs에서 보이게 된다.

  • 가시성 타임 아웃 시간 내에 메시지가 실행되지 않는다면, 이후 두 번 실행되게 된다.
  • 컨슈머가 시간을 더 얻기 위해 ChangeMessageVisibility API 를 호출할 수 있다.
  • 만약 가시성 타임아웃이 높다면(몇 시간), 컨슈머는 충돌하고 재실행이 시간을 가진다.
  • 만약 가시성 타임아웃이 너무 낮다면(몇 초), 우리는 복제를 얻게 된다.

SQS - Long Polling

  • 롱 폴링

    클라이언트의 요청에 대해서 서버가 일정시간동안 기다렸다가 클라이언트에게 응답을 주는 방식

  • 애플리케이션의 효율성을 늘리고 지연시간을 줄이는 반면, SQS에 생성된 API 호출 횟수를 감소시킨다.

SQS - FIFO Queues

  • FIFO = First In First Out(큐에 들어가는 메시지의 순서)

    FIFO 대기열의 특징: FIFO(first-in-first-out) 전달 및 정확한 1회 처리

    • 메시지 송신 및 수신 순서가 엄격히 보존되며, 메시지는 한 번 전달되어 소비자가 이를 처리하고 삭제할 때까지 계속 사용 가능합니다. 대기열에 중복 메시지가 유입되지 않습니다.
    • FIFO 대기열은 단일 대기열 내의 순서화된 여러 메시지 그룹을 가능케 하는 메시지 그룹도 지원합니다. FIFO 대기열은 300회의 초당 트랜잭션(TPS)으로 제한되지만 표준 대기열의 모든 기능을 가지고 있습니다.


SQS - Auto Scaling Group

  • ASG
  • 로드가 너무 크면, 몇몇 트랜잭션이 잃어버리게 될 수 있다.

  • SQS가 버퍼로써 데이터 베이스 쓰기

  • 두 애플리케이션 티어 사이에 복제된 SQS

AWS SNS(Simple Notification Service)

SNS: 클라우드에서 손쉽게 알림을 설정, 운영 및 전송할 수 있는 웹 서비스, 게시-구독(pub-sub) 메시징 패러다임을 따르며 푸시 메커니즘을 사용하여 클라이언트에 알림을 전달
출처: https://easyitwanner.tistory.com/480 [IT 시작해보기:티스토리]

  • 사용자는 주제를 생성하고 어떤 게시자 및 구독자가 주제와 통신할 수 있는지를 결정하는 정책을 정의

  • 게시자는 각 메시지에 특정 대상 주소를 포함하는 대신 메시지를 해당 주제로 전송할 수 있습니다. SNS는 주제와 해당 주제의 구독자 목록을 일치시켜 각 구독자에게 메시지를 정송합니다.

  • 모든 알림 메시지에는 게시 메시지가 하나만 포함됩니다. SNS는 게시자가 주제에 게시한 메시지를 그 순서 그대로 전송하려고 시도합니다.

SNS and SQS - Fan Out Pattern

애플리케이션: 다중 큐에 대한 S3 이벤트들

  • 이벤트 타입과 프리픽스의 같은 조합에 대해 하나의 S3 이벤트 규칙을 가질 수 있다.

애플리케이션: Kinesis Data Firehose 를 통한 아마존 s3에 SNS

  • SNS는 KiNESIS에 보낼 수 있고 아래와 같은 솔루션 아키텍처를 가진다.

SNS - FIFO Topic

  • SQS FIFO와 비슷한 특징
    -Ordering: 메시지 그룹 id에 의한 순서
    -Deduplication: 복제 id 또는 컨텐츠 기반 복제를 사용한 복제
  • SQS 스탠다드와 FIFO 큐를 subscribers 로 가질 수 있다.

메시지 필터링

  • JSON 정책은 SNS의 topic subscriptions에 보낼 메시지를 필터하는 데 사용된다.

0개의 댓글