Создание архитектуры событий с помощью Azure Event Hub и функций
Архитектура, управляемая событиями (EDA), стала основополагающим шаблоном для создания современных, отзывчивых и слабо связанных систем. Microsoft Azure предоставляет надежный набор услуг для реализации EDA, а Azure Event Hub служит высокопроизводительным слоем приема событий и функциями Azure, обеспечивающими бессерверные вычисления для реагирования на эти события в режиме реального времени. Эта статья представляет собой всеобъемлющее руководство по созданию архитектуры, управляемой событиями, с использованием этих двух услуг, охватывающих принципы проектирования, пошаговую реализацию, операционные лучшие практики и реальные варианты использования. Независимо от того, потребляете ли вы телеметрию из миллионов устройств IoT или обрабатывает данные по потоку кликов из веб-приложений, эта архитектура может масштабироваться для удовлетворения ваших потребностей, сохраняя при этом операционную сложность на низком уровне.
Понимание событийной архитектуры
По своей сути, архитектура, управляемая событиями, построена вокруг производства, обнаружения, потребления и реакции на события. Событие - это значительное изменение состояния - например, считывание датчиков, платежная транзакция или обновление профиля пользователя. В EDA компоненты общаются через события, а не прямые синхронные вызовы, что снижает связь и позволяет независимо масштабировать производителей и потребителей.
Ключевые концепции
- Производитель событий: Любой компонент, который испускает события в шину событий. Примеры включают устройства IoT, микросервисы или устаревшие системы, излучающие события захвата данных об изменениях (CDC).
- Event Bus/ Stream: Прочный, масштабируемый трубопровод, который проглатывает и упорядочивает события. Azure Event Hub идеально подходит для этой роли, предлагая разбитые, упорядоченные потоки событий.
- Event Consumer: Компонент, который подписывается на события и обрабатывает их. Azure Функции могут действовать как потребитель, запускаемый автоматически при появлении новых событий.
- Event Sourcing и CQRS: Многие реализации объединяют EDA с поиском событий (сохраняя журнал событий в качестве источника истины) и разделением ответственности командных запросов (CQRS) для разделения моделей чтения и записи.
Введенное EDA разъединение позволяет командам разрабатывать, развертывать и масштабировать услуги независимо. Это также облегчает аналитику в реальном времени, аудиторские маршруты и возможность воспроизводить исторические события для отладки или переработки.
Azure Event Hub: уровень проглатывания
Azure Event Hub — полностью управляемая платформа потоковой передачи данных в реальном времени, способная принимать миллионы событий в секунду. Его архитектура предназначена для высокой пропускной способности, низкой задержки и долговечности. Event Hub захватывает события в разделы, каждый из которых является упорядоченной последовательностью событий. Потребители могут читать с контрольной точки, чтобы возобновить обработку.
Основные характеристики Event Hub
- Разделение: События распределяются по разделам для параллельной обработки.Каждый раздел является независимым и может потребляться отдельным экземпляром функции Azure.
- Перехват: Автоматически сохраняется поток событий в хранилище Azure Blob или хранилище Azure Data Lake для архивной и пакетной аналитики.
- Восстановление после геокатастрофы: Факультативное сопряжение пространств имен в разных регионах обеспечивает высокую доступность.
- AMQP, HTTPS и Kafka Protocol: Поддерживает несколько протоколов, позволяя производителям, использующим клиентов Apache Kafka, отправлять события напрямую.
- Производные блоки (TU) или процессорные блоки (PU): Определить пропускную способность и выходную емкость. Для уровня без сервера (базовый и стандартный) используются TU; для премиум и выделенных, PU обеспечивают более предсказуемую производительность.
Шаги настройки
- Создать пространство имен Event Hubs: На портале Azure создать новое пространство имен Event Hubs.Выберите уровень цен (стандарт рекомендуется для большинства производственных нагрузок).Включить автонадув, если вы ожидаете переменную пропускную способность.
- Создать в пространстве имен элемент Event Hub Instance: В пространстве имен создать концентратор событий.Укажите количество разделов — общее эмпирическое правило 4-32 разделов для большинства вариантов использования. Разделы не могут быть изменены позже без воссоздания концентратора, поэтому выберите на основе ожидаемой пропускной способности.
- Настройка политик совместного доступа: Создание политики для производителей (например, «SendOnly») и политики для потребителей (например, «ListenOnly»), чтобы следовать принципу наименьших привилегий.
- Включить захват (необязательно): Если вам нужно хранить все сырые события для долгосрочного хранения, включите захват и укажите на контейнер хранения Azure Blob или хранилище озера данных.
В качестве примера можно привести официальный справочник по быстрому запуску .
Функции Azure: вычислительный триггер
Azure Functions обеспечивает безсерверную вычислительную среду, в которой вы пишете код, который реагирует на события. Триггер Event Hub позволяет автоматически вызывать функцию при публикации новых событий в концентратор событий. Функции могут автоматически масштабироваться, причем каждый экземпляр функции обрабатывает события из одного или нескольких разделов.
Поведение триггера событийного хаба
- Контрольная точка: Среда выполнения функции управляет контрольной точкой для отслеживания последнего успешно обработанного события на раздел. Это гарантирует, что если функция перезапускается, она возобновляется с правильной позиции.
- Обработка матчей: По умолчанию триггер доставляет партию событий. Вы можете контролировать размер партии и количество префектур для настройки производительности.
- Параллелизм: Количество экземпляров функций равно количеству разделов с необработанными событиями. Для увеличения параллелизма, увеличения количества разделов (в пределах). Для максимальной пропускной способности используйте план Premium или Dedicated host вместо плана Consumption, особенно если время обработки функции составляет более нескольких секунд.
Создание функции Azure с помощью триггера Event Hub
- Создайте функциональное приложение на Azure Portal или через Azure CLI. Выберите стек времени выполнения (например, .NET, Node.js, Python).
- Добавить связывание триггера Event Hub. Функциональная подпись будет включать параметр для данных о событии (например, или ).
- Установите настройку строк подключения Event Hub (из настроек приложений) и название узла событий.
- Обычные задачи: десериализация JSON, обновление базы данных, вызов API или отправка события в другой сервис, такой как SignalR, для панели мониторинга в реальном времени.
- Конфигурировать выходные привязки по мере необходимости - например, выходное привязывание Cosmos DB для хранения обработанных данных.
Документация запуска Лазурных ФункцийAzure Functions Event Hub предоставляет подробные образцы кода для каждого языка.
Проектирование архитектуры End-to-End
Теперь мы объединяем части. Типичный поток: Производители → Event Hub → Лазурные функции → Сервисы Downstream. Давайте рассмотрим пример производственного класса: система управления автопарком, получающая GPS-записи от тысяч транспортных средств.
Шаг 1: Определите схему событий
Последовательность имеет решающее значение. Используйте реестр схем (например, Azure Schema Registry in Event Hubs) или просто применяйте схему JSON. Пример полезной нагрузки события:
{
"vehicleId": "VH-12345",
"latitude": 37.7749,
"longitude": -122.4194,
"speed": 65.2,
"timestamp": "2025-03-21T10:30:00Z"
}
Использование Avro или Protobuf может уменьшить размер полезной нагрузки и обеспечить возможности для эволюции схемы, но JSON остается самым простым для отладки.
Шаг 2: Настройка продюсеров
Производителями могут быть устройства IoT с использованием Azure IoT Hub или пользовательские приложения с использованием Event Hubs SDK. Для сценариев большого объема пакетные события вместе (например, отправляют 100 событий за запрос) для максимизации пропускной способности. Убедитесь, что производитель использует политику повторного использования с экспоненциальным обратным выключением.
Шаг 3: Установите ключ раздела
События разделов Event Hub основаны на ключе раздела. Если вам нужна заказанные обработки на транспортное средство, используйте в качестве ключа раздела. Это гарантирует, что все события из одного и того же транспортного средства приземляются в одном и том же разделе и обрабатываются последовательно одним потребителем.
Шаг 4: Создайте функцию Azure
Функция получает партии событий, обрабатывает каждый по порядку, а затем может записывать последнее местоположение в кэш (например, Azure Redis Cache) для запросов в режиме реального времени. Она также может геозонировать события - когда транспортное средство входит в определенную зону, функция может отправлять оповещение через Azure Logic Apps или Twilio.
Шаг 5: Обработка отказов и отказов
Если обработка не удаётся для партии, триггер Event Hub будет повторяться в соответствии с политикой повторного использования функции (по умолчанию экспоненциальный обратный ход до 5 раз). Для событий с ядом (например, несоответствующая JSON), введите их в очередь с мертвой буквой (очередь Azure Storage или выделенный Event Hub). Функция должна улавливать конкретные исключения и перемещать проблемные события из нормального конвейера обработки.
Шаг 6: Монитор и масштаб
- Используйте Azure Monitor для отслеживания показателей Event Hub: входящие сообщения, запросы с дросселем, размер задолженностей (разница между последним завязанным смещением и последней контрольной точкой).
- Для масштабирования функций Azure план потребления будет автоматически масштабироваться, но может иметь задержки холодного запуска.Премиум-план предлагает предварительное нагревание экземпляра и интеграцию виртуальной сети.
- Настройка оповещений для высокого отставания, что указывает на то, что функция не может идти в ногу с графиком - рассмотрите возможность увеличения разделов или обновления плана хостинга.
Передовые модели и лучшие практики
Реплика событий и Catch-up
Одним из существенных преимуществ Event Hub является то, что события сохраняются в течение настраиваемого периода (до 90 дней по стандарту). Это позволяет потребителям воспроизводить события с определенного момента времени - полезно для заполнение новой базы данных или переработки после исправления ошибки. Для включения повторного воспроизведения можно создать новую группу потребителей и запустить функцию с пользовательского смещения.
Множественные потребительские группы
Event Hub поддерживает до 20 групп потребителей на один центр событий. Используйте отдельные группы потребителей для разных конвейеров обработки: один для аналитики в реальном времени, другой для архивных и третий для обучения моделей машинного обучения. Каждая группа потребителей получает свой собственный магазин контрольно-пропускных пунктов, позволяющий самостоятельно прогрессировать.
Идемпотентная обработка
Поскольку события могут быть доставлены по меньшей мере один раз, функция должна быть идемпотентной. Например, при вставке в базу данных используйте операции upsert вместо вставки. Или проверьте, существует ли идентификатор события в хранилище дедупликации (например, Redis с TTL). Это предотвращает дубликатную обработку от возникновения несоответствия данных.
Интеграция с Azure Function Output Bindings
Вместо написания ручного кода для отправки данных в другое место используйте выходные привязки. В следующей таблице приведены общие привязки для сценариев, основанных на событиях:
- Cosmos DB: Автоматически вставляйте документы с вывода функции.
- SignalR Service: Трансляция обработанных событий подключенным клиентам (например, панель мониторинга в реальном времени).
- Blob Storage: Периодически записывайте выходы партии (избегайте записи на событие, чтобы снизить затраты).
- Event Hubs (Output): Отправьте события в другой Event Hub для привязки.
Рассмотрение вопросов безопасности
- Используйте управляемую идентификацию для функции Azure для подключения к Event Hub вместо хранения строк соединения в простом тексте.
- Включите брандмауэр и интеграцию виртуальной сети для пространства имен Event Hub, чтобы ограничить доступ к сети.
- Используйте Azure Key Vault для хранения секретов, таких как строки подключения Event Hub и ключи доступа.
- Шифровать события в состоянии покоя и в пути (Event Hub по умолчанию использует TLS).
Используйте сценарии и реальные сценарии
Обработка телеметрии IoT
Как описано ранее, сценарий управления парком является классическим. Azure IoT Hub может принимать сообщения устройств и направлять их в Event Hub для последующей обработки. Azure Functions может затем вычислять среднюю скорость на маршрут, обнаруживать аномалии или вызывать предупреждения об обслуживании.
Clickstream Analytics
Веб-сайты электронной коммерции генерируют массивные данные о потоках кликов. Event Hub может объединять просмотры страниц, действия корзины покупок и поиски. Функции могут обогащать события данными профиля пользователя, счетчиками сеансов обновления и нажимать на Azure Data Explorer для панелей мониторинга в режиме реального времени. Лазурная эталонная архитектура для потока кликов обеспечивает полный план.
Захват данных об изменениях (CDC)
Когда нужно синхронизировать данные из реляционной базы данных с поисковым индексом или кэшем, CDC с помощью Event Hub является общим подходом. Например, с помощью Debezium (Kafka Connect) для потокового изменения базы данных в Event Hub, затем функция Azure трансформируется и пишет в Elasticsearch. Этот шаблон сохраняет поисковый индекс всегда в актуальном состоянии без пользовательской логики опроса.
Обработка финансовых транзакций
В области финансов, событийная архитектура позволяет обнаруживать мошенничество, оценивать риски в реальном времени и осуществлять торговые расчеты. Низкая задержка и высокая пропускная способность Event Hub делают его пригодным для обработки тысяч сделок в секунду. Azure Функции могут запускать модели обнаружения мошенничества, отмечать подозрительные транзакции и отправлять оповещения при сохранении аудиторских следов.
Оптимизация и мониторинг затрат
В то время как бессерверные устройства снижают затраты на холостую работу, вы все равно должны контролировать использование.
- Event Hub Throughput Units: Каждый TU допускает 1 Мб/с вход и 2 Мб/с выход (или 1000 событий в секунду). Для непредсказуемых рабочих нагрузок включите автонадув.
- Количество проглоченных данных: Объявлено на миллион событий (стандартный уровень). Используйте пакетирование для уменьшения количества событий.
- Время выполнения функции Лазурного поля: План потребления заряжается в секунду исполнения. Убедитесь, что ваша функция эффективна — избегайте блокировки вызовов и используйте async I/O.
- Хранение, используемое для захвата и контрольных точек: Стоимость хранения Blob минимальна, но учитывайте политику хранения.
Установите бюджетные оповещения в Azure Cost Management. Используйте Application Insights для отслеживания времени выполнения функций и вызовов зависимостей. Страница Azure Event-driven Architecture pattern содержит руководство по мониторингу.
Сравнение с альтернативными технологиями
- Azure Service Bus: Лучше для командных рабочих нагрузок, требующих строгого заказа, обработки транзакций и безотказной рассылки. Event Hub оптимизирован для потоковой передачи событий с высокой пропускной способностью, а не для обмена сообщениями между точками.
- Apache Kafka на HDInsight или Confluent: Больше контроля над конфигурациями, но требует операционных накладных расходов. Event Hub обеспечивает совместимость протокола Kafka с управляемой службой.
- Event Grid: Подходит для реактивного программирования и маршрутизации событий между службами Azure. Он не предназначен для потоковой передачи больших объемов — Event Hub обрабатывает миллионы событий в секунду.
- Azure Stream Analytics: Управляемый SQL-подобный процессор для анализа временных рядов. Он может работать поверх Event Hub, но для сложной бизнес-логики Azure Functions предлагает большую гибкость.
Оперативный контрольный список
- Определить время хранения событий (по умолчанию 1 день, максимум 7 дней по стандарту).
- Установите инсайты приложений для функции Azure для регистрации обработанного количества событий и ошибок.
- Включите оповещения Azure Monitor для дросселирования Event Hub (проверьте метрику ).
- Используйте Azure Policy для обеспечения безопасности версии TLS и типа аутентификации.
- Сценарии неудачи тестирования: остановите функцию, дайте событиям накапливаться, а затем перезапустите, чтобы проверить восстановление контрольной точки.
- Выполните нагрузочное тестирование с имитируемым производителем, чтобы обеспечить архитектуру с максимальным объемом.
Заключение
Создание архитектуры, основанной на событиях, с помощью Azure Event Hub и Azure Functions предоставляет организациям масштабируемую, экономичную и отзывчивую систему для обработки данных в режиме реального времени. Сочетание потокового воспроизведения событий и бессерверных вычислений позволяет разработчикам сосредоточиться на бизнес-логике, в то время как Azure обрабатывает разделение, масштабирование и управление контрольными точками. Следуя принципам проектирования и передовым методам, изложенным здесь - выбирая соответствующие подсчеты разделов, внедряя идемпотентную обработку и мониторинг операционного здоровья - вы можете создать готовый к производству конвейер, который адаптируется к меняющимся объемам данных. Поскольку модели, основанные на событиях, продолжают формировать современные облачные приложения, овладение этими службами Azure является ценным навыком для любого облачного архитектора или разработчика.