Создание архитектуры событий с помощью Azure Event Hub и функций

Архитектура, управляемая событиями (EDA), стала основополагающим шаблоном для создания современных, отзывчивых и слабо связанных систем. Microsoft Azure предоставляет надежный набор услуг для реализации EDA, а Azure Event Hub служит высокопроизводительным слоем приема событий и функциями Azure, обеспечивающими бессерверные вычисления для реагирования на эти события в режиме реального времени. Эта статья представляет собой всеобъемлющее руководство по созданию архитектуры, управляемой событиями, с использованием этих двух услуг, охватывающих принципы проектирования, пошаговую реализацию, операционные лучшие практики и реальные варианты использования. Независимо от того, потребляете ли вы телеметрию из миллионов устройств IoT или обрабатывает данные по потоку кликов из веб-приложений, эта архитектура может масштабироваться для удовлетворения ваших потребностей, сохраняя при этом операционную сложность на низком уровне.

Понимание событийной архитектуры

По своей сути, архитектура, управляемая событиями, построена вокруг производства, обнаружения, потребления и реакции на события. Событие - это значительное изменение состояния - например, считывание датчиков, платежная транзакция или обновление профиля пользователя. В EDA компоненты общаются через события, а не прямые синхронные вызовы, что снижает связь и позволяет независимо масштабировать производителей и потребителей.

Ключевые концепции

Введенное EDA разъединение позволяет командам разрабатывать, развертывать и масштабировать услуги независимо. Это также облегчает аналитику в реальном времени, аудиторские маршруты и возможность воспроизводить исторические события для отладки или переработки.

Azure Event Hub: уровень проглатывания

Azure Event Hub — полностью управляемая платформа потоковой передачи данных в реальном времени, способная принимать миллионы событий в секунду. Его архитектура предназначена для высокой пропускной способности, низкой задержки и долговечности. Event Hub захватывает события в разделы, каждый из которых является упорядоченной последовательностью событий. Потребители могут читать с контрольной точки, чтобы возобновить обработку.

Основные характеристики Event Hub

Шаги настройки

  1. Создать пространство имен Event Hubs: На портале Azure создать новое пространство имен Event Hubs.Выберите уровень цен (стандарт рекомендуется для большинства производственных нагрузок).Включить автонадув, если вы ожидаете переменную пропускную способность.
  2. Создать в пространстве имен элемент Event Hub Instance: В пространстве имен создать концентратор событий.Укажите количество разделов — общее эмпирическое правило 4-32 разделов для большинства вариантов использования. Разделы не могут быть изменены позже без воссоздания концентратора, поэтому выберите на основе ожидаемой пропускной способности.
  3. Настройка политик совместного доступа: Создание политики для производителей (например, «SendOnly») и политики для потребителей (например, «ListenOnly»), чтобы следовать принципу наименьших привилегий.
  4. Включить захват (необязательно): Если вам нужно хранить все сырые события для долгосрочного хранения, включите захват и укажите на контейнер хранения Azure Blob или хранилище озера данных.

В качестве примера можно привести официальный справочник по быстрому запуску .

Функции Azure: вычислительный триггер

Azure Functions обеспечивает безсерверную вычислительную среду, в которой вы пишете код, который реагирует на события. Триггер Event Hub позволяет автоматически вызывать функцию при публикации новых событий в концентратор событий. Функции могут автоматически масштабироваться, причем каждый экземпляр функции обрабатывает события из одного или нескольких разделов.

Поведение триггера событийного хаба

Создание функции Azure с помощью триггера Event Hub

  1. Создайте функциональное приложение на Azure Portal или через Azure CLI. Выберите стек времени выполнения (например, .NET, Node.js, Python).
  2. Добавить связывание триггера Event Hub. Функциональная подпись будет включать параметр для данных о событии (например, или ).
  3. Установите настройку строк подключения Event Hub (из настроек приложений) и название узла событий.
  4. Обычные задачи: десериализация JSON, обновление базы данных, вызов API или отправка события в другой сервис, такой как SignalR, для панели мониторинга в реальном времени.
  5. Конфигурировать выходные привязки по мере необходимости - например, выходное привязывание 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: Монитор и масштаб

Передовые модели и лучшие практики

Реплика событий и Catch-up

Одним из существенных преимуществ Event Hub является то, что события сохраняются в течение настраиваемого периода (до 90 дней по стандарту). Это позволяет потребителям воспроизводить события с определенного момента времени - полезно для заполнение новой базы данных или переработки после исправления ошибки. Для включения повторного воспроизведения можно создать новую группу потребителей и запустить функцию с пользовательского смещения.

Множественные потребительские группы

Event Hub поддерживает до 20 групп потребителей на один центр событий. Используйте отдельные группы потребителей для разных конвейеров обработки: один для аналитики в реальном времени, другой для архивных и третий для обучения моделей машинного обучения. Каждая группа потребителей получает свой собственный магазин контрольно-пропускных пунктов, позволяющий самостоятельно прогрессировать.

Идемпотентная обработка

Поскольку события могут быть доставлены по меньшей мере один раз, функция должна быть идемпотентной. Например, при вставке в базу данных используйте операции upsert вместо вставки. Или проверьте, существует ли идентификатор события в хранилище дедупликации (например, Redis с TTL). Это предотвращает дубликатную обработку от возникновения несоответствия данных.

Интеграция с Azure Function Output Bindings

Вместо написания ручного кода для отправки данных в другое место используйте выходные привязки. В следующей таблице приведены общие привязки для сценариев, основанных на событиях:

Рассмотрение вопросов безопасности

Используйте сценарии и реальные сценарии

Обработка телеметрии 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 Функции могут запускать модели обнаружения мошенничества, отмечать подозрительные транзакции и отправлять оповещения при сохранении аудиторских следов.

Оптимизация и мониторинг затрат

В то время как бессерверные устройства снижают затраты на холостую работу, вы все равно должны контролировать использование.

Установите бюджетные оповещения в Azure Cost Management. Используйте Application Insights для отслеживания времени выполнения функций и вызовов зависимостей. Страница Azure Event-driven Architecture pattern содержит руководство по мониторингу.

Сравнение с альтернативными технологиями

Оперативный контрольный список

  1. Определить время хранения событий (по умолчанию 1 день, максимум 7 дней по стандарту).
  2. Установите инсайты приложений для функции Azure для регистрации обработанного количества событий и ошибок.
  3. Включите оповещения Azure Monitor для дросселирования Event Hub (проверьте метрику ).
  4. Используйте Azure Policy для обеспечения безопасности версии TLS и типа аутентификации.
  5. Сценарии неудачи тестирования: остановите функцию, дайте событиям накапливаться, а затем перезапустите, чтобы проверить восстановление контрольной точки.
  6. Выполните нагрузочное тестирование с имитируемым производителем, чтобы обеспечить архитектуру с максимальным объемом.

Заключение

Создание архитектуры, основанной на событиях, с помощью Azure Event Hub и Azure Functions предоставляет организациям масштабируемую, экономичную и отзывчивую систему для обработки данных в режиме реального времени. Сочетание потокового воспроизведения событий и бессерверных вычислений позволяет разработчикам сосредоточиться на бизнес-логике, в то время как Azure обрабатывает разделение, масштабирование и управление контрольными точками. Следуя принципам проектирования и передовым методам, изложенным здесь - выбирая соответствующие подсчеты разделов, внедряя идемпотентную обработку и мониторинг операционного здоровья - вы можете создать готовый к производству конвейер, который адаптируется к меняющимся объемам данных. Поскольку модели, основанные на событиях, продолжают формировать современные облачные приложения, овладение этими службами Azure является ценным навыком для любого облачного архитектора или разработчика.