事件中樞的可用性和一致性

本文提供 Azure 事件中樞所支援的可用性和一致性相關資訊。

可用性

Azure 事件中樞會將個別機器、甚至是整個機架的重大失敗風險,分散到橫跨資料中心內多個失敗網域的各個叢集中。 其會實作透明的失敗偵測和容錯移轉機制,讓服務能在發生這類失敗時,繼續在保證的服務等級內運作,而且通常不會感覺到有發生中斷。

如果在具有可用性區域的區域中建立事件中樞命名空間,則中斷風險會進一步分散到三個位於不同實體位置的設備,而且服務會保留足夠的容量,而可立即應付徹底失去整個設備的重大事件。 如需詳細資訊,請參閱 Azure 事件中樞 - 異地災害復原

當用戶端應用程式將事件傳送到事件中樞卻未指定分割區時,系統會自動將事件分散到事件中樞內的各個分割區。 如果某個分割區因為某些原因而無法使用,則會將事件分散到其餘分割區。 此行為可讓運作時間達到最長。 如果是需要最長運作時間的使用案例,則建議使用此模型,而不要將事件傳送到特定分割區。

一致性

在某些案例中,事件的順序可能相當重要。 例如,您可能想要讓後端系統在刪除命令之前先處理更新命令。 在此案例中,用戶端應用程式會將事件傳送至特定分割區,以維持事件的順序。 當取用者應用程式從分割區取用這些事件時,便會依序讀取這些事件。

使用這個組態時,請記住,如果作為您傳送目的地的特定分割區無法使用,您將會收到錯誤回應。 相較之下,如果您不傾向使用單一分割區,「事件中樞」服務就會將事件傳送至下一個可用的分割區。

因此,如果高可用性對您來說最重要,則請勿 (使用分割區識別碼/金鑰) 將目標鎖定在特定分割區。 使用分割區識別碼/金鑰會將事件中樞的可用性降級至分割區層級。 在此案例中,您必須在可用性 (沒有分割區識別碼/金鑰) 和一致性 (將事件繫結至特定分割區) 之間做出明確抉擇。 如需事件中樞內分割區的詳細資訊,請參閱分割區

附錄

傳送事件但不指定分割區

建議您在將事件傳送到事件中樞時不要設定分割區資訊,以便讓事件中樞服務可以將負載平衡分配給各個分割區。 請參閱下列快速入門,以了解如何以不同的程式設計語言執行這項作業。

將事件傳送到特定分割區

在本節中,您將了解如何使用不同的程式設計語言,將事件傳送到特定分割區。

若要將事件傳送到特定分割區,請在 CreateBatchOptions 中指定 PartitionIdPartitionKey,以使用 EventHubProducerClient.CreateBatchAsync 方法來建立批次。 下列程式碼會藉由指定分割區索引鍵,將一批事件傳送到特定分割區。 事件中樞能確保所有共用分割區索引鍵值的事件會儲存在一起,並依抵達順序來傳遞。

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

您也可以在 SendEventOptions 中指定 PartitionIdPartitionKey,以使用 EventHubProducerClient.SendAsync 方法。

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

下一步

您可以造訪下列連結以深入了解事件中樞︰