Disponibilité et cohérence dans Event Hubs

Cet article fournit des informations sur la disponibilité et la cohérence prises en charge par Azure Event Hubs.

Disponibilité

Azure Event Hubs répartit le risque de défaillances catastrophiques d’ordinateurs individuels ou même de racks complets sur des clusters qui s’étendent sur plusieurs domaines d’échec au sein d’un centre de donnée. Il implémente des mécanismes transparents de détection des défaillances et de basculement, de sorte que le service continue à fonctionner dans les limites des niveaux de service assurés et, en général, sans interruption notable lorsque de telles défaillances se produisent.

Si un espace de noms Event Hubs est créé dans une région avec des zones de disponibilité, le risque de panne est davantage réparti dans trois sites physiquement séparés. Le service dispose par ailleurs de réserves de capacité suffisantes pour faire face instantanément à la perte complète et irrémédiable de l’ensemble du site. Pour en savoir plus, consultez Azure Event Hubs – Géo-reprise d’activité après sinistre.

Lorsqu’une application cliente envoie des événements à un hub d’événements sans spécifier de partition, les événements sont automatiquement distribués entre les partitions de votre hub d’événements. Si une partition n’est pas disponible pour une raison quelconque, les événements sont distribués entre les partitions restantes. Ce comportement offre le meilleur temps d’activité. Pour les cas d’usage qui requièrent la durée maximale de bon fonctionnement, ce modèle est préférable à l’envoi des événements à une partition spécifique.

Cohérence

Dans certains scénarios, l’ordre des événements peut être important. Par exemple, vous souhaiterez peut-être que votre système principal traite une commande de mise à jour avant une commande de suppression. Dans ce scénario, une application cliente envoie des événements à une partition spécifique afin que l’ordre soit conservé. Lorsqu’une application consommateur consomme ces événements à partir de la partition, ceux-ci sont lus dans l’ordre.

Avec cette configuration, gardez à l’esprit que si la partition particulière à laquelle vous envoyez les événements n’est pas disponible, vous recevrez une réponse d’erreur. À titre de comparaison, si vous n’avez pas d’affinité avec une partition unique, le service Event Hubs envoie votre événement à la prochaine partition disponible.

Par conséquent, si la haute disponibilité est la plus importante, ne ciblez pas une partition spécifique (à l’aide de l’ID/clé de partition). L’utilisation d’un ID/clé de partition rétrograde la disponibilité d’un hub d’événements au niveau de la partition. Dans ce scénario, vous effectuez un choix explicite entre la disponibilité (aucun ID/clé de partition) et la cohérence (épinglage d’événements à une partition spécifique). Pour plus d’informations sur les partitions dans Event Hubs, consultez Partitions.

Annexe

Envoyer des événements sans spécifier de partition

Nous vous recommandons d’envoyer des événements à un Event Hub sans définir des informations de partition pour permettre au service Event Hubs d’équilibrer la charge entre les partitions. Consultez les Démarrages rapides suivants pour savoir comment procéder dans différents langages de programmation.

Envoyer des événements à une partition spécifique

Dans cette section, vous allez apprendre à envoyer des événements à une partition spécifique à l’aide de différents langages de programmation.

Pour envoyer des événements à une partition spécifique, créez le lot à l’aide de la méthode EventHubProducerClient.CreateBatchAsync en spécifiant le PartitionId ou le PartitionKey dans CreateBatchOptions. Le code suivant envoie un lot d’événements à une partition spécifique en spécifiant une clé de partition. Azure Event Hubs garantit que tous les événements qui partagent une clé de partition sont stockés ensemble et livrés dans l’ordre d’arrivée.

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

Vous pouvez également utiliser la méthode EventHubProducerClient.SendAsync en spécifiant PartitionID ou PartitionKey dans SendEventOptions.

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

Étapes suivantes

Vous pouvez en apprendre plus sur Event Hubs en consultant les liens suivants :