0Pricing
Azure Fundamentals · Урок

Event Grid и событийная архитектура

Маршрутизируйте события от служб Azure и пользовательских издателей с помощью Event Grid, распределяйте их между несколькими подписчиками и сравнивайте Event Grid с Event Hubs и Service Bus.

«Event Grid и событийная архитектура» — бесплатный урок Azure Fundamentals на CoddyKit. Это урок 4 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Azure Fundamentals, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Azure Fundamentals содержит 4 уроков всего.

Что такое архитектура, управляемая событиями

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

Что такое Azure Event Grid

Azure Event Grid — это полностью управляемая служба маршрутизации событий, которая доставляет события от источников (издателей) обработчикам (подписчикам) с использованием модели отправки. Event Grid предназначен для реактивных отдельных событий — что-то изменилось, и Вам нужно немедленно отреагировать. Служба гарантирует доставку как минимум один раз с автоматическими повторными попытками, поддерживает фильтрацию, чтобы подписчики получали только релевантные события, и может направлять события в Azure Functions, Logic Apps, веб-перехватчики, Event Hubs и очереди Service Bus.

Разделы Event Grid и подписки на события

Издатели отправляют события в раздел Event Grid. Подписчики создают подписки на события в разделе, указывая конечную точку и необязательные правила фильтрации. Один раздел может иметь несколько подписок — каждая подписка получает независимую копию соответствующих событий. Службы Azure, такие как Blob Storage, диспетчер ресурсов, Service Bus и реестр контейнеров Azure, являются встроенными источниками событий с системными разделами, не требующими дополнительной настройки.

# Create a custom Event Grid topic
az eventgrid topic create \
  --name MyEventTopic \
  --resource-group MyRG \
  --location eastus

# Create a subscription routing to an Azure Function
az eventgrid event-subscription create \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../providers/Microsoft.EventGrid/topics/MyEventTopic' \
  --endpoint '/subscriptions/.../providers/Microsoft.Web/sites/myFunctionApp/functions/EventHandler'

Схема события

События, публикуемые в Event Grid, соответствуют стандартной схеме JSON с обязательными полями: id (уникальный идентификатор), eventType (например, Microsoft.Storage.BlobCreated), subject (путь к ресурсу события), eventTime (метка времени ISO 8601), dataVersion и data (полезные данные события). Event Grid также поддерживает схему CloudEvents (стандарт CNCF) для совместимости с другими платформами событий.

// Event Grid event payload (Event Grid schema)
[
  {
    'id': 'b781910b-3000-4f19-a4c2-b6b9c4ca7a12',
    'eventType': 'Microsoft.Storage.BlobCreated',
    'subject': '/blobServices/default/containers/uploads/blobs/photo.jpg',
    'eventTime': '2025-01-15T12:30:00.000Z',
    'data': {
      'api': 'PutBlockList',
      'url': 'https://mystorageacct.blob.core.windows.net/uploads/photo.jpg',
      'contentType': 'image/jpeg',
      'contentLength': 524288
    },
    'dataVersion': '',
    'metadataVersion': '1'
  }
]

Фильтрация событий

Подписки на события поддерживают фильтрацию, чтобы уменьшить объём ненужных данных на стороне подписчика. Можно фильтровать события по типу события (получать только BlobCreated, но не BlobDeleted), префиксу или суффиксу субъекта (например, получать только большие двоичные объекты из определённого контейнера) или использовать расширенные фильтры для любого поля данных события с операторами, например StringContains, NumberGreaterThan и BoolEquals. Фильтрация выполняется на сервере, поэтому подписчики получают только события, соответствующие их критериям.

# Subscribe to BlobCreated events for .jpg files only
az eventgrid event-subscription create \
  --name jpgImageSub \
  --source-resource-id '/subscriptions/.../storageAccounts/mystorageaccount' \
  --endpoint 'https://myfunction.azurewebsites.net/api/ProcessImage' \
  --included-event-types 'Microsoft.Storage.BlobCreated' \
  --subject-ends-with '.jpg'

Event Grid, Event Hubs и Service Bus

Три службы Azure работают с событиями и сообщениями — выбирайте службу в зависимости от сценария. Event Grid предназначен для реактивной маршрутизации событий (небольшой объём, отдельные реактивные события, например уведомления об изменении ресурса). Event Hubs предназначен для потоковой передачи событий с высокой пропускной способностью (миллионы событий в секунду, телеметрия, конвейеры обработки больших данных). Service Bus предназначен для корпоративного обмена сообщениями с упорядочиванием, устранением дубликатов, помещением сообщений в очередь недоставленных сообщений и транзакциями (обработка заказов, финансовые операции).

// Decision guide:
// Event Grid  — 'Something happened, react to it'
//               Azure resource events, webhooks, low-latency fan-out
//               Price: per event (cheap for low volume)

// Event Hubs  — 'Capture a firehose of streaming data'
//               IoT telemetry, log aggregation, real-time analytics
//               Price: per throughput unit + capture

// Service Bus — 'Reliable message delivery between services'
//               Order processing, workflow steps, dead-letter queues
//               Price: per operation + messaging units

Публикация пользовательских событий

Публикуйте пользовательские события в разделе Event Grid с помощью простого HTTP-запроса POST и ключа доступа к разделу. Любая служба или приложение, способные отправлять HTTP-запросы, могут публиковать события. Благодаря этому легко создавать события из локальных приложений, сторонних служб или служб Azure, не имеющих встроенной поддержки Event Grid. Для повышения эффективности объединяйте в один POST-запрос события общим размером до 1 МБ.

# Get the topic endpoint and key
TOPIC_ENDPOINT=$(az eventgrid topic show --name MyEventTopic --resource-group MyRG --query endpoint -o tsv)
TOPIC_KEY=$(az eventgrid topic key list --name MyEventTopic --resource-group MyRG --query key1 -o tsv)

# Publish a custom event
curl -X POST $TOPIC_ENDPOINT \
  -H 'Content-Type: application/json' \
  -H "aeg-sas-key: $TOPIC_KEY" \
  -d '[{
    "id": "event-001",
    "eventType": "Contoso.OrderPlaced",
    "subject": "/orders/ORD-12345",
    "eventTime": "2025-01-15T12:00:00Z",
    "data": { "orderId": "ORD-12345", "total": 99.99 },
    "dataVersion": "1.0"
  }]'

Политики недоставки и повторных попыток

Если попытка доставки события завершается ошибкой (подписчик возвращает HTTP-ответ, не относящийся к диапазону 2xx), Event Grid повторяет попытки с экспоненциальным увеличением интервала и случайным смещением в течение 24 часов (значение можно настроить максимум до 72 часов), выполняя не более 30 попыток. После исчерпания попыток Event Grid может помещать недоставленные события в очередь недоставленных сообщений в контейнер Azure Blob Storage для ручного расследования. Настройте помещение сообщений в очередь недоставленных сообщений, если надёжная доставка событий критически важна и Вам необходимо проверять или повторно обрабатывать неудачные события.

# Configure dead-letter storage and retry for a subscription
az eventgrid event-subscription update \
  --name myFunctionSub \
  --source-resource-id '/subscriptions/.../topics/MyEventTopic' \
  --deadletter-endpoint '/subscriptions/.../storageAccounts/mystg/blobServices/default/containers/deadletter' \
  --max-delivery-attempts 30 \
  --event-ttl 1440  # 24 hours in minutes

Обзор Azure Event Hubs

Azure Event Hubs — это распределённая платформа потоковой передачи данных, способная принимать и обрабатывать миллионы событий в секунду. Она использует модель потребителей с разделением на разделы: события распределяются по разделам, а каждая группа потребителей независимо считывает события с собственной скоростью. Это позволяет нескольким потребителям обрабатывать один и тот же поток без координации. Распространённые сценарии включают приём телеметрии IoT, объединение журналов приложений, анализ потоков переходов и конвейеры данных для панелей мониторинга в реальном времени.

# Create an Event Hubs namespace and hub
az eventhubs namespace create \
  --name myEventHubNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az eventhubs eventhub create \
  --name telemetry \
  --namespace-name myEventHubNS \
  --resource-group MyRG \
  --partition-count 8 \
  --message-retention 3  # Days to retain events

Azure Service Bus для надёжного обмена сообщениями

Azure Service Bus — это корпоративный брокер сообщений, предоставляющий очереди (точка-точка) и разделы с подписками (публикация и подписка). В отличие от Event Grid (передача без ожидания подтверждения) и Event Hubs (потоковая передача), Service Bus гарантирует упорядоченную доставку (очереди FIFO), обнаружение дубликатов, очереди недоставленных сообщений для сбоев обработки, сеансы сообщений для групповой обработки и транзакции — всё это необходимо для рабочих процессов обработки финансовых операций и заказов.

# Create a Service Bus namespace and queue
az servicebus namespace create \
  --name myServiceBusNS \
  --resource-group MyRG \
  --location eastus \
  --sku Standard

az servicebus queue create \
  --name order-processing \
  --namespace-name myServiceBusNS \
  --resource-group MyRG \
  --enable-dead-lettering-on-message-expiration true \
  --max-delivery-count 10  # Move to dead-letter after 10 failed attempts

Практический шаблон архитектуры, управляемой событиями: обработка файлов

Распространённый шаблон архитектуры Azure, управляемой событиями: пользователь загружает файл в Blob Storage, после чего служба создаёт событие BlobCreated для Event Grid. Event Grid направляет событие в Azure Function, которая обрабатывает файл (изменяет размер изображения, извлекает текст, проверяет данные) и записывает результат в Azure SQL Database. Если обработка завершается ошибкой, событие помещается в очередь недоставленных сообщений в контейнере хранилища. Для всего этого конвейера не нужны ни постоянный опрос, ни постоянно работающие вычислительные ресурсы в периоды простоя.

// Azure Function: process image on BlobCreated event
module.exports = async function (context, eventGridEvent) {
  const blobUrl = eventGridEvent.data.url;
  const blobName = eventGridEvent.subject.split('/blobs/').pop();

  context.log('Processing image:', blobName);

  // Process via Cognitive Services Vision API
  const tags = await analyzeImage(blobUrl);

  // Write metadata to Cosmos DB via output binding
  context.bindings.cosmosOutput = {
    id: blobName,
    tags,
    processedAt: new Date().toISOString()
  };

  context.log('Processing complete for:', blobName);
};

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

Проверьте, насколько хорошо Вы понимаете концепции Microsoft Azure Fundamentals (AZ-900) из этого урока.

Итоги урока

В этом уроке Вы узнали, что Azure Event Grid направляет отдельные события от издателей к подписчикам с помощью доставки методом отправки, фильтрации и помещения недоставленных сообщений в специальную очередь, а также разобрали ключевое различие между Event Grid (реактивные события), Event Hubs (потоковая передача) и Service Bus (надёжный корпоративный обмен сообщениями). Кроме того, Вы узнали, как создавать конвейеры, управляемые событиями, связывая события Blob Storage с Event Grid и Azure Functions. Далее мы рассмотрим службы Azure DevOps.

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

Урок «Event Grid и событийная архитектура» бесплатный?

Да — полный текст урока «Event Grid и событийная архитектура» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Azure Fundamentals, подпишись на CoddyKit PRO. Курс Azure Fundamentals содержит 4 уроков всего.

Чему я научусь в уроке «Event Grid и событийная архитектура»?

Маршрутизируйте события от служб Azure и пользовательских издателей с помощью Event Grid, распределяйте их между несколькими подписчиками и сравнивайте Event Grid с Event Hubs и Service Bus. Ты практикуешь Azure Fundamentals с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.

Нужен ли мне опыт, чтобы начать Azure Fundamentals?

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

Сколько времени занимает урок «Event Grid и событийная архитектура»?

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

Можно ли писать и запускать код в этом уроке Azure Fundamentals?

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

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

  1. Триггеры и привязки Azure Functions
  2. Durable Functions для рабочих процессов с состоянием
  3. Azure Logic Apps
  4. Event Grid и событийная архитектура
← Назад к Azure Fundamentals