on
Simple Queue Service 소개 및 사용법(1/2)
Simple Queue Service 소개 및 사용법(1/2)
728x90
Simple Queue Service(SQS)란 ?
분산 시스템를 구성할때 시스템간 메세지를 주고 받을 수 있는 메세지 큐
SQS는 전송,수신,삭제 3가지 기능을 제공한다.
SQS의 기본적인 아키텍처
Producer가 메시지 전송을 하면 Queue가 수신한다.
수신된 메시지를 Consumer가 전달받아 처리한다.
Consumer에서 수신된 메시지를 처리완료하면 방금 수신받은 메시지를 삭제해달라는 요청을 날린다.
위와 같이 요청 받은 Server가 바로 성공 실패 여부를 알려줄 필요가 없을때 위와 같은 아키텍쳐로 서버를 구성할 수 있다.
SQS Queue
SQS서비스에는 2가지 종류의 Queue가 존재한다.
Standard Queue(표준 대기열)
장점
초당 무제한에 가까운 TPS를 지원한다. 메시지 유실 가능성이 있지만 SNS와 사용할 경우 메시지 유실 가능성은 없다.
단점
메세지의 순차성을 보장해 주지 않는다. 동시에 메시지를 읽을 경우 하나의 메시지를 중복으로 수신할 수 있다.
FIFO Queue(순차 대기열)
장점
메시지의 순차성을 보장해 준다. 메시지 중복수신 가능성이 없다.
단점
Standard Queue(표준 대기열) 보다 느리다. (초당 300개의 메시지 전송,수신,삭제) Standard Queue(표준 대기열) 보다 비싸다.
일반적으로 저렴한 가격과 높은 트래픽을 받을 수 있다는 장점때문에 Standard Queue(표준 대기열)을 많이 활용한다.
SQS Queue 옵션
표시 제한 시간
큐에 들어있는 메시지를 가져가면 최대 몇초동안 다른곳에 수신되지 않도록 안보이게 할건지에 대한 설정이다.
메시지 보존 기간
큐에 들어온 메시지를 언제까지 보관할 건지에 대한 설정이다.
보관할 건지에 대한 설정이다. 설정한 일자만큼만 보관하고, 기간이 지나면 메시지를 삭제한다.
전송지연
큐에 추가된 메시지가 얼마동안 다른곳에 전송되지 못하도록 할건지에 대한 설정이다.
최대 메시지 크기
전송할 수 있는 메시지의 최대 크기를 설정합니다.
메세지 수신 대기 시간
SQS에 수신메시지를 가져올 때 얼마동안 SQS 에 수신대기를 할지 결정하는 설정이다.
에 수신대기를 할지 결정하는 설정이다. 해당 설정은 java SDK AmazonSQS 클래스에서 런타임에도 설정 가능하다. (메시지 별 waitTime을 런타임에 변경가능)
DLQ란?
Queue를 생성하면 DLQ라는 전송실패에 대한 실패큐가 같이 생성된다.
메시지를 받아서 처리후 큐에 해당 메시지를 잘 처리했고 이 메시지는 삭제해 주세요라는 요청을 날려야 한다.
메세지를 가져간 흔적은 있는데 삭제에 대한 요청이 오지 않는다면, DLQ로 해당 메세지는 빠지게된다.
최대 수신 수
어플리케이션에서 최대 몇번 동안 수신가능하도록 할건지에 대한 설정
최대 몇번 동안 수신가능하도록 할건지에 대한 설정 예를들어 최대 수신수를 3으로 지정한다면, Worker에서 3번 메시지를 수신했는데 3번 전부 처리 실패하여 삭제요청을 안 날린 경우 해당 메시지는 DLQ에 저장된다.
SQS는 이러한 옵션으로 사용하기 쉽고 실시간으로 응답할 필요가 없는 작업들을 Queue에 넣어두고 처리 가능한 양만큼 꺼내서 처리하므로, 더 많은 트래픽을 받을 수 있는 비동기 모델을 완성 시킬 수 있다.
SQS와 MQ의 차이점
SQS는 말그대로 간단한 Queue 서비스이므로 다른 MQ에서 지원하는 message routing, fan-out, distribution lists를 지원하지 않는다.
전송하는 메시지의 양이 많다면 SQS 대신 다른 MQ 서비스를 사용하는 것이 바람직하다.
만약 복잡한 요구사항을 구현해야 한다면 SQS 대신 Amazon MQ를 사용하면 유용하다.
Amazon MQ는 AMQT나 MQTT처럼 표준화 된 여러 broadcast 프로토콜을 완벽히 지원하는 fully managed 서비스이다.
AWS 외부에 존재하는 메시지 브로커를 AWS로 마이그레이션 하는데 사용하기도 한다.
다음 편에서는 직접 구현해서 정리해보겠다.
728x90
from http://devbksheen.tistory.com/145 by ccl(A) rewrite - 2021-10-26 10:01:40