Как настроить и использовать Azure Event Grid для архитектур, основанных на событиях
Введение в Azure Event Grid
Azure Event Grid - это полностью управляемая служба маршрутизации событий, которая выступает в качестве основы для архитектур, управляемых событиями в облаке. Она позволяет различным компонентам приложения - будь то службы Azure, пользовательские приложения или сторонние системы - асинхронно общаться путем публикации и подписки на события. Это разделение позволяет системам быть более устойчивыми, масштабируемыми и реагировать на изменения в режиме реального времени. Event Grid поддерживает высокую пропускную способность с низкой задержкой, что делает его подходящим для широкого спектра вариантов использования, от автоматизации инфраструктуры до интеграции приложений.
В этом руководстве мы пройдем весь процесс настройки и использования Azure Event Grid. Вы узнаете, как создавать темы, настраивать подписки, публиковать события и внедрять лучшие практики для надежности, безопасности и мониторинга. К концу у вас будет прочная основа для создания событийных решений в Azure.
Понимание событийных архитектур
Традиционные архитектуры запросов-ответов часто создают тесную связь между услугами. Когда одной службе необходимо уведомить других об изменениях, она должна знать, где находится каждый получатель и как его назвать. Это приводит к сложным зависимостям и хрупкой интеграции. Архитектура событий решает эту проблему, вводя посредника — брокера событий, который управляет маршрутизацией событий от производителей к подписчикам. Производители публикуют события на тему, не зная, кто их будет потреблять, и подписчики регистрируют интерес к определенным событиям, не зная, кто их произвел.
Azure Event Grid превосходит в этой роли, потому что он предназначен для массового масштаба и надежности. Он поддерживает как системные события (например, создание хранилища или изменения группы ресурсов), так и пользовательские события из ваших собственных приложений. Сервис автоматически обрабатывает повторные запросы, мертвую букву и фильтрацию, поэтому вы можете сосредоточиться на бизнес-логике, а не на водопроводе инфраструктуры.
Ключевые концепции Azure Event Grid
События
Событие — это небольшой фрагмент данных, описывающий произошедшее. Каждое событие содержит субъект, тип события, время события и полезную нагрузку данных. Например, событие создания учетной записи хранения может иметь субъект и тип события . Пользовательские события следуют одной и той же структуре схемы.
Темы
Тема — это конечная точка, куда отправляются события. Она предоставляет пространство имен для событий определенной категории. Можно создавать системные темы для ресурсов Azure (например, учетную запись хранилища или группу ресурсов) или пользовательские темы для собственных приложений. Темы — это региональные ресурсы, поэтому во время создания необходимо выбрать регион.
Подписки на мероприятия
Подписки определяют, какие события хочет получить абонент и как они должны быть доставлены. Вы можете фильтровать события на основе темы, типа события или поля данных. Подписки также указывают тип конечной точки - общие опции включают в себя веб-хуки (конечные точки HTTP), функции Azure, концентраторы событий, очереди или темы в сервисной шине и приложения Azure Logic. Каждая подписка может иметь свою собственную политику повторного использования и пункт назначения с мертвой буквой.
Издатели событий
Любой сервис или приложение, которое отправляет события на тему Event Grid, является издателем. Издателям не нужно знать о подписчиках; они просто публикуют события на конечную точку темы. Azure SDKs, REST API и CLI доступны для публикации событий.
Исполнитель: Event Handlers
Обработчик событий — это компонент, обрабатывающий входящее событие. Azure Event Grid поддерживает несколько типов обработчиков: webhooks, которые отвечают на HTTP POST, Azure Functions, Рукописи автоматизации, Logic Apps и многое другое. Для webhooks Event Grid требуется рукопожатие для проверки конечной точки до доставки событий.
Пошаговая настройка Azure Event Grid
Давайте рассмотрим практические шаги по созданию Azure Event Grid, от создания темы до подписки и публикации событий.
1.Создать тему событийной сети
Перейдите на портал Azure (portal.azure.com) и найдите «Сетку событий». Нажмите Создать и выберите Topic из вариантов. Вам нужно будет предоставить:
- Подписка : Подписка на Azure, под которой будет создана тема.
- Ресурсная группа: либо использовать существующую группу, либо создать новую для организации ресурсов.
- Имя : глобально уникальное название темы. Это становится частью конечного URL.
- Регион: Выберите область Azure, близкую к вашим услугам.
По желанию вы можете включить назначенную системой управляемую идентификацию или добавить теги для управления. После проверки нажмите Создать . Развертывание занимает минуту или две. После готовности вы увидите URL конечной точки темы и ключ доступа или токен SAS в разделе «Ключи» темы.
2.Создать подписку на событие
С созданной темой вам нужна по крайней мере одна подписка для получения событий. На странице обзора темы нажмите + Подписка на события .
- Имя : описательное название подписки.
- Схема событий: Выберите между схемой Event Grid или схемой CloudEvents v1.0. CloudEvents становится отраслевым стандартом для взаимодействия.
- Тип конечной точки: Выберите тип обработчика. Для тестирования выберите Webhook и предоставьте URL-адрес вашей конечной точки. Для производства вы можете использовать функцию Azure или Logic App.
- Фильтры: Вы можете включить фильтрацию по типам событий, теме начинается/кончается с или расширенные фильтры (например, поля данных).
- Политика повторного использования: Установить максимальное количество попыток доставки и время до конца события. По умолчанию 30 дней и 4 повторных попытки.
- Мертвопись: Укажите контейнер для хранения, в котором после исчерпания повторных запросов отправляются непоставляемые события. Это имеет решающее значение для отладки и надежности.
Нажмите Создать Если вы выбрали конечную точку веб-хук, Event Grid отправит запрос на валидацию. Ваша конечная точка должна ответить кодом валидации (часто частью процесса рукопожатия) для подтверждения права собственности. После проверки события будут течь.
3.Публикация событий
Для публикации событий вам нужен URL конечной точки темы и ключ доступа или токен SAS. Полезная нагрузка события должна следовать схеме Event Grid . Вот минимальный пример с использованием Azure CLI:
az eventgrid event submit \
--endpoint https://your-topic.westus-1.eventgrid.azure.net/api/events \
--subject "custom/test" \
--event-type "MyApp.NewRecord" \
--data '{"id":123,"name":"test"}' \
--key aabbccdd...
Вы также можете использовать REST API, PowerShell или SDK (C#, Python, Java, Node.js). Для безсерверных сред Azure Functions может публиковать события через выходное связывание.
4.Обработка событий с помощью функций Azure
Один из наиболее распространенных шаблонов - использовать функцию Azure в качестве обработчика событий. Создать новое приложение Azure Function и добавить триггер Event Grid. Функция будет получать события как JSON. Вот простой пример C#:
[FunctionName("ProcessEvent")]
public static void Run([EventGridTrigger] EventGridEvent eventGridEvent, ILogger log)
{
log.LogInformation($"Received event: {eventGridEvent.EventType} with subject {eventGridEvent.Subject}");
// Process the event data
}
Среда выполнения функции автоматически проверяет рукопожатие веб-хука, если вы используете связывание триггера Event Grid. Этот подход дает вам масштабируемый, безсерверный процессор событий.
Расширенные сценарии и шаблоны
Помимо базовой настройки, Azure Event Grid поддерживает сложные архитектуры. Вот несколько продвинутых вариантов использования:
Фильтрация и маршрутизация
Используйте расширенную фильтрацию для маршрутизации событий на основе значений данных. Например, у вас может быть тема, которая принимает события из нескольких отделов. Можно создавать отдельные подписки на события «HR» (фильтр на ) и события «IT». Это гарантирует, что каждый обработчик обрабатывает только соответствующие события, уменьшая нагрузку и упрощая логику.
Событие Grid Domains
Когда вам нужно управлять многими темами для разных арендаторов или приложений, Event Grid Domains предоставляет иерархическое пространство имен. Каждый домен может содержать несколько тем, и вы можете применять политики, аутентификацию и мониторинг на уровне домена. Это идеально подходит для поставщиков SaaS, которые предлагают услуги мероприятий для нескольких клиентов.
Гибридная и многооблачная интеграция
Event Grid может подключаться к внешним системам с помощью веб-хуков. Вы можете отправлять события локальным системам через гибридные соединения или другим облачным провайдерам с использованием общедоступных конечных точек HTTP. Для безопасности используйте управляемые идентификаторы и токены SAS для аутентификации исходящих вызовов. Также рассмотрите возможность использования Azure Arc для управления локальными ресурсами с Event Grid.
Интеграция с Azure Logic Apps
Logic Apps может использовать события Event Grid в качестве триггера, позволяя выполнять рабочие процессы с низким кодом. Например, когда в хранилище создается новая капля, Logic App может автоматически копировать ее в другое место, отправлять электронную почту или обновлять базу данных. Визуальный дизайнер упрощает создание сложных оркестровок без написания кода.
Лучшие практики для производственных развертываний
Чтобы убедиться, что решение Event Grid надежно, безопасно и экономически эффективно, следуйте этим рекомендациям:
- Всегда включайте мертвую букву . Без нее непоставленные события молча сбрасываются после повторных попыток. Пункт назначения мертвой буквы (хранилище данных) помогает вам диагностировать сбои доставки и перерабатывать события, если это необходимо.
- Используйте управляемые идентификаторы для аутентификации. Вместо хранения ключей включите управляемые идентификаторы в вашем издателе (например, функцию Azure) и предоставьте ему разрешение на публикацию в тему. Для подписчиков используйте управляемые идентификаторы, чтобы избежать управления ключами.
- Фильтрация рычагов на уровне подписки. Это уменьшает количество вызовов на ваших обработчиках, экономит затраты и улучшает производительность. Используйте расширенные фильтры для мелкозернистого управления.
- Проектирование идемпотентных обработчиков Поскольку Event Grid гарантирует, по крайней мере, один раз доставку, ваш обработчик может получать одно и то же событие несколько раз. Убедитесь, что ваша логика обработки может обрабатывать дубликаты изящно (например, проверяя уникальный идентификатор события или используя магазин дедупликации).
- Монитор с Azure Monitor. Отслеживайте показатели, такие как скорость доставки, пропущенные события, задержка и количество с мертвой буквы. Настройте оповещения об аномалиях. Используйте диагностические настройки для отправки журналов в Log Analytics для более глубокого анализа.
- План восстановления после геокатастрофы. Темы носят региональный характер. Если вам нужна глобальная устойчивость, разверните темы в нескольких регионах и используйте пользовательский механизм маршрутизации. Рассмотрите возможность использования партнерских событий Azure Event Grid или репликации по всему региону для критических сценариев.
- Сохраняйте полезную нагрузку на событие небольшой . События доставляются в виде тел HTTP POST. Большие полезные нагрузки увеличивают задержку и стоимость. Включайте только URL-адрес ссылки или идентификатор в событии и позволяйте обработчику получать дополнительные данные из хранилища.
Рассмотрение вопросов безопасности
Безопасность в системах, управляемых событиями, имеет несколько уровней:
- Аутентификация для издателей: Используйте ключи SAS, управляемые идентификаторы или аутентификацию Azure AD для защиты конечной точки темы. Избегайте встраивания ключей в код; используйте ключи хранилища или основные учетные данные службы.
- Проверка конечной точки для абонентов : При использовании веб-хуков Event Grid отправляет рукопожатие проверки, чтобы подтвердить, что абонент контролирует конечную точку. Ваш веб-хук должен соответствующим образом реагировать, чтобы избежать несанкционированной пересылки событий.
- Безопасность сети : Используйте частные конечные точки для доступа к Event Grid через VNet. Это гарантирует, что трафик никогда не пересекает общедоступный интернет. Для гибридных сценариев используйте Azure VPN или ExpressRoute.
- Шифрование данных: События шифруются в состоянии покоя и в пути (TLS 1.2+). Вы также можете принести свой собственный ключ (BYOK) для дополнительного контроля над ключами шифрования.
Управление затратами
Цена Azure Event Grid основана на количестве операций (опубликованных событий и попыток доставки) и количестве ресурсов темы / подписки.
- Объединить несколько типов событий в одну тему и фильтровать на уровне подписки. Это уменьшает количество необходимых тем.
- Используйте агрессивную фильтрацию событий, чтобы избежать ненужных поставок. Каждая доставка считается операцией.
- Использование Event Grid Domains для сценариев с несколькими арендаторами — они имеют общую инфраструктуру и могут быть дешевле, чем отдельные темы.
- Установите соответствующие политики повторного использования. По умолчанию повторные попытки (30 дней) могут быть слишком длинными; скорректируйте временные и максимальные повторные попытки на основе вашего SLA.
Следите за своим использованием через Azure Cost Management и устанавливайте бюджеты или оповещения, чтобы избежать непредвиденных расходов.
Мониторинг и устранение неполадок
Azure Monitor предоставляет комплексные метрики для Event Grid.
- Публика Преемственность: Количество успешно опубликованных событий.
- Публика не удалась: События, которые не могли быть опубликованы (например, ошибки аутентификации).
- Дилерия Преемственна: События успешно доставляются подписчикам.
- Доставка не удалась: События, которые не могли быть доставлены (например, конечная точка недоступна).
- Мертвые буквы: События, которые исчерпали попытки повторного повторения.
Вы также можете включить диагностические журналы для темы и подписки. Журналы фиксируют детали о каждой операции публикации и доставки, включая коды ошибок и задержки. Используйте запросы Log Analytics для корреляции сбоев с конкретными типами событий.
Общие шаги по устранению неполадок:
- Если события не доходят до вашего обработчика, проверьте состояние конечной точки подписки. Используйте возможность «тестирования» на портале для отправки выборочного мероприятия.
- Если проверка не удалась для веб-хука, убедитесь, что ваша конечная точка возвращает HTTP 200 с кодом проверки. Для функций Azure связывание обрабатывает это автоматически.
- Если события проходят с мертвой буквы, проверьте контейнер с мертвой буквой для исходной полезной нагрузки и деталей ошибки.
Интеграция с другими сервисами Azure
Azure Event Grid работает нативно со многими сервисами Azure. Вот несколько общих интеграций:
- Azure Blob Storage: Автоматически отправляет события, когда создаются, удаляются или обновляются сгустки. Полезно для запуска конвейеров обработки.
- Azure DevOps: Реагируйте на завершение строительства, вытягивайте события запроса и многое другое для автоматизации CI/CD.
- Лазурное машинное обучение: триггер переподготовки рабочих мест или развертывание трубопроводов, когда новые данные поступают.
- Лазурный IoT-хаб: маршрутизация телеметрии устройства и событий жизненного цикла для последующей обработки.
- Azure Kubernetes Service (AKS): Используйте Event Grid для просмотра событий AKS для кластерного автомасштаба или развертывания приложений.
Сила Event Grid заключается в его способности подключать эти разрозненные сервисы с минимальным кодом.
Пример из реального мира: обработка безсерверных ордеров
Представьте себе платформу электронной коммерции, которая обрабатывает заказы. Когда клиент размещает заказ, веб-приложение публикует событие в тему Event Grid: с такими данными, как идентификатор заказа, информация о клиенте и элементы. Настроены три подписки:
- Инвентарная служба (Лазурная функция): Запасы запасов и обновление базы данных инвентаризации.
- Платежная служба (Логическое приложение): Обработка платежей через сторонний шлюз.
- Уведомление (Webhook to SendGrid): Отправляет подтверждение по электронной почте клиенту.
Каждая подписка фильтрует по типу и тематике события, поэтому они получают только соответствующие события. Если платежная служба выходит из строя, предпринимаются попытки повторных попыток; после исчерпания событие отбрасывается на букву «без буквы» для ручного вмешательства. Вся система разъединяется: веб-приложению не нужно знать о сервисах нисходящего потока. Новые услуги могут быть добавлены позже, просто создав новую подписку.
Ограничения и альтернативы
Несмотря на то, что Azure Event Grid обладает мощными возможностями, он имеет ряд ограничений:
- Предел размера события : Максимальный размер события составляет 1 МБ (включая заголовки). Для больших полезных нагрузок используйте ссылку на хранилище с помощью blob.
- Пропускная способность : Несмотря на высокую скорость, существуют ограничения по теме. Для чрезвычайно высокой пропускной способности (миллионы событий в секунду) рассмотрите Azure Event Hubs для приема событий и Event Grid для маршрутизации конкретных событий.
- Заказ : Event Grid не гарантирует заказ по теме; события могут выйти из строя. Если заказ имеет решающее значение, используйте Event Hubs или Service Bus.
- По крайней мере, один раз доставка : Дублированная доставка возможна.
Выберите Azure Event Grid, когда вам нужен простой, безсерверный маршрутизатор событий с семантикой паб/суб. Для потоковой передачи событий или заказанной доставки объедините его с другими службами обмена сообщениями Azure.
Заключение
Azure Event Grid является основополагающим сервисом для создания современных событийных приложений в облаке. Отделяя производителей от потребителей, он позволяет масштабируемые, устойчивые и простые в расширении архитектуры. Настройка его включает в себя создание темы, одной или нескольких подписок и обработчика для обработки событий. Лучшие практики, такие как мертвая буква, фильтрация, идемпотентные обработчики и мониторинг, обеспечивают готовность производства.
Независимо от того, автоматизируете ли вы инфраструктуру, подключаете микросервисы или создаете систему уведомлений в режиме реального времени, Event Grid обеспечивает надежный, экономически эффективный уровень маршрутизации событий. Начните с малого, примите ориентированное на события мышление и постепенно расширяйте рабочие процессы на основе сообщений. Гибкость и интеграция с более крупной экосистемой Azure делают Event Grid выбором для разработчиков и архитекторов.
Для дальнейшего чтения, изучите официальную документацию Azure Event Grid и схему событий .