Открыть сервис

Amazon SNS

Amazon Simple Notification Service (Amazon SNS) — это полностью управляемый веб-сервис облачной платформы Amazon Web Services (AWS), предназначенный для отправки уведомлений и сообщений по различным каналам связи (протоколам) в архитектуре распределённых систем. Сервис реализует шаблон проектирования «издатель-подписчик» (pub/sub) и позволяет создавать высокомасштабируемые, отказоустойчивые системы обмена сообщениями без необходимости управлять собственной инфраструктурой.

История

Amazon SNS был запущен в апреле 2010 года как один из первых сервисов AWS для обмена сообщениями. Первоначально он поддерживал только отправку уведомлений по электронной почте, HTTP/HTTPS и протоколу Amazon Simple Queue Service (SQS). В последующие годы функциональность значительно расширилась: была добавлена поддержка push-уведомлений для мобильных платформ (Apple Push Notification Service, Google Cloud Messaging, позже Firebase Cloud Messaging), SMS-сообщений, а также интеграция с другими сервисами AWS, такими как AWS Lambda, Amazon Kinesis и AWS Chatbot.

В 2021 году была представлена поддержка FIFO (First-In-First-Out) топиков, обеспечивающая строгий порядок доставки сообщений и исключение дубликатов, что ранее было доступно только в Amazon SQS. В 2023 году появилась возможность фильтрации сообщений на стороне сервера, что позволило подписчикам получать только те сообщения, которые соответствуют заданным критериям, без необходимости обработки на стороне клиента.

Архитектура и принцип работы

Архитектура Amazon SNS основана на модели «издатель-подписчик». Ключевыми компонентами являются:

  • Топик (Topic)логический канал доставки сообщений. Издатели отправляют сообщения в топик, а подписчики получают их из него. Топик идентифицируется уникальным Amazon Resource Name (ARN).
  • Издатель (Publisher) — любой компонент системы (приложение, сервис AWS, внешняя система), который отправляет сообщение в топик. Издатель не знает, кто является подписчиком.
  • Подписчик (Subscriber) — конечная точка, которая получает сообщения из топика. Подписчик регистрируется на топик и указывает протокол доставки.
  • Сообщение (Message) — полезная нагрузка, передаваемая от издателя подписчику. Сообщение может содержать до 256 КБ данных в формате JSON, XML, текста или двоичного файла.

Процесс доставки сообщения выглядит следующим образом:

  1. Издатель отправляет сообщение в определённый топик.
  2. Amazon SNS принимает сообщение и, в зависимости от настроек топика, может выполнить его фильтрацию, дедупликацию или преобразование.
  3. Сервис автоматически реплицирует сообщение на все подписанные конечные точки.
  4. Для каждого подписчика сообщение доставляется в соответствии с выбранным протоколом.

Классификация и виды

Amazon SNS поддерживает несколько типов топиков и протоколов доставки.

Типы топиков

  • Стандартный топик (Standard Topic) — обеспечивает максимальную пропускную способность и масштабируемость. Гарантирует доставку «как минимум один раз» (at-least-once delivery), но допускает дублирование сообщений и их неупорядоченную доставку. Подходит для большинства сценариев, где критична производительность, а не строгий порядок.
  • FIFO топик (First-In-First-Out Topic) — гарантирует строгий порядок доставки сообщений и исключение дубликатов (exactly-once delivery). Поддерживает только подписчиков Amazon SQS FIFO и AWS Lambda. Используется в сценариях, где порядок сообщений важен, например, в банковских транзакциях или управлении заказами.

Протоколы доставки

Amazon SNS поддерживает следующие протоколы для подписчиков:

ПротоколОписаниеПримеры использования
HTTP/HTTPSОтправка POST-запроса на указанный URL-адрес.Вызов веб-хуков, интеграция с внешними системами.
Amazon SQSОтправка сообщения в очередь Amazon SQS.Асинхронная обработка, буферизация, развязывание микросервисов.
AWS LambdaВызов функции AWS Lambda с сообщением в качестве входных данных.Бессерверная обработка, ETL-процессы, реагирование на события.
Email (JSON)Отправка электронного письма в формате JSON.Уведомления администраторов, логирование.
Email (Text)Отправка электронного письма в текстовом формате.Простые уведомления для пользователей.
SMSОтправка текстового сообщения на мобильный телефон.Одноразовые пароли (OTP), аварийные оповещения, маркетинговые рассылки.
Платформенные push-уведомленияОтправка push-уведомлений на мобильные устройства через APNs (Apple), FCM (Google), ADM (Amazon) и другие.Мобильные приложения для новостей, социальных сетей, мессенджеров.

Характеристики и возможности

  • Масштабируемость — сервис автоматически масштабируется для обработки любого объёма сообщений, от нескольких в день до миллионов в секунду.
  • Отказоустойчивость — сообщения реплицируются в нескольких зонах доступности AWS, обеспечивая высокую доступность.
  • Фильтрация сообщений — позволяет подписчикам задавать политики фильтрации на основе атрибутов сообщения, получая только релевантные данные.
  • Дедупликация — для FIFO топиков обеспечивается исключение дубликатов на основе идентификатора дедупликации.
  • Шифрование — поддерживается шифрование сообщений на стороне сервера с использованием AWS Key Management Service (KMS).
  • Мониторинг и логирование — интеграция с Amazon CloudWatch для сбора метрик (количество опубликованных сообщений, количество доставленных сообщений, задержки) и с AWS CloudTrail для аудита API-вызовов.
  • Dead-Letter Queue (DLQ) — возможность перенаправлять сообщения, которые не удалось доставить после нескольких попыток, в очередь SQS для последующего анализа.
  • Сообщения с большим размером — для сообщений размером до 2 ГБ используется интеграция с Amazon S3, где ссылка на объект передаётся через SNS.

Применение

Amazon SNS используется в самых разных сценариях:

  • Уведомления и оповещения — отправка алертов о сбоях, изменениях состояния ресурсов, превышении пороговых значений метрик (например, через AWS CloudWatch Alarms).
  • Архитектура микросервисовасинхронное взаимодействие между микросервисами, когда один сервис публикует событие, а несколько других подписываются на него.
  • Мобильные push-уведомления — отправка персонализированных уведомлений пользователям мобильных приложений.
  • Обработка событий — запуск функций Lambda или рабочих процессов в ответ на события, такие как загрузка файла в S3, изменение записи в DynamoDB или завершение задания в EMR.
  • Рассылка электронных писем — отправка транзакционных писем (подтверждение регистрации, сброс пароля) или маркетинговых рассылок.
  • SMS-оповещения — отправка критических уведомлений, таких как аварийные сигналы или одноразовые пароли.

Сравнение с Amazon SQS

Хотя оба сервиса являются частью системы обмена сообщениями AWS, они решают разные задачи:

ХарактеристикаAmazon SNSAmazon SQS
МодельИздатель-подписчик (pub/sub)Очередь сообщений (queue)
ПотребителиМножество подписчиков (fan-out)Один потребитель (или группа потребителей в конкурирующем режиме)
ДоставкаPush-модель (сервис отправляет сообщение подписчику)Pull-модель (потребитель опрашивает очередь)
Гарантии доставкиСтандартный: at-least-once; FIFO: exactly-onceСтандартный: at-least-once; FIFO: exactly-once
Порядок сообщенийСтандартный: не гарантируется; FIFO: гарантируетсяСтандартный: не гарантируется; FIFO: гарантируется
Хранение сообщенийНе хранит сообщения (доставляет сразу)Хранит сообщения до 14 дней
Основной сценарийОповещение множества подписчиков, асинхронное уведомлениеБуферизация запросов, развязывание компонентов, обработка задач

Ограничения

  • Максимальный размер сообщения — 256 КБ (для сообщений большего размера требуется интеграция с S3).
  • Количество подписчиков на топик — до 12,5 миллионов.
  • Количество топиков в аккаунте — до 100 000 (по умолчанию, может быть увеличено по запросу).
  • Задержка доставки — для стандартных топиков обычно составляет миллисекунды, но может варьироваться в зависимости от нагрузки и протокола.
  • Стоимость — взимается плата за каждое опубликованное сообщение, за каждое доставленное сообщение (по некоторым протоколам, например, SMS, Email) и за исходящий трафик.

Интересные факты

  • Amazon SNS используется для обработки миллиардов сообщений в день в крупнейших компаниях мира, включая Netflix, Airbnb и Spotify.
  • Сервис поддерживает отправку сообщений в формате JSON, что упрощает интеграцию с современными веб-приложениями и API.
  • Amazon SNS может быть интегрирован с AWS Chatbot для отправки уведомлений в каналы Slack, Microsoft Teams и другие системы обмена сообщениями.

Источники

  1. Официальная документация Amazon Simple Notification Service (AWS Documentation).
  2. «Amazon Web Services in Action» — Michael Wittig, Andreas Wittig.
  3. «AWS Certified Solutions Architect Study Guide» — Ben Piper, David Clinton.
  4. Документация по API Amazon SNS (AWS Documentation).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →