Сетка событий и надежность

Служба "Сетка событий Azure" позволяет легко создавать приложения с архитектурой на основе событий. Это решение обеспечивает встроенную поддержку событий, поступающих из таких служб Azure, как хранилища BLOB-объектов и группы ресурсов. В Сетке событий также предусмотрена поддержка собственных событий с помощью пользовательских разделов.

Дополнительные сведения об использовании службы "Сетка событий" см. в разделе Создание и маршрутизация пользовательских событий с помощью службы "Сетка событий Azure".

Сведения о том, как Сетка событий повышает надежность рабочей нагрузки, см. в статье Аварийное восстановление на стороне сервера с учетом географии в Сетке событий Azure.

Представленные ниже разделы связаны с Сеткой событий Azure и обеспечением надежности.

  • Рекомендации по проектированию
  • Контрольный список для настройки
  • Рекомендуемые параметры конфигурации
  • Артефакты источника

Рекомендации по проектированию

Сетка событий Azure предоставляет соглашение об уровне обслуживания в отношении времени доступности. Подробнее см. в разделе Соглашение об уровне обслуживания для Сетки событий.

Контрольный список

Вы настроили Сетку событий Azure с учетом требований к обеспечению надежности?

  • Разверните экземпляр Сетки событий для каждого региона, если используется решение Azure с несколькими регионами.
  • Отслеживайте неудачную доставку событий в Сетке событий.
  • Используйте пакетные события.
  • Размер пакета событий не может превышать 1MB.
  • Настройте и оптимизируйте выбор размера пакета во время нагрузочного тестирования.
  • Убедитесь, что сообщения сетки событий принимаются с HTTP 200-204 ответами, только если доставка в конечную точку, содержащую пользовательский код.
  • Отслеживайте неудачную публикацию событий в Сетке событий.

Рекомендации по настройке

При настройке Сетки событий Azure примите во внимание следующие рекомендации по оптимизации надежности:

Рекомендация Description
Отслеживайте неудачную доставку событий в Сетке событий. Метрика Delivery Failed будет увеличиваться каждый раз, когда сообщение не удается доставить в обработчик событий (превышение времени ожидания или код состояния, отличный от 200-204 HTTP). Если событие нельзя потерять, настройте учетную запись хранения для очереди недоставленных сообщений (DLQ). В учетную запись DLQ передаются события, которые не удалось доставить после максимального числа повторных попыток. При необходимости реализуйте систему уведомлений в учетной записи хранения DLQ, например, путем обработки события новый файл с помощью Сетки событий.
Используйте пакетные события в сценариях с высокой пропускной способностью. Служба будет доставлять подписчикам массив json с несколькими событиями вместо массива с одним событием. Приложение, принимающее данные, должно иметь возможность обрабатывать эти массивы.
Размер пакета событий не может превышать 1MB. Если полезная нагрузка сообщений слишком велика, в пакет будут помещены только одно или несколько сообщений подходящего размера. Службе, принимающей данные, придется обработать больше пакетов событий. Если событие содержит большой объем полезных данных, рекомендуется хранить полезные данные в других местах, например, в хранилище BLOB-объектов, и передавать в событии ссылку на них. При интеграции со сторонними службами с использованием схемы CloudEvents размер события не должен превышать 64KB.
Настройте и оптимизируйте выбор размера пакета во время нагрузочного тестирования. Выбор размера пакета зависит от размера полезных данных и объема сообщения.
Отслеживайте неудачную публикацию событий в Сетке событий. В метрике Unmatched будут отображаться сообщения, которые опубликованы, но не соответствуют ни одной из подписок. Последнее обстоятельство может быть намеренным в зависимости от архитектуры приложения.

Артефакты источника

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

Resources 
| where type == 'microsoft.eventgrid/topics'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

Чтобы получить Идентификатор ресурса существующих частных конечных точек для доменов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/domains' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

Чтобы определить состояние Доступа из публичной сети для всех доступных доменов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/domains' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

Чтобы определить Правила брандмауэра для всех общедоступных доменов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/domains' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

Чтобы определить Правила брандмауэра для всех общедоступных разделов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/topics' and properties['publicNetworkAccess'] == 'Enabled'
| project name, resourceGroup, location, subscriptionId, properties['inboundIpRules']

Чтобы получить Идентификатор ресурса существующих частных конечных точек для разделов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/topics' and notnull(properties['privateEndpointConnections']) 
| mvexpand properties['privateEndpointConnections'] 
| project-rename privateEndpointConnections = properties_privateEndpointConnections 
| project name, resourceGroup, location, subscriptionId, privateEndpointConnections['properties']['privateEndpoint']['id']

Чтобы определить тип Входной схемы для всех доступных доменов Сетки событий, используйте следующую схему:

Resources 
| where type == 'microsoft.eventgrid/domains'
| project name, resourceGroup, location, subscriptionId, properties['inputSchema']

Чтобы определить состояние Доступа из публичной сети для всех доступных разделов Сетки событий, используйте следующий запрос:

Resources 
| where type == 'microsoft.eventgrid/topics' 
| project name, resourceGroup, location, subscriptionId, properties['publicNetworkAccess']

Следующий шаг