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, текста или двоичного файла.
Процесс доставки сообщения выглядит следующим образом:
- Издатель отправляет сообщение в определённый топик.
- Amazon SNS принимает сообщение и, в зависимости от настроек топика, может выполнить его фильтрацию, дедупликацию или преобразование.
- Сервис автоматически реплицирует сообщение на все подписанные конечные точки.
- Для каждого подписчика сообщение доставляется в соответствии с выбранным протоколом.
Классификация и виды
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 SNS | Amazon 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 и другие системы обмена сообщениями.
Источники
- Официальная документация Amazon Simple Notification Service (AWS Documentation).
- «Amazon Web Services in Action» — Michael Wittig, Andreas Wittig.
- «AWS Certified Solutions Architect Study Guide» — Ben Piper, David Clinton.
- Документация по API Amazon SNS (AWS Documentation).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →