Summary:

  • AWS SNS and SQS serve fundamentally different messaging paradigms. SNS pushes messages to multiple subscribers simultaneously, while SQS stores messages for consumers to pull at their own pace.
  • FIFO variants of both services now support high-throughput modes with updated 2024-2025 quotas, including 30,000 messages per second per account for SNS FIFO topics and up to 700,000 batched messages per second for SQS FIFO queues.
  • Cost structures diverge significantly at scale, with SNS charges varying by endpoint type and topic type, and SQS pricing based on request volume and message retention.
  • Combining SNS and SQS in fan-out architectures delivers the best of both worlds with broadcast capability and durable, decoupled consumption.

When your distributed system needs to move millions of messages between microservices, the choice between AWS SNS and SQS can determine whether your architecture scales gracefully or collapses under load. These two services sit at the heart of event-driven design on AWS, yet engineers frequently conflate their purposes or underestimate the nuanced trade-offs between them. Understanding AWS SNS vs SQS differences directly impacts your system’s reliability, cost profile, and operational complexity. This guide dissects both services with the technical depth required for production-grade decisions, incorporating the latest 2024-2025 quota updates and architectural patterns that separate junior implementations from staff-level designs.

The following diagram illustrates the fundamental architectural difference between push-based and pull-based messaging models.

sns_sqs_push_pull_comparison
SNS pushes to subscribers while SQS requires consumers to poll for messages

What are Amazon SNS and Amazon SQS

Amazon Simple Notification Service (SNS) operates as a fully managed publish-subscribe messaging service that pushes messages to multiple subscribers simultaneously. When a publisher sends a message to an SNS topic, the service immediately delivers that message to all subscribed endpoints. These endpoints can be AWS Lambda functions, SQS queues, HTTP webhooks, email addresses, or mobile push notifications. This push-based model excels when you need real-time fan-out to multiple consumers without the publisher needing to know anything about downstream systems.

Amazon Simple Queue Service (SQS) implements a pull-based message queuing model where producers send messages to a queue and consumers retrieve them at their own pace. Messages persist in the queue until a consumer explicitly deletes them after successful processing. This provides natural buffering against traffic spikes and consumer failures. SQS decouples producers from consumers temporally, meaning your upstream services can continue operating even when downstream processors are offline or overwhelmed.

Real-world context: Netflix uses SNS to broadcast encoding completion events to dozens of downstream services simultaneously, while individual processing pipelines use SQS to buffer work and handle variable processing times without losing messages.

The core architectural distinction comes down to delivery semantics. SNS implements a fire-and-forget push model where message delivery happens immediately and the service does not retain messages after delivery attempts complete. SQS implements a store-and-forward model where messages remain available for up to 14 days, allowing consumers to process at variable rates. This fundamental difference shapes every downstream decision about reliability, ordering, and failure handling.

With these foundational concepts established, examining the specific modes each service offers reveals deeper technical trade-offs.

Standard versus FIFO modes for SNS and SQS

Both SNS and SQS offer two operational modes that dramatically affect throughput, ordering guarantees, and deduplication behavior. Choosing the wrong mode can either leave you with insufficient throughput or unnecessary complexity and cost. The standard mode prioritizes maximum throughput with best-effort ordering, while FIFO mode guarantees strict message ordering and exactly-once processing at the cost of lower baseline throughput.

Standard mode characteristics

Standard SNS topics and SQS queues optimize for maximum throughput with nearly unlimited scalability. AWS does not impose hard limits on messages per second for standard resources, making them suitable for high-volume workloads where occasional duplicate delivery or out-of-order processing is acceptable. Standard SQS queues guarantee at-least-once delivery, meaning your consumers must be idempotent to handle the rare duplicate message.

Key characteristics of standard mode include:

  • Throughput: Virtually unlimited for both SNS topics and SQS queues
  • Ordering: Best-effort only, and messages may arrive out of sequence
  • Delivery: At-least-once for SQS, and SNS retries based on endpoint type
  • Deduplication: Not provided, so applications must handle duplicates

Pro tip: Design your consumers with idempotency keys from day one, even if you start with FIFO queues. This practice protects you during mode migrations and handles edge cases where exactly-once guarantees have documented exceptions.

FIFO mode and high-throughput configurations

FIFO (First-In-First-Out) variants guarantee strict message ordering within message groups and provide exactly-once processing through content-based or explicit deduplication. AWS significantly enhanced FIFO capabilities in 2024-2025, introducing high-throughput modes that close the performance gap with standard resources. In January 2025, AWS introduced high-throughput mode for SNS FIFO topics, increasing the limit up to 30,000 messages per second (MPS) per account in supported regions (compared to the standard 3,000 MPS topic limit).

SQS FIFO queues received equally significant updates. The in-flight message limit, which previously capped at 20,000 messages, now supports up to 120,000 in-flight messages with high-throughput FIFO queues. Furthermore, SQS FIFO high-throughput mode now supports up to 70,000 API transactions per second (translating to a staggering 700,000 messages per second with batching) in top-tier regions like US-East-1. This increase addresses a critical bottleneck that previously forced architects to shard across multiple queues for high-volume ordered workloads. Message group IDs remain central to FIFO behavior, as ordering guarantees apply only within a single message group.

The following diagram shows how message group IDs partition ordering guarantees within FIFO resources.

fifo_message_group_partitioning
Message group IDs create independent ordering domains within FIFO resources

Watch out: Using a single message group ID for all messages serializes your entire workload through one ordering lane, negating high-throughput benefits. Design message group IDs around natural ordering boundaries like customer IDs or order IDs.

Understanding these mode differences sets the stage for examining the specific quotas and limits that govern production deployments.

Current quotas and technical limits

Production architectures require precise knowledge of service limits to avoid runtime failures and capacity planning errors. AWS updated several critical quotas in 2024-2025, and many competitors’ guides still reference outdated figures. The following table consolidates current limits for both services across standard and FIFO configurations.

ResourceStandard modeFIFO mode (default)FIFO high-throughput
SNS publish rateSoft limit varies by region300 MPS per message group (3,000/topic)30,000 MPS per account
SNS subscriptions per topic12,500,000100100
SQS messages per secondUnlimited (soft)300 MPS per queue70,000 TPS (up to 700k batched)
SQS in-flight messages120,00020,000120,000
SQS message retention1 minute to 14 days1 minute to 14 days1 minute to 14 days
SQS visibility timeout0 seconds to 12 hours0 seconds to 12 hours0 seconds to 12 hours
Message size256 KB (both services)256 KB256 KB

Regional variations exist for soft limits, and AWS allows quota increase requests through Service Quotas for most parameters. The in-flight message limit deserves particular attention for SQS consumers. This limit counts messages that have been received by a consumer but not yet deleted. Slow consumers or long visibility timeouts can exhaust this quota even at moderate message rates.

Cost comparison at scale

Pricing models for SNS and SQS differ substantially, and the cost implications compound at high message volumes. SNS charges based on the number of publishes and the type of delivery endpoint, while SQS charges per request regardless of message destination. Understanding these models prevents budget surprises when scaling from development to production workloads.

SNS pricing structure

SNS pricing varies dramatically by endpoint type and topic type. Publishing to a Standard topic costs $0.50 per million requests, while publishing to a FIFO topic costs $0.30 per million requests plus $0.017 per GB of payload data. Delivery charges depend on where messages go. Delivering to SQS queues or Lambda functions incurs no additional charge beyond the publish cost. However, SMS delivery ranges from $0.00645 to $0.75 per message depending on destination country, and HTTP/S endpoint deliveries cost $0.60 per million.

Consider a workload publishing 100 million messages monthly with fan-out to three SQS queues:

  1. Publish requests: 100M × $0.50/M = $50
  2. SQS deliveries: Free (no additional SNS charge)
  3. Total SNS cost: $50

The same workload fanning out to three HTTP endpoints instead:

  1. Publish requests: 100M × $0.50/M = $50
  2. HTTP deliveries: 300M × $0.60/M = $180
  3. Total SNS cost: $230

SQS pricing structure

After the first 1 million free requests each month, SQS charges $0.40 per million requests for standard queues and $0.50 per million for FIFO queues. Each API call counts as a request, including SendMessage, ReceiveMessage, and DeleteMessage. A single message lifecycle typically involves at least three requests: one send, one receive, and one delete. Batch operations reduce costs by allowing up to 10 messages per request.

Workload scenarioSNS costSQS costCombined (fan-out)
100M messages, single consumer$50 (publish only)$120 (3 requests each)N/A
100M messages, 3 SQS subscribers$50$360 (3 queues × 3 requests)$410
100M messages, FIFO single consumer$30 (+ data payload)$150N/A
1B messages, 5 SQS subscribers$500$6,000$6,500

Pro tip: Use long polling with SQS (wait time up to 20 seconds) to reduce empty ReceiveMessage responses. This optimization can cut request costs by 50-80% for queues with variable message rates.

Cost analysis naturally leads to architectural decisions about when and how to combine these services for optimal results.

Architectural patterns and best practices

Production systems rarely use SNS or SQS in isolation. The most resilient architectures combine both services to leverage push-based fan-out with pull-based durability. These patterns address common challenges around reliability, ordering, and failure handling that single-service approaches cannot solve elegantly.

SNS to SQS fan-out pattern

The fan-out pattern subscribes multiple SQS queues to a single SNS topic, enabling one publish operation to reach multiple independent consumer groups. Each SQS queue buffers messages independently, allowing consumers to process at different rates without affecting each other. This pattern is foundational for event-driven architectures where multiple services need to react to the same business events.

The following diagram illustrates a production fan-out architecture with dead-letter queue integration.

sns_sqs_fanout_dlq_architecture
Fan-out pattern with dead-letter queues for comprehensive failure handling

Dead-letter queue configuration

Dead-letter queues (DLQs) capture messages that fail processing after a configured number of attempts. For SQS, the redrive policy specifies the maximum receive count before messages move to the DLQ. SNS supports DLQs for failed deliveries to endpoints, capturing messages that exhaust retry policies. Proper DLQ configuration prevents message loss while isolating poison messages that would otherwise block queue processing.

Essential DLQ configuration parameters include:

  • maxReceiveCount: Number of processing attempts before redrive (typically 3-5)
  • DLQ retention: Set to maximum 14 days to allow investigation time
  • Alarms: CloudWatch alarms on DLQ depth for operational visibility
  • Redrive allow policy: Restrict which source queues can use the DLQ

Watch out: A DLQ must be the same type as its source queue. Standard queues require standard DLQs, and FIFO queues require FIFO DLQs. Mismatched configurations will fail silently during setup.

Visibility timeout tuning

Visibility timeout determines how long a message remains invisible to other consumers after being received. Setting this value too low causes duplicate processing when consumers take longer than expected. Setting it too high delays reprocessing when consumers fail. The optimal value should exceed your 99th percentile processing time with a safety margin.

For Lambda consumers, AWS automatically extends the visibility timeout during function execution. For EC2 or container-based consumers, implement heartbeat patterns that call ChangeMessageVisibility periodically during long-running processing. This approach prevents timeout expiration while avoiding excessively long default timeouts.

Real-world context: Stripe’s payment processing pipeline uses visibility timeouts of 5 minutes with heartbeat extensions, allowing complex payment orchestrations to complete while ensuring failed transactions retry within acceptable windows.

Decision framework for SNS versus SQS

Selecting between SNS and SQS, or combining them, depends on your specific requirements around delivery semantics, consumer patterns, and operational constraints. The following framework provides concrete guidance based on common scenarios.

Choose SNS when your architecture requires:

  • Broadcasting events to multiple heterogeneous subscribers
  • Real-time push delivery to HTTP endpoints or mobile devices
  • Integration with services that cannot poll (email, SMS)
  • Minimal latency between publish and delivery

Choose SQS when your architecture requires:

  • Buffering between producers and consumers with different throughput rates
  • Guaranteed message persistence during consumer outages
  • Controlled consumption rate with backpressure handling
  • Long-running processing with visibility timeout management

Combine SNS and SQS when you need both fan-out capability and durable consumption. This combination is the default recommendation for most event-driven architectures because it provides maximum flexibility without sacrificing reliability. The AWS documentation on SNS-SQS integration provides additional implementation details.

Conclusion

The distinction between AWS SNS and SQS reflects a fundamental architectural choice between push-based broadcasting and pull-based queuing. SNS excels at real-time fan-out to multiple subscribers with minimal latency, while SQS provides durable message storage with consumer-controlled processing rates. The 2024-2025 updates to FIFO high-throughput modes have significantly expanded the viable use cases for ordered messaging. SNS FIFO topics now support 30,000 messages per second per account, and SQS FIFO queues handle up to 70,000 API operations per second alongside 120,000 in-flight messages.

Cost optimization at scale requires understanding that SNS charges vary by endpoint and topic type, while SQS charges accumulate per API request. The fan-out pattern combining both services remains the gold standard for event-driven architectures, providing broadcast capability with durable, independent consumption. As serverless and event-driven patterns continue dominating cloud architecture, mastery of these messaging primitives becomes essential for engineers designing systems that scale reliably under production load.