Доступность и согласованность в Центрах событий

В этой статье приведены сведения о доступности и согласованности, поддерживаемой в Центрах событий Azure.

Доступность

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

Если пространство имен Центров событий создается в регионе с зонами доступности, риск сбоя дополнительно распространяется на три физически разделенных объекта, и служба имеет достаточно резервов емкости, чтобы мгновенно справиться с полной катастрофической потерей всего объекта. Дополнительные сведения см. в статье Географическое аварийное восстановление в Центрах событий Azure.

Когда клиентское приложение отправляет события в концентратор событий без указания секции, события автоматически распределяются между секциями в концентраторе событий. Если секция по какой-либо причине недоступна, события распределяются между остальными секциями. Такое поведение обеспечивает наивысший показатель времени непрерывной работы. Для вариантов использования, требующих максимального времени доступности, рекомендуется использовать эту модель, а не отправлять события в определенную секцию.

Consistency

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

Применяя такую конфигурацию, учитывайте, что в случае недоступности определенной секции, в которую выполняется отправка, вы получите сообщение об ошибке. Для сравнения: если не привязывать отправку к одной секции, то служба Центров событий отправляет событие в следующую доступную секцию.

Таким образом, если высокий уровень доступности очень важен, не следует указывать конкретную секцию (с помощью идентификатора или ключа секции). Использование идентификатора или ключа секции понижает доступность концентратора событий до уровня секции. В этом сценарии вы делаете явный выбор между доступностью (без использования идентификатора или ключа секции) и согласованностью (закрепление событий в конкретной секции). Подробные сведения о секциях в Центрах событий см. в этом разделе.

Приложение

Отправка событий без указания секции

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

Отправка событий в определенную секцию

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

Чтобы отправить события в определенную секцию, создайте пакет с помощью метода EventHubProducerClient.CreateBatchAsync, указав в CreateBatchOptions значение PartitionId или PartitionKey. Указанный ниже код отправляет пакет событий в определенную секцию, указывая ее ключ. Центры событий хранят вместе все события, использующие одинаковое значение ключа секции, и доставляют их в порядке поступления.

var batchOptions = new CreateBatchOptions { PartitionKey = "cities" };
using var eventBatch = await producer.CreateBatchAsync(batchOptions);

Вы также можете использовать метод EventHubProducerClient.SendAsync, указав в SendEventOptions значение PartitionId или PartitionKey.

var sendEventOptions  = new SendEventOptions { PartitionKey = "cities" };
// create the events array
producer.SendAsync(events, sendOptions)

Дальнейшие действия

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