✅ Amazon SQS 기본 아키텍처
- 분산 대기열
- Amazon SQS는 메시지를 SQS 서버에 중복 저장합니다.
- 메시지 수명 주기
- 생산자는 메시지 A를 대기열로 전송하고, 이 메시지는 Amazon SQS 서버에 중복 분산됩니다.
- 소비자는 메시지를 처리할 준비가 되면 대기열에서 메시지를 소비하고 메시지 A가 반환됩니다.
메시지 A는 처리되는 동안 대기열에 남아있고, 표시 제한 시간이 지속되는 동안 후속 수신 요청으로 반환되지 않습니다. - 소비자는 대기열에서 메시지 A를 삭제함으로써, 표시 제한 시간이 만료되면 이 메시지가 수신되어 다시 처리하지 못하도록 설정합니다.
✅ Amazon SQS 사용 시 이점
- 보안
- 대기열에 메시지를 보내고 받을 수 있는 사용자를 제한할 수 있습니다.
- 이는, 기본 SQS 관리형 서버 측 암호화를 사용하거나, 관리되는 사용자 지정 SSE 키를 사용하여
대기열에 있는 메시지를 보호하여 중요한 데이터를 전송하도록 선택할 수 있습니다.
- 내구성
- 메시지를 안전하게 보관하기 위해 SQS 메시지를 여러 서버에 저장헙나더,
- 안정성
- SQS 처리 중에는 메시지를 잠그므로, 여러 생성자가 동시에 메시지를 보내고, 여러 소비자가 메시지를 받아도 안전합니다.
✅ Amazon SQS 대기열 종류
표준 대기열
- 무제한 처리량
- 표준 대기열은 API 작업을 초당 거의 무제한의 API 호출 수를 지원합니다.
- 최소 한 번 전송
- 메시지가 최소 한번 이상 전달되지만, 경우에 따라 메시지 사본이 두개 이상 전달됩니다.
- 즉, 메시지를 수신하는 서비스에서 동일한 메시지를 수신해도 영향이 없을 때(멱등성 보장) 이용하거나,
수신을 받는 서비스에서 중복 처리에 대한 예외 처리를 해주면 좋을 것 같다는 생각이 듭니다.
- 최선의 순서 지정
- 메시지가 전송된 순서와 다른 순서로 전달되는 경우가 종종 있습니다.
- 하지만 최대한 전송된 순서와 동일하게 전달되도록 노력한다고 합니다.
결론적으로, 표준 대기열은 작업의 순서 < 작업의 처리량 일 때 사용하는 것이 좋은 것 같습니다.
FIFO 대기열
- 전달 순서를 보장하는 큐
- FIFO 대기열의 경우 표준 대기열 보다 초당 처리 건수가 뒤떨어집니다.
- 표준 대기열은 초당 TPS가 무제한인데 반해 FIFO 큐는 TPS가 비처리=300건 배치처리=3000건으로 제한되어 있습니다.
✅ Amazon SQS Console 설정 목록
- 표시 제한 시간
- 한 소비자(java에서는 리스너를 의미함)가 대기열에서 수신한 메시지가 다른 소비자에게 보이지 않게 되는 시간을 설정하는 것이다.
- 소비자가 표시 제한 시간이 만료되기 전까지 메시지를 처리 및 삭제 하지 않는다면 메시지가 다른 소비자에게 표시된다.
- 메시지를 한 번만 수신해야 할 경우, 소비자는 표시 제한 시간 내에 메시지를 삭제해야 한다.
- default 값은 30초입니다.
- 메시지 보존 기간
- Amazon SQS가 삭제 되지 않은 메시지를 보관하는 기간입니다.
- 해당 보존 기간을 초과하게 되면 대기열에 보관된 메시지를 자동으로 삭제하게 됩니다.
- default 보존 기간은 4일 입니다.
- 전송 지연
- 이번 작업에서 사용한 옵션으로, 큐에 메시지를 넣어주고 바로 폴링해가지 않고
설정한 지연 시간 후에 폴링 해가도록 해주는 기간입니다. - 즉, 소비자가 메시지를 처리하는데 추가 시간이 필요한 경우 대기열에 들어오는 각 새 메시지의 전송을 지연시킬 수 있습니다.
- 이번 작업에서 사용한 옵션으로, 큐에 메시지를 넣어주고 바로 폴링해가지 않고
- 메시지 수신 대기 시간
- 폴링이 메시지를 수신할 수 있을때까지 대기하는 최대 시간입니다.
- 최솟값은 0 ~ 최댓값은 20초 입니다.
- 긴 폴링
- 요청에 대해 사용할 수 있는 메시지가 없거나 잘못된 빈 응답을 제거하여 SQS 사용 비용을 줄이는데 도움을 줍니다.
- 즉, SQS가 대기열에서 메시지를 사용할 수 있을 때까지 대기시켜 빈 응답을 줄이게 됩니다.
- 사용 가능한 메시지가 있을 경우 대기 시간을 기다리지 않고 즉시 메시지를 반환하게 됩니다.
- 짧은 폴링
- 위의 긴 폴링과는 반대로 사용할 수 있는 메시지가 없더라도 계속 빈 응답을 반환하게 됩니다.
'배움 기록_실무 ✏️' 카테고리의 다른 글
서버리스 아키텍처 적용기 - 서버리스란 무엇일까 ? (0) | 2023.03.30 |
---|---|
정적 메서드(static method) (0) | 2022.10.17 |
static의 모든 것 (0) | 2022.10.10 |
AWS Database Migration Workshop (1) | 2022.05.25 |
구글 OAuth2 인증 방식 (0) | 2022.03.29 |