AWS SQS

GwanMtCat·2023년 10월 10일
0

개념

Amazon Simple Queue Service(Amazon SQS)는
마이크로서비스, 분산 시스템 및 서버리스 어플리케이션을 분리, 확장을 위한 완전 관리형 메시지 대기열 서비스이다.


Queue 종류

  • 표준대기열

    • 무제한 처리량 : 거의 무제한의 초당 트랜잭션(TPS)을 지원
    • 최소 한번 전송 : at least once delivery을 보장, 경우에 따라 두개 이상 전달 될 가능성이 있다.
    • 최선의 노력 순서 : 가끔 메시지가 전송된 순서와 다르게 전달될 수 있다.
  • FIFO 대기열
    • 높은 처리량 : 초당 최대 300개의 메시지(초당 300개의 전송, 수신, 삭제 작업)를 지원하고 작업당 최대 10개 메시지를 일괄 처리하는 경우에는 초당 3000개 메시지까지 지원할 수 있다.
    • 정확히 한번 처리: Exactly Once을 보장, 메시지가 한 번 전달되고 소비자가 이를 처리 및 삭제할 때까지 유지된다. 중복 메시지는 대기열에 올라가지 않는다.
    • 선입선출 전달: 메시지가 전송되고, 수신되는 순서가 엄격하게 지켜진다.

기능

  • 무제한 큐 및 메시지

    • 메시지 수가 무제한인 무제한 Amazon SQS 큐를 리전에 생성한다.
  • 페이로드 크기

    • 메시지 페이로드는 형식과 관계없이 최대 256KB의 텍스트를 포함할 수 있으나, 페이로드 64KB 청크당 1개의 요청으로 청구된다. (즉 4개 요청)
  • 배치

    • 한 번에 최대 10개 또는 256KB 메시지를 배치로 전송, 수신 또는 삭제할 수 있다.
    • 배치 요금은 단일 메시지와 같으므로 배치를 사용하면 SQS 비용을 좀 더 절약할 수 있다.
  • 긴 폴링

    • 관계없는 폴링을 줄여, 가능한 한 빨리 새 메시지를 받으면서 비용을 최소화한다. 큐가 비어있는 경우, 긴 폴링 요청은 다음 메시지가 도착할 때 까지 최대 20초를 대기한다.
  • 메시지 최대 14일 동안 보관하여 큐에 유지한다.

  • 메시지를 동시에 보내고 읽는다.

  • 메시지 잠금

    • 메시지가 수신되면 처리되는 동안 잠금 상태가 된다. 다른 컴퓨터에서 동시에 메시지를 처리하지 못하도록 하기 위함으로, 메시지 처리에 실패하면 잠금이 해제되면서 메시지가 다시 처리 가능한 상태로 바뀐다.
  • 큐 공유

    • 개발자는 Amazon SQS 큐를 익명으로 혹은 특정 AWS 계정과 안전하게 공유할 수 있다. IP 주소와 특정 시간으로 대기열 공유를 제한할 수도 있다.
  • 서버 측 암호화(SSE)

    • AWS Key Management Service(AWS KMS)에서 관리하는 키를 사용하여, Amazon SQS 대기열의 메시지 컨텐츠를 보호할 수 있다. 메시지는 암호화된 형태로 저장되고, 권한이 있는 사용자에게 전송할 때에만 메시지를 복호화한다.
  • 배달 못한 편지 큐(Dead Letter Queue)

    • 소비자가 성공적으로 처리하지 못한 메시지를 Dead Letter Queue를 사용하여 처리한다. 메시지에 대한 최대 수신 개수가 초과하면 해당 메시지는 원래 대기열에 연결된 Dead Letter Queue로 이동되고 메시지 전달이 중단된 이유를 분석할 수 있다.
  • 다른 AWS 인프라와 함꼐 사용 가능

    • RDS, DynamoDB, EC2, ECS, Lambda, S3 등 함께 사용하여 애플리케이션의 안정성과 확장성을 향상 시킬 수 있다.

메시지 생명주기

  1. 메시지 송신부(producer)가 SQS에 메시지 A를 보냅니다.

  2. SQS는 메시지A를 사본을 만들어 여러 곳에 안전하게 보관합니다. (유실 방지)

  3. 수신부(consumer)가 SQS에서 메시지 A를 처리하고자 가져갑니다. (inflight 상태)

  4. SQS입장에서 수신부가 메시지A를 가져갔기 때문에, 큐에 메시지가 남아있기는 하지만, 다른 컨슈머가 메시지 A를 (또) 가져가지 않도록 일정시간동안(visibility timeout) 수신요청에 드러나지 않습니다.

  5. 수신부(consumer)가 메시지를 정상 처리 완료했다면, 직접 SQS에 메시지A를 삭제하도록 요청합니다. (완료)

  6. 만약 어떤 이유로 수신부(consumer)가 메시지를 삭제하지 않는다면, 일정 시간이 지나면, 메시지 A가 다시 수신 요청에 드러납니다. (재처리 가능)


요금?

선결제 비용이 없고, 매월 첫 백만 건의 요청은 무료이다.


사용에 관한 글은 채널톡의 개발 블로그를 참조하면 도움이 된다.
https://channel.io/ko/blog/tech-backend-aws-sqs-introduction
https://bebong.tistory.com/entry/SQS-with-Spring

0개의 댓글