Disponibilità e coerenza nell'Hub eventi

Questo articolo fornisce informazioni sulla disponibilità e la coerenza supportate da Hub eventi di Azure.

Disponibilità

Hub eventi di Azure distribuisce il rischio di errori irreversibili di singoli computer o anche di rack completi tra cluster che si estendono su più domini di errore all'interno di un data center. Implementa meccanismi di rilevamento degli errori e failover trasparenti in modo che il servizio continui a funzionare entro i livelli di servizio assicurati e in genere senza interruzioni evidenti quando si verificano tali errori.

Se uno spazio dei nomi di Hub eventi viene creato in un'area con zone di disponibilità, il rischio di interruzione viene ulteriormente distribuito tra tre strutture separate fisicamente e il servizio ha una capacità sufficiente per affrontare immediatamente la perdita completa e irreversibile dell'intera struttura. Per altre informazioni, vedere Hub eventi di Azure - Ripristino di emergenza geografico.

Quando un'applicazione client invia eventi a un hub eventi senza specificare una partizione, gli eventi vengono distribuiti automaticamente tra le partizioni nell'hub eventi. Se una partizione non è disponibile per qualche motivo, gli eventi vengono distribuiti tra le partizioni rimanenti. Questo comportamento consente la maggiore quantità di tempo di attività. Per i casi d'uso che richiedono il tempo massimo, questo modello è preferito anziché inviare eventi a una partizione specifica.

Consistenza

In alcuni scenari, l'ordinamento degli eventi può essere importante. È ad esempio, potrebbe essere necessario che il sistema back-end elabori un comando di aggiornamento prima di un comando di eliminazione. In questo scenario, un'applicazione client invia eventi a una partizione specifica in modo che l'ordinamento venga mantenuto. Quando un'applicazione consumer usa questi eventi dalla partizione, vengono letti in ordine.

Con questa configurazione, tenere presente che se la partizione specifica alla quale si esegue l'invio non è disponibile, si riceverà una risposta di errore. Come punto di confronto, se non si ha un'affinità a una singola partizione, il servizio Hub eventi invia l'evento alla partizione disponibile successiva.

Pertanto, se la disponibilità elevata è più importante, non puntare a una partizione specifica (usando ID di partizione/chiave). L'uso dell'ID di partizione/chiave effettua il downgrade della disponibilità di un hub eventi a livello di partizione. In questo scenario si sta facendo una scelta esplicita tra la disponibilità (nessun ID di partizione/chiave) e la coerenza (aggiunta di eventi a una partizione specifica). Per informazioni dettagliate sulle partizioni in Hub eventi, vedere Partizioni.

Appendice

Inviare eventi senza specificare una partizione

È consigliabile inviare eventi a un hub eventi senza impostare le informazioni di partizione per consentire al servizio Hub eventi di bilanciare il carico tra partizioni. Vedere la guida introduttiva seguente per informazioni su come eseguire questa operazione in diversi linguaggi di programmazione.

Inviare eventi a una partizione specifica

In questa sezione viene illustrato come inviare eventi a una partizione specifica usando diversi linguaggi di programmazione.

Per inviare eventi a una partizione specifica, creare il batch usando il metodo EventHubProducerClient.CreateBatchAsync specificando PartitionId o PartitionKey in CreateBatchOptions. Il codice seguente invia un batch di eventi a una partizione specifica specificando una chiave di partizione. Hub eventi garantisce che tutti gli eventi che condividono un valore di chiave di partizione vengano archiviati insieme e recapitati in ordine di arrivo.

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

È anche possibile usare il metodo EventHubProducerClient.SendAsync specificando PartitionId o PartitionKey in SendEventOptions.

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

Passaggi successivi

Per ulteriori informazioni su Hub eventi visitare i collegamenti seguenti: