AWS — Difference between SQS and SNS

Ashish Patel
Awesome Cloud
Published in
4 min readMay 25, 2019

Comparisons: SQS vs SNS in AWS — Simple Notification Service and Simple Queue Service.

Awesome Cloud — SNS and SQS

TL;DR:

SQS and SNS are important components for scalable, large-scale, distributed, cloud-based applications:

SNS is a distributed publish-subscribe service.

SQS is distributed queuing service.

Amazon SNS (Simple Notification Service)

Awesome Cloud — SNS

Amazon SNS is a fast, flexible, fully managed push notification service that lets you send individual messages or to bulk messages to large numbers of recipients. Amazon SNS makes it simple and cost effective to send push notifications to mobile device users, email recipients or even send messages to other distributed services.

SNS is a distributed publish-subscribe system. Messages are pushed to subscribers as and when they are sent by publishers to SNS.

SNS supports several end points such as email, sms, http end point and SQS. If you want unknown number and type of subscribers to receive messages, you need SNS.

With Amazon SNS, you can send push notifications to Apple, Google, Fire OS, and Windows devices , as well as to Android devices in China with Baidu Cloud Push. You can use SNS to send SMS messages to mobile device users in the US or to email recipients worldwide.

Amazon SQS (Simple Queue Service)

Awesome Cloud — SQS

Amazon SQS is a fully managed message queuing service that enables you to decouple and scale microservices, distributed systems, and serverless applications.

SQS is distributed queuing system. Messages are not pushed to receivers. Receivers have to poll SQS to receive messages. Messages can be stored in SQS for short duration of time (max 14 days).

Messages can’t be received by multiple receivers at the same time. Any one receiver can receive a message, process and delete it. Other receivers do not receive the same message later. Polling inherently introduces some latency in message delivery in SQS unlike SNS where messages are immediately pushed to subscribers.

Key Differences: SQS vs SNS

Entity Type
SQS: Queue (similar to JMS, MSMQ).
SNS: Topic-Subscriber (Pub/Sub system).

Message consumption
SQS: Pull Mechanism — Consumers poll messages from SQS.
SNS: Push Mechanism — SNS pushes messages to consumers.

Persistence
SQS: Messages are persisted for some duration is no consumer available. The retention period value is from 1 minute to 14 days. The default is 4 days.
SNS: No persistence. Whichever consumer is present at the time of message arrival, gets the message and the message is deleted. If no consumers available then the message is lost.

In SQS message delivery is guaranteed but in SNS it is not.

Consumer Type
SQS: All the consumers are supposed to be identical and hence process the messages in exact same way.
SNS: All the consumers are (supposed to be) processing the messages in different ways.

Use Cases

Choose SNS if:

  • You would like to be able to publish and consume batches of messages.
  • You would like to allow same message to be processed in multiple ways.
  • Multiple subscribers are needed. Fan-out messages to a large number of subscribers.
  • You need alerting and monitoring related to applications logs, infrastructure, etc.

Choose SQS if:

  • You need a simple queue with no particular additional requirements.
  • Decoupling distributed systems and allowing parallel asynchronous processing.
  • Only one subscriber is needed.
  • You need your messages are received sequentially and without any loss, even if some parts fail or the network experiences disruptions.

We can design fanout pattern by using both SNS and SQS. In this pattern, a message published to an SNS topic is distributed to multiple SQS queues in parallel.

Summary

SQS is mainly used to decouple applications. SNS distributes several copies of a message to several subscribers.

--

--

Ashish Patel
Awesome Cloud

Cloud Architect • 4x AWS Certified • 6x Azure Certified • 1x Kubernetes Certified • MCP • .NET • Terraform • DevOps • Blogger [https://bit.ly/iamashishpatel]