배움 기록_실무 ✏️

AWS Simple Queue Service (SQS)

j_estory 2023. 2. 23. 18:46

✅   Amazon SQS 기본 아키텍처

  • 분산 대기열
    • Amazon SQS는 메시지를 SQS 서버에 중복 저장합니다.
  • 메시지 수명 주기
    • 생산자는 메시지 A를 대기열로 전송하고, 이 메시지는 Amazon SQS 서버에 중복 분산됩니다. 
    • 소비자는 메시지를 처리할 준비가 되면 대기열에서 메시지를 소비하고 메시지 A가 반환됩니다.
      메시지 A는 처리되는 동안 대기열에 남아있고, 표시 제한 시간이 지속되는 동안 후속 수신 요청으로 반환되지 않습니다.
    • 소비자는 대기열에서 메시지 A를 삭제함으로써, 표시 제한 시간이 만료되면 이 메시지가 수신되어 다시 처리하지 못하도록 설정합니다.

SQS 메시지 수명 주기

 

✅   Amazon SQS 사용 시 이점

  • 보안
    • 대기열에 메시지를 보내고 받을 수 있는 사용자를 제한할 수 있습니다.
    • 이는, 기본 SQS 관리형 서버 측 암호화를 사용하거나, 관리되는 사용자 지정 SSE 키를 사용하여
      대기열에 있는 메시지를 보호하여 중요한 데이터를 전송하도록 선택할 수 있습니다.
  • 내구성
    • 메시지를 안전하게 보관하기 위해 SQS 메시지를 여러 서버에 저장헙나더,
  • 안정성
    • SQS 처리 중에는 메시지를 잠그므로, 여러 생성자가 동시에 메시지를 보내고, 여러 소비자가 메시지를 받아도 안전합니다.

 

✅   Amazon SQS 대기열 종류

표준 대기열

  • 무제한 처리량
    • 표준 대기열은 API 작업을 초당 거의 무제한의 API 호출 수를 지원합니다.
  • 최소 한 번 전송
    • 메시지가 최소 한번 이상 전달되지만, 경우에 따라 메시지 사본이 두개 이상 전달됩니다.
    • 즉, 메시지를 수신하는 서비스에서 동일한 메시지를 수신해도 영향이 없을 때(멱등성 보장) 이용하거나,
      수신을 받는 서비스에서 중복 처리에 대한 예외 처리를 해주면 좋을 것 같다는 생각이 듭니다.
  • 최선의 순서 지정
    • 메시지가 전송된 순서와 다른 순서로 전달되는 경우가 종종 있습니다.
    • 하지만 최대한 전송된 순서와 동일하게 전달되도록 노력한다고 합니다.

결론적으로, 표준 대기열은 작업의 순서 < 작업의 처리량 일 때 사용하는 것이 좋은 것 같습니다. 

 

FIFO 대기열

  • 전달 순서를 보장하는 큐
  • FIFO 대기열의 경우 표준 대기열 보다 초당 처리 건수가 뒤떨어집니다.
    • 표준 대기열은 초당 TPS가 무제한인데 반해 FIFO 큐는 TPS가 비처리=300건 배치처리=3000건으로 제한되어 있습니다. 

 

✅   Amazon SQS Console 설정 목록

Amazon SQS 구성 옵션 Console

  1. 표시 제한 시간
    1. 한 소비자(java에서는 리스너를 의미함)가 대기열에서 수신한 메시지가 다른 소비자에게 보이지 않게 되는 시간을 설정하는 것이다.
    2. 소비자가 표시 제한 시간이 만료되기 전까지 메시지를 처리 및 삭제 하지 않는다면 메시지가 다른 소비자에게 표시된다.
    3. 메시지를 한 번만 수신해야 할 경우, 소비자는 표시 제한 시간 내에 메시지를 삭제해야 한다.
    4. default 값은 30초입니다.
  2. 메시지 보존 기간
    1. Amazon SQS가 삭제 되지 않은 메시지를 보관하는 기간입니다.
    2. 해당 보존 기간을 초과하게 되면 대기열에 보관된 메시지를 자동으로 삭제하게 됩니다.
    3. default 보존 기간은 4일 입니다.
  3. 전송 지연
    1. 이번 작업에서 사용한 옵션으로, 큐에 메시지를 넣어주고 바로 폴링해가지 않고
      설정한 지연 시간 후에 폴링 해가도록 해주는 기간입니다. 
    2. 즉, 소비자가 메시지를 처리하는데 추가 시간이 필요한 경우 대기열에 들어오는 각 새 메시지의 전송을 지연시킬 수 있습니다.
  4. 메시지 수신 대기 시간
    1. 폴링이 메시지를 수신할 수 있을때까지 대기하는 최대 시간입니다.
    2. 최솟값은 0 ~ 최댓값은 20초 입니다.
    3. 긴 폴링
      1. 요청에 대해 사용할 수 있는 메시지가 없거나 잘못된 빈 응답을 제거하여 SQS 사용 비용을 줄이는데 도움을 줍니다. 
      2. 즉, SQS가 대기열에서 메시지를 사용할 수 있을 때까지 대기시켜 빈 응답을 줄이게 됩니다.
      3. 사용 가능한 메시지가 있을 경우 대기 시간을 기다리지 않고 즉시 메시지를 반환하게 됩니다.
    4. 짧은 폴링
      1. 위의 긴 폴링과는 반대로 사용할 수 있는 메시지가 없더라도 계속 빈 응답을 반환하게 됩니다.