Amazon SQS

2023. 6. 21. 15:47AWS (Amazon Web Services)

※ 해당 블로그는 AWS에서 제공하는 설명서와 AWS Builders Online Series 강의를 듣고 개인적으로 공부한 내용을 정리한 블로그입니다.

 

Amazon SQS?

  • Amazon Simple Queue Service의 약자
  • 마이크로 서비스, 분산 시스템 및 서버리스 애플리케이션을 쉽게 분리하고 확장할 수 있게 해주는 완전 관리형 메시지 대기열 서비스
  • 분산된 애플리케이션 구성 요소 간 데이터 이동이 가능해지며 이러한 구성 요소의 결합을 해제할 수 있음
  • 내구력 있고 가용성이 뛰어난 보안 호스팅 대기열을 제공하며 이를 통해 분산 소프트웨어 시스템과 구성 요소를 통합 및 분리 할 수 있음
  • 컴포넌트 간에 작업을 비동기적으로 전송 할 수 있음, 발신자와 수신자가 실시간으로 서로를 기다릴 필요 없이 독립적으로 작업을 할 수 있음을 의미

 

기본 아키텍처

1. 메시지

  • SQS에서 데이터를 전송하는 기본 단위
  • 큐에 저장되어 프로듀서로부터 컨슈머로 전달됨

 

2. 큐

  • 메시지를 저장하며 SQS에는 여러 개의 큐를 생성하고 사용할 수 있음
  • 각 큐는 고유한 URL을 가지며, 메시지를 저장하고 컨슈머에게 전달
  • 큐의 특징 FIFO(선입선출)대로 SQS는 메시지를 수신한 순서대로 처리
  • 여러 컨슈머가 동일한 큐에서 메시지를 읽을 수 있음

 

3. 프로듀서

  • 메시지를 생성하고 메시지를 큐에 보내는 애플리케이션 또는 컴포넌트
  • 프로듀서가 메시지를 큐에 보내기 위해서는 큐 URL을 알고 있어야 하며 보낼 때 메시지 식별자 또는 그룹 ID를 함께 메시지를 보냄

 

4. 컨슈머

  • 큐에서 메시지를 읽고 처리하는 애플리케이션 또는 컴포넌트
  • 컨슈머는 읽고자 하는 메시지가 저장되어 있는 큐 URL을 알고 있어야 하며 SQS에게 메시지를 가져올 것을 요청
  • 컨슈머가 메시지를 읽은 뒤에는 해당 메시지를 삭제 또는 재사용 가능

 

5. 대기 시간

  • 일부 컨슈머는 메시지가 도착하는 즉시 처리하고 일부 컨슈머는 일정 시간 동안 메시지가 도착하지 않을 때까지 대기하는 방식으로 작동 시킬 수 있음
  • 컨슈머가 너무 많은 메시지를 한 번에 처리하려고 시도하는 경우 시스템에 부하를 일으키고 성능 저하를 초래할 수 있기 때문에 이와 같은 방식을 통해 컨슈머의 부하를 줄임

 

메시지 수명 주기

  • 대기열의 생성부터 삭제 까지의 과정
  • 생산자는 메시지 A을 대기열로 전송하고 전송된 메시지 A는 Amazon SQS 서버에 중복 분산됨
  • 소비자는 메시지를 처리할 준비가 되면 대기열에서 메시지를 소비하고 메시지 A가 반환됨
  • 소비자는 대기열에서 메시지 A를 삭제
  • Amazon SQS는 최대 메시지 보존 기간 넘게 대기열에 유지된 메시지를 자동으로 삭제하며 기본 메시지 보존 기간은 4일

 

예시 문제

1. Amazon EC2 인스턴스 집합에서 애플리케이션을 실행한다. 이 애플리케이션은 Amazon SQS 대기열에서 데이터를 가져와 동시에 메시지를 처리한다. 메시지 볼륨은 가변적이며 트래픽이 자주 중단된다. 이 프로그램은 중단 없이 지속적으로 메시지를 처리해야 한다.

 

비용 효율성 측면에서 가장 적합한 옵션은 무엇인가?

 

1) 스팟 인스턴스만 사용하여 필요한 최대 용량을 처리한다.

 

2) 필요한 최대 용량을 처리하기 위해 독점적으로 예약 인스턴스를 사용한다.

 

3) 기준 용량으로 예약 인스턴스를 사용하고 추가 용량을 처리하기 위해 스팟 인스턴스를 사용한다.

 

4) 기준 용량으로 예약 인스턴스를 사용하고 추가 용량을 처리하기 위해 온디맨드 인스턴스를 사용한다.

 

정답 : 4

예약 인스턴스를 사용하면 온디맨드 인스턴스보다 비용을 더 아낄 수 있으며 그 이후 초과되는 용량은 사용한만큼만 지불하는 온디맨드 인스턴스를 이용하는 것이 비용 효율성 측면에서 제일 적합합니다.

 

2. 여러 Amazon EC2 인스턴스는 애플리케이션을 호스팅하는 데 사용된다. 프로그램은 Amazon SQS 대기열에서 메시지를 읽고 Amazon RDS 데이터베이스에 쓴 다음 대기열에서 제거한다. RDS 테이블에는 중복 항목이 포함되는 경우가 있지만, SQS 대기열에 중복 메시지는 없다.

 

솔루션 아키텍트는 메시지가 한 번만 처리되도록 어떻게 보장할 수 있는가?

 

1. ChangMessageVisibility API 호출을 사용하여 가시성 시간 초과를 늘린다.

 

2. AddPermission API 호출을 사용하여 적절한 대기 시간을 설정한다.

 

3. ReceiveMessage API 호출을 사용하여 적절한 대기 시간을 설정한다.

 

4. CreateQueue API 호출을 사용하여 새 대기열을 만든다.

 

정답 1

Amazon SQS 대기열에는 수신한 직후의 메시지가 저장되어 있으며 소비자(인스턴스)가 메시지를 처리하는 동안 다른 소비자(인스턴스)가 해당 메시지를 처리 할 수 없도록 차단하는 기간인 가시성 시간 제한이라는 것이 있습니다. 기본 가시성 제한 시간은 30초이지만 메시지를 처리하는 시간이 이 보다 긴 경우를 생각하여 늘리면 한 메시지를 여러 인스턴스가 동시에 처리하는 일은 발생하지 않을 것입니다. 즉 메시지가 한 번만 처리되도록 될 것입니다.

기본 가시성 제한 시간을 늘리기 위해서는 ChageMessageVisibility API를 호출하면 됩니다.

 

 

 

 

'AWS (Amazon Web Services)' 카테고리의 다른 글

Amazon Redshift  (0) 2023.07.04
Amazon API Gateway  (0) 2023.06.23
Amazon Kinesis Data Firehose  (0) 2023.06.17
Amazon ECS  (0) 2023.06.16
Amazon CloudFront  (0) 2023.06.06