0Pricing
Cloud & IT Cert Prep · Урок

Темы SNS и архитектура веерной рассылки

Публикуйте сообщение в одной теме SNS и одновременно распределяйте его по нескольким очередям SQS, функциям Lambda и конечным точкам HTTP.

«Темы SNS и архитектура веерной рассылки» — бесплатный урок Cloud & IT Cert Prep на CoddyKit. Это урок 3 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Cloud & IT Cert Prep, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Что такое Amazon SNS

Сервис простых уведомлений Amazon (SNS) — это полностью управляемый сервис обмена сообщениями по модели издатель/подписчик. Издатели отправляют сообщения в тему SNS, а SNS немедленно доставляет эти сообщения всем подписчикам. В отличие от SQS, работающего по модели извлечения, SNS работает по модели принудительной отправки — он доставляет сообщения подписчикам сразу после публикации. Благодаря этому SNS идеально подходит для одновременной рассылки событий нескольким системам-получателям.

Темы SNS: Standard и FIFO

Как и SQS, SNS поддерживает два типа тем: темы Standard обеспечивают упорядочивание сообщений с максимальными усилиями, доставку как минимум один раз и практически неограниченную пропускную способность; они могут доставлять сообщения в SQS, Lambda, конечные точки HTTP, по электронной почте, SMS и через мобильные push-уведомления. Темы FIFO гарантируют строгий порядок и доставку ровно один раз, но только подписчикам FIFO SQS. Темы FIFO поддерживают до 3 000 сообщений в секунду при пакетной обработке и используются, когда порядок событий необходимо сохранять для нескольких подписчиков.

aws sns create-topic --name 'OrderEvents'

# Create FIFO topic
aws sns create-topic \
  --name 'OrderEvents.fifo' \
  --attributes '{"FifoTopic": "true", "ContentBasedDeduplication": "true"}'

Типы подписчиков SNS

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

  • SQS: надёжная постановка сообщений в очередь (чаще всего используется для асинхронной обработки)
  • Lambda: прямой вызов (с точки зрения SNS — синхронный)
  • HTTP/HTTPS: доставка веб-перехватчика на внешние конечные точки
  • Электронная почта / Email-JSON: уведомления для пользователей
  • SMS: доставка текстовых сообщений
  • Мобильные push-уведомления: FCM, APNs через платформенные приложения
  • Firehose: передача в S3 или Redshift через Kinesis Data Firehose
# Subscribe an SQS queue to an SNS topic
aws sns subscribe \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --protocol sqs \
  --notification-endpoint 'arn:aws:sqs:us-east-1:123456789012:InventoryQueue'

Архитектурный шаблон широковещательной рассылки

Широковещательная рассылка — это основной шаблон SNS: одно сообщение публикуется в теме, а SNS одновременно доставляет его всем подписчикам. Например, событие о новом заказе рассылается в очередь SQS для выполнения заказа на складе, в другую очередь SQS для обновления запасов, в функцию Lambda для обнаружения мошенничества и в подписку электронной почты для операционной команды. Каждый подписчик обрабатывает событие независимо, без связанности между ними. Это намного более масштабируемый подход, чем один потребитель, перенаправляющий сообщения в несколько систем.

Широковещательная рассылка SNS + SQS: рекомендуемый подход

Рекомендуемый шаблон объединяет SNS и SQS: сообщения публикуются в SNS, который рассылает их в несколько очередей SQS. Это обеспечивает:

  • Надёжность хранения: если потребитель недоступен, сообщения накапливаются в SQS
  • Независимое масштабирование: каждый потребитель обрабатывает сообщения в собственном темпе
  • Ослабление связанности: новые потребители просто подписываются на SNS, не требуя изменений в издателе
  • Устойчивость к повторным попыткам: SQS предоставляет тайм-аут видимости и DLQ

Прямым подписчикам Lambda не хватает буферизации, которую предоставляет SQS, поэтому SNS→SQS→Lambda — более устойчивый трёхуровневый шаблон.

Повторные попытки доставки сообщений и DLQ

Если SNS не может доставить сообщение подписчику (конечная точка HTTP возвращает ошибку 5xx, Lambda выдаёт исключение или SQS недоступна), он повторяет попытку по стратегии экспоненциального увеличения интервала. Политики повторных попыток различаются в зависимости от протокола: для конечных точек HTTP предусмотрено до 4 немедленных повторных попыток, а затем экспоненциальное увеличение интервала в течение 23 дней; для Lambda и SQS повторные попытки управляются собственными механизмами повторов. Настройте DLQ темы SNS, чтобы сохранять сообщения, для которых исчерпаны все попытки доставки, и гарантировать, что события не будут незаметно потеряны.

Публикация сообщений в SNS

Публикуйте сообщения в SNS с помощью AWS SDK или CLI. Каждое сообщение может содержать тему (для электронной почты), тело сообщения (до 256 КБ) и атрибуты сообщения для маршрутизации. Для разных типов подписчиков (SQS, электронная почта или мобильные устройства) можно использовать структуру сообщения, чтобы отправлять разное содержимое каждому протоколу: JSON с ключами, специфичными для протокола, позволяет настроить полезную нагрузку для каждого типа подписчика.

aws sns publish \
  --topic-arn 'arn:aws:sns:us-east-1:123456789012:OrderEvents' \
  --message '{"orderId": "12345", "status": "PLACED", "amount": 99.99}' \
  --subject 'New Order Placed' \
  --message-attributes '{
    "orderType": {"DataType": "String", "StringValue": "PREMIUM"}
  }'

Политики фильтрации подписок SNS

Политики фильтрации подписок позволяют каждому подписчику получать только относящиеся к нему сообщения на основе атрибутов сообщения. Без фильтрации все подписчики получают все опубликованные сообщения. При использовании политики фильтрации подписчик указывает, какие значения атрибутов его интересуют. Например, очередь заказов 'PREMIUM' подписывается с фильтром {"orderType": ["PREMIUM"]}; очередь 'STANDARD' фильтрует сообщения по значению ["STANDARD"]. Каждый подписчик обрабатывает только относящееся к нему подмножество сообщений, сокращая ненужную обработку.

aws sns set-subscription-attributes \
  --subscription-arn 'arn:aws:sns:...:subscription/...' \
  --attribute-name FilterPolicy \
  --attribute-value '{"orderType": ["PREMIUM"], "region": ["US", "EU"]}'

SNS для мобильных push-уведомлений

SNS поддерживает прямую отправку мобильных push-уведомлений на устройства iOS (APNs) и Android (FCM/GCM). Вы регистрируете токены устройств как ARN конечных точек платформы, а затем публикуете сообщения непосредственно в конечную точку или в тему с подписчиками — платформенными приложениями. Для прямой отправки уведомлений на устройства в больших масштабах (миллионы устройств) объедините SNS с широковещательной рассылкой через SQS: SNS направляет событие уведомления в SQS, а рабочая служба занимается массовым сопоставлением токенов и доставкой.

Шифрование сообщений SNS и управление доступом

Защитите сообщения SNS с помощью шифрования на стороне сервера, используя AWS KMS. При этом сообщения шифруются в состоянии покоя внутри инфраструктуры SNS. Управление доступом использует как политики на основе ресурсов (кто может публиковать сообщения в тему или подписываться на неё), так и политики IAM. Чтобы разрешить корзине S3 публиковать уведомления в тему SNS, предоставьте разрешение sns:Publish субъекту-службе S3 в политике ресурсов темы. Всегда ограничивайте публикацию авторизованными источниками, чтобы предотвратить внедрение несанкционированных событий.

SNS и SQS: взаимодополняющие сервисы

SNS и SQS дополняют друг друга, а не являются альтернативами. SNS (принудительная отправка) используется для немедленной рассылки сообщений нескольким потребителям — выбирайте его, когда несколько систем должны реагировать на событие. SQS (извлечение) предназначена для надёжной и долговечной обработки одним потребителем с повторными попытками и DLQ — используйте её, когда один потребитель должен обрабатывать каждое сообщение ровно один раз в собственном темпе. Шаблон широковещательной рассылки SNS→SQS даёт оба преимущества: широковещательную доставку от SNS и надёжную обработку с повторными попытками от SQS. Такое сочетание часто встречается в экзаменационных сценариях SAA-C03.

Быстрая проверка

Проверьте, насколько хорошо Вы поняли концепции AWS Solutions Architect (SAA-C03) из этого урока.

Итоги урока

В этом уроке Вы узнали, что темы SNS обеспечивают широковещательную рассылку подписчикам по модели принудительной отправки, включая SQS, Lambda, HTTP, SMS и электронную почту; архитектура широковещательной рассылки использует одну тему SNS, передающую сообщения в несколько очередей SQS, чтобы обеспечить надёжную обработку событий несколькими потребителями с независимым масштабированием; а политики фильтрации подписок сокращают ненужную обработку, направляя каждому подписчику только относящиеся к нему события на основе атрибутов сообщения. Далее мы подробно рассмотрим фильтрацию сообщений SQS и интеграцию SNS + SQS.

Часто задаваемые вопросы

Урок «Темы SNS и архитектура веерной рассылки» бесплатный?

Да — полный текст урока «Темы SNS и архитектура веерной рассылки» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Cloud & IT Cert Prep, подпишись на CoddyKit PRO. Курс Cloud & IT Cert Prep содержит 4 уроков всего.

Чему я научусь в уроке «Темы SNS и архитектура веерной рассылки»?

Публикуйте сообщение в одной теме SNS и одновременно распределяйте его по нескольким очередям SQS, функциям Lambda и конечным точкам HTTP. Ты практикуешь Cloud & IT Cert Prep с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Cloud & IT Cert Prep?

Предыдущий опыт не требуется. Cloud & IT Cert Prep на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 3 из 4.

Сколько времени занимает урок «Темы SNS и архитектура веерной рассылки»?

Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.

Можно ли писать и запускать код в этом уроке Cloud & IT Cert Prep?

Да. Каждый урок Cloud & IT Cert Prep включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.

Все уроки этого курса

  1. Очереди SQS Standard и FIFO
  2. Тайм-аут видимости, DLQ и длительный опрос
  3. Темы SNS и архитектура веерной рассылки
  4. Фильтрация сообщений SQS и интеграция SNS + SQS
← Назад к Cloud & IT Cert Prep