Amazon SNS와 Amazon SQS의 차이점은 무엇입니까?


답변:


624

SNS 는 분산 발행-구독 시스템입니다. 메시지는 게시자가 SNS로 보낼 때와 같이 가입자에게 푸시 됩니다.

SQS 는 분산 큐잉 시스템입니다. 메시지가 수신자에게 푸시되지 않습니다. 수신자는 SQS 에서 메시지 를 폴링하거나 풀해야 합니다 . 여러 수신자가 동시에 메시지를 수신 할 수 없습니다. 하나의 수신자가 메시지를 수신하여 처리하고 삭제할 수 있습니다. 다른 수신자는 나중에 동일한 메시지를받지 않습니다. 폴링은 메시지가 즉시 가입자에게 푸시되는 SNS와 달리 SQS에서 메시지 배달에 약간의 대기 시간을 제공합니다. SNS는 이메일, SMS, http 엔드 포인트 및 SQS와 같은 여러 엔드 포인트를 지원합니다. 알 수없는 수와 유형의 가입자가 메시지를 수신하도록하려면 SNS가 필요합니다.

SNS와 SQS를 항상 연결할 필요는 없습니다. SNS가 SQS와 별도로 이메일, SMS 또는 http 엔드 포인트로 메시지를 보내도록 할 수 있습니다. SNS와 SQS를 결합하면 이점이 있습니다. 외부 서비스가 호스트에 연결하는 것을 원하지 않을 수 있습니다 (방화벽은 외부에서 호스트로 들어오는 모든 연결을 차단할 수 있음). 대량의 메시지로 인해 엔드 포인트가 종료 될 수 있습니다. 전자 메일 및 SMS는 메시지 처리를 빠르게 선택하지 않을 수 있습니다. SNS와 SQS를 결합하면 원하는 속도로 메시지를받을 수 있습니다. 클라이언트가 오프라인 상태이고 네트워크 및 호스트 장애에 견딜 수 있습니다. 당신은 또한 보장 된 배달을 달성합니다. http 엔드 포인트 또는 이메일 또는 SMS로 메시지를 보내도록 SNS를 구성하면 메시지를 여러 번 보내지 않으면 메시지가 삭제 될 수 있습니다.

SQS는 주로 응용 프로그램을 분리하거나 응용 프로그램을 통합하는 데 사용됩니다. 메시지는 짧은 시간 (최대 14 일) 동안 SQS에 저장 될 수 있습니다. SNS는 여러 메시지 사본을 여러 가입자에게 배포합니다. 예를 들어, 응용 프로그램에서 생성 된 데이터를 여러 스토리지 시스템에 복제한다고 가정 해 보겠습니다. SNS를 사용하여이 데이터를 여러 가입자에게 보낼 수 있으며, 각 가입자는 서로 다른 스토리지 시스템 (s3, 호스트의 하드 디스크, 데이터베이스 등)으로 메시지를 복제합니다.


3
따라서 기본적으로 푸시 알림 메시지와 같은 것을 구현하려면 SNS 및 SQS를 사용하는 것이 좋습니다. 그러면 사용자가 대기열에서 검색 할 때까지 sns를 사용한 푸시가 대기됩니다. 사용자 당 대기열을 만들 수 있습니까?
Nick Ginanto

2
네. SNS에 대해 원하는만큼 가입자를 가질 수 있습니다. 여러 대기열로 알림을 보낼 수 있습니다.
Srikanth

죄송합니다.이 질문이 오래되었지만 SQS가 오프라인 메시지를 알고 저장하는지 궁금합니다. APNS는 오프라인 메시지를 저장하지 않기 때문에 최신 메시지 만 저장합니다. IOS 장치가 오프라인 일 때를 알고 오프라인 메시지를 바로 저장 하는가? 기기가 다시 온라인 상태가되면 나중에 보내시겠습니까?
John

2
@NickGinanto 사용자 당 큐는 아마도 당신이 원하는 것이 아닐 것입니다. 각 서비스마다 하나의 대기열을 원하고 사용자 별 메시지를 처리 ​​할 수 ​​있습니다. 이 도표가 도움이 될 수 있습니다 : aws.amazon.com/blogs/aws/…
Trenton

2
2018 년 중반 현재 SQS는 람다를 트리거 할 수 있으므로이 경우 pubsub와 더 유사합니다.
cyberwombat

238

다음은 두 가지를 비교 한 것입니다.

엔터티 유형

  • SQS : 대기열 (JMS와 유사)
  • SNS : 주제 (Pub / Sub 시스템)

메시지 소비

  • SQS : 풀 메커니즘-소비자가 SQS에서 메시지를 폴링 및 풀
  • SNS : 푸시 메커니즘-SNS가 메시지를 소비자에게 푸시

사용 사례

  • SQS : 2 개의 애플리케이션을 분리하고 병렬 비동기 처리 허용
  • SNS : 팬 아웃-여러 방법으로 동일한 메시지 처리

고집

  • SQS : 사용 가능한 소비자가없는 경우 메시지는 일정 기간 동안 구성 가능합니다.
  • SNS : 지속성이 없습니다. 메시지 도착시 존재하는 소비자는 메시지를 받고 메시지를 삭제합니다. 사용 가능한 소비자가 없으면 메시지가 손실됩니다.

소비자 유형

  • SQS : 모든 소비자는 동일해야하므로 메시지를 정확히 동일한 방식으로 처리합니다.
  • SNS : 소비자가 다른 방식으로 메시지를 처리 ​​할 수 ​​있음

샘플 애플리케이션

  • SQS : 작업 프레임 워크 : 작업이 SQS에 제출되고 다른 쪽 끝에있는 소비자는 작업을 비동기 적으로 처리 할 수 ​​있습니다. 작업 빈도가 증가하면 처리량을 높이기 위해 소비자 수를 간단히 늘릴 수 있습니다.
  • SNS : 이미지 처리. 누군가가 이미지를 S3에 업로드하면 해당 이미지를 워터 마크하고 축소판을 만들고 감사 이메일을 보냅니다. 이 경우 S3는 3 명의 소비자가 듣고있는 SNS 주제에 알림을 게시 할 수 있습니다. 첫 번째는 이미지를 워터 마크하고, 두 번째는 축소판을 만들고 세 번째는 감사 이메일을 보냅니다. 모두 동일한 메시지 (이미지 URL)를 수신하고 동시에 처리합니다.

1
사용 가능한 소비자가 없으면 재시도 메커니즘이 있으며 기본값은 10 회 재 시도입니다.
Arpit Solanki

좋은 자세한 게시물. 소비자마다 다른 메시지가 있습니다. 어떻게해야합니까? SNS를 사용하고 다른 주제를 정의하거나 SQS를 사용하고 다른 대기열을 정의합니까? 토픽 / 큐에는 하나 이상의 소비자가있을 수 있습니다.
Andy Dufresne 14:07에

귀하의 요구 사항에 귀하의 tooic / queue에 둘 이상의 소비자가 있어야한다고 동일한 메시지를 여러 소비자에게 브로드 캐스트해야한다고 가정합니다.이 가정이 맞다면 SNS를 사용하는 것이 유일한 옵션입니다. 당신
Arafat Nalkhande

"SQS : 모든 소비자가 동일해야하므로 메시지를 정확히 같은 방식으로 처리해야합니다"라고 생각하지 않습니다. 저는 두 개의 서로 다른 AWS 서비스가 SQS 대기열에서 선택하여 자체 방식으로 메시지를 처리하는 SQS를 사용했습니다 (다른 서비스의 다른 애플리케이션 로직). 뭔가 빠졌습니까?
nad

@ nad 귀하의 유스 케이스를 이해해야하지만 2 명의 SQS 소비자가 동일하지 않은 방식으로 메시지를 처리한다는 것은 의미가 없습니다. SNS
Arafat Nalkhande

31

AWS Doc에서 :

Amazon SNS를 통해 애플리케이션은 "푸시"메커니즘을 통해 시간이 중요한 메시지를 여러 가입자에게 보낼 수 있으므로 업데이트를 정기적으로 확인하거나 "폴링"할 필요가 없습니다.

Amazon SQS는 분산 애플리케이션이 폴링 모델을 통해 메시지를 교환하기 위해 사용하는 메시지 대기열 서비스이며, 각 구성 요소를 동시에 사용할 필요없이 전송 및 수신 구성 요소를 분리하는 데 사용할 수 있습니다.

http://docs.aws.amazon.com/sns/latest/dg/SendMessageToSQS.html


30

이 스레드의 답변은 약간 구식이므로 2 센트를 추가하기로 결정했습니다.

SNS 를 여러 가입자를 가질 수있는 전통적인 주제로 볼 수 있습니다 . 예를 들어 Lambda 및 SQS를 포함하여 하나의 지정된 SNS 주제에 대해 이기종 가입자를 가질 수 있습니다. SNS를 사용하여 SMS 메시지 나 이메일을 즉시 보낼 수도 있습니다. SNS에서 고려해야 할 사항은 한 번에 하나의 메시지 (알림) 만 수신되므로 일괄 처리를 활용할 수 없습니다.

반면에 SQS 는 메시지를 저장하고 한 소비자를 구독하는 대기열에 불과합니다 (예, 하나의 SQS 대기열에 N 소비자를 가질 수는 있지만 모든 소비자를 고려하면 관리가 매우 어려워지고 매우 어려워집니다) SNS가 N SQS 대기열에 알림을 푸시하고 모든 대기열에 하나의 가입자 만있는 경우) 이러한 메시지를 처리하기 위해 SQS와 결합 된 SNS를 사용하면 메시지를 한 번 이상 읽어야합니다. 2018 년 6 월 28 일부터 AWS는 SQS를위한 Lambda 트리거를 지원 하므로 폴링 할 필요가 없습니다.더 이상 메시지. 또한 장애 발생시 메시지를 보내도록 소스 SQS 대기열에서 DLQ를 구성 할 수 있습니다. 성공하면 메시지가 자동으로 삭제되므로 (이것은 또 하나의 큰 개선입니다.) 수동으로 삭제하는 것을 잊어 버린 경우 이미 처리 된 메시지를 다시 읽지 않아도됩니다. Lambda Retry Behavior를 살펴보십시오.작동 방식을 더 잘 이해합니다. SQS를 사용하면 얻을 수있는 큰 이점 중 하나는 배치 처리가 가능하다는 것입니다. 각 배치에는 최대 10 개의 메시지가 포함될 수 있으므로 100 개의 메시지가 SQS 대기열에 한 번에 도착하면 Lambda의 기본 자동 스케일링 동작을 고려하여 10 개의 Lambda 함수가 가동되고이 100 개의 메시지를 처리합니다 ( 실제로 이것은 행복한 경로이며, Lambda 함수가 더 많으면 배치에서 10 개 미만의 메시지를 읽을 수 있지만 아이디어는 얻습니다.) 그러나 동일한 100 개의 메시지를 SNS에 게시 한 경우 100 개의 Lambda 함수가 작동하여 비용이 증가하고 Lambda 동시성을 사용하지 않게됩니다. 그러나 여전히 EC2 인스턴스와 같은 기존 서버를 실행중인 경우에도 메시지를 폴링하고 수동으로 관리해야합니다.

메시지 전달 순서를 보장하는 FIFO SQS 대기열 도 있습니다 . 이는 Lambda에서 지원되는 트리거가 아니므로이 유형의 대기열을 선택할 때 메시지를 수동으로 삭제해야 할뿐 아니라 폴링이 여전히 필요하다는 점을 명심하십시오.

사용 사례에 겹치는 부분이 있지만 SQS와 SNS에는 각각 고유 한 관심사가 있습니다.

다음과 같은 경우 SNS를 사용하십시오 .

  • 여러 가입자가 필요합니다
  • 상자 밖으로 SMS / 이메일 보내기가 편리합니다

다음과 같은 경우 SQS를 사용하십시오 .

  • 한 명의 가입자 만 필요
  • 배치는 중요합니다

29

AWS SNS 는 구독자가 주제를 구독 할 수 있고 게시자가 해당 주제를 게시 할 때마다 메시지를 수신하는 게시자 구독자 네트워크입니다.

AWS SQS 는 대기열에 메시지를 저장하는 대기열 서비스입니다. SQS는 SQS를 폴링하고 SQS에서 메시지를 가져 오기 위해 외부 서비스 (lambda, EC2 등)가 필요한 메시지를 전달할 수 없습니다.

여러 가지 이유로 SNS와 SQS 를 함께 사용할 수 있습니다.

  1. 폴링을 통한 나중에 사용하기 위해 일부는 메시지를 즉시 전달해야하는 경우도 있고, 일부는 메시지를 지속해야하는 경우도 있습니다. 이 링크를 참조하십시오 .

  2. " 팬 아웃 패턴 " 메시지의 비동기 처리를위한 것입니다. 메시지가 SNS에 게시되면 여러 SQS 대기열에 동시에 배포 할 수 있습니다. 이미지를 게시 할 때 응용 프로그램에서 축소판을 병렬로로드 할 때 유용합니다. 이 링크를 참조하십시오 .

  3. 영구 저장 장치 . 메시지를 처리 ​​할 서비스가 신뢰할 수없는 경우 이와 같은 경우 SNS가 알림을 서비스에 푸시하고 해당 서비스를 사용할 수 없으면 알림이 손실됩니다. 따라서 SQS를 영구 저장소로 사용한 다음 나중에 처리 할 수 ​​있습니다.


4

간단히 말해서, SNS-푸시 메커니즘을 사용하여 풀링이 필요없는 메시지를 가입자에게 보냅니다. SQS-분산 응용 프로그램이 폴링 모델을 통해 메시지를 교환하기 위해 사용하는 메시지 큐 서비스이며 송수신 구성 요소를 분리하는 데 사용할 수 있습니다.

일반적인 패턴은 SNS를 사용하여 메시지를 Amazon SQS 대기열에 게시하여 하나 이상의 시스템 구성 요소에 비동기 적으로 메시지를 안정적으로 전송하는 것입니다. https://aws.amazon.com/sns/faqs/ 에서 참조


SQS는 메시지를 팬 아웃하지 않기 때문에 많은 시스템에 메시지를 보낼 수 없습니다 . 예, 많은 폴러가 메시지를 가져올 수 있지만 소비자가 메시지를 삭제하면 다른 가입자가 동일한 메시지를 다시 사용할 수 없습니다. 팬 아웃 패턴을 얻으려면 SQS보다 SNS가 선호됩니다. 또한 visibilityTimeout이 값을 설정하면 다른 시스템에서 메시지를 처리 ​​한 후 다른 시스템에서 메시지를 사용할 수 없습니다.
Thales Minussi

일반적인 패턴은 SNS를 사용하여 메시지를 Amazon SQS 대기열에 게시하여 하나 이상의 시스템 구성 요소에 비동기 적으로 메시지를 안정적으로 전송하는 것입니다. 에서 참조 aws.amazon.com/sns/faqs
Krunal Barot

그것이 당신이 의미 한 것이라면 (SNS-> 여러 SQS 대기열) 답변을 편집하십시오. 행복하게 내 공감을 제거 할 것입니다. 당신이 그것을 넣는 방식은 SQS가 펼칠 수있는 것처럼 들립니다.
Thales Minussi

1
예 .. 혼란이 있었던 곳입니다. 나는 그것을 편집했습니다 .. 감사합니다 :)
Krunal Barot
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.