Resilienza di StreamInsight

Quando l'elaborazione di eventi mediante un'applicazione StreamInsight viene arrestata da un'interruzione del sistema, si dispone in genere di requisiti per la qualità e la puntualità dell'output dell'applicazione dopo il recupero.

  1. Il contenuto di flussi di output deve corrispondere a quello che sarebbe stato se non si fosse verificata alcuna interruzione.

  2. Inoltre, la durata dell'interruzione deve essere la più breve possibile.

L'edizione Premium di StreamInsight fornisce una caratteristica di checkpoint che consente di salvare periodicamente lo stato delle query su disco. Questa caratteristica può essere utilizzata insieme ad altre correlate degli adattatori di input e output per ottenere l'equivalenza del flusso di output dopo il recupero da un'interruzione. Poiché gli adattatori di input scritti correttamente consentono di riprodurre solo gli eventi mancanti dall'ultimo checkpoint acquisito, la quantità di tempo impiegata nel recupero è mantenuta al minimo.

In questo argomento

  • Checkpoint

  • Tre livelli di resilienza

  • Limiti massimi

  • Eventi e stati che non possono essere salvati dal checkpoint

  • Riprodurre mediante adattatori di input

  • Eliminazione di duplicati mediante adattatori di output

  • Ulteriori informazioni

Checkpoint

Un'operazione di checkpoint di StreamInsight consente di rendere persistente lo stato di una query su disco in modo coerente. Dopo un'interruzione, la query può essere ripristinata al relativo stato al momento del checkpoint.

Il solo checkpoint non consente di garantire che il flusso di eventi generati da una query in assenza di un'interruzione sia equivalente al flusso di eventi generati dopo un'interruzione, dal momento che due problemi possono influire sull'equivalenza:

  • Possibilità di eventi mancanti. Gli eventi ricevuti da StreamInsight dopo il checkpoint, e quelli che si sono verificati tra un'interruzione e un recupero, non vengono acquisiti da un checkpoint. Affinché siano inclusi nell'output della query, questi eventi devono essere presentati nuovamente al server. Per risolvere questo problema, è necessario utilizzare gli adattatori di input che sono in grado di riprodurre gli eventi mancanti.

  • Possibilità di eventi duplicati. Gli eventi generati da StreamInsight dopo l'ultimo checkpoint prima dell'interruzione verranno generati nuovamente durante il recupero dall'interruzione quando vengono riprodotti dagli adattatori di input come previsto. Per risolvere questo problema, è necessario utilizzare gli adattatori di output che sono in grado di eliminare gli eventi duplicati.

Il log del checkpoint è il set di file in cui sono contenute le informazioni sui checkpoint persistenti. Il log viene salvato in una directory specificata durante la configurazione del server per la resilienza. Questa directory deve essere riservata per l'utilizzo solo da parte di StreamInsight e deve essere considerata come opaca.

[Torna all'inizio]

Tre livelli di resilienza

Con StreamInsight è possibile ottenere tre livelli di resilienza. La selezione di un livello dipende dai requisiti e dalla possibilità di modificare le applicazioni e gli adattatori esistenti.

  1. Memorizzazione dello stato. I checkpoint consentono di salvare lo stato delle query senza apportare alcuna modifica agli adattatori di input o di output. Questo livello di resilienza non garantisce che il flusso risultante dopo il recupero da un'interruzione sia equivalente al flusso qualora non si fosse verificata alcuna interruzione, dal momento che gli eventi che si sono verificati dopo l'ultimo checkpoint acquisito sono andati persi. Tuttavia, questa condizione può risultare accettabile nelle situazioni in cui non sono necessari risultati equivalenti e laddove è possibile ottenere un output approssimativamente corretto con input parziale.

  2. Output completo. È possibile garantire l'assenza di eventi mancanti modificando gli adattatori di input per la riproduzione degli eventi. Il flusso di output da una query recuperata sarà logicamente equivalente a un superset del flusso di output da una query ininterrotta e gli eventi aggiuntivi saranno duplicati di eventi nel flusso senza interruzioni.

  3. Output equivalente. È possibile garantire un output logicamente equivalente modificando gli adattatori di input nonché quelli di output per eliminare gli eventi duplicati.

[Torna all'inizio]

Limiti massimi

Il limite massimo è il tempo applicazione più elevato visualizzato fino a un punto specifico nel flusso di eventi. Quando viene richiesto un checkpoint, StreamInsight consente di acquisire un checkpoint come limite massimo in ognuno degli input.

[Torna all'inizio]

Eventi e stati che non possono essere salvati dal checkpoint

Per determinare i prerequisiti per un output completo ed equivalente dopo il recupero da un'interruzione, è utile riconoscere gli eventi e gli stati che non possono essere salvati dal checkpoint di StreamInsight. Questi eventi e questi stati devono essere resi separatamente persistenti per essere disponibili dopo il recupero da un'interruzione.

Eventi e stati che non possono essere salvati dal checkpoint

Soluzione

Eventi che arrivano dopo l'ultimo checkpoint e prima dell'interruzione

Per essere disponibili per la riproduzione dopo il recupero da un'interruzione, questi eventi devono essere persistenti in un archivio dati.

Eventi che arrivano durante l'interruzione

Per essere disponibili dopo il recupero da un'interruzione, questi eventi devono essere persistenti in un archivio dati.

Conoscenza di eventi generati come output dopo l'ultimo checkpoint e prima dell'interruzione

Per supportare la rimozione di eventi duplicati mediante adattatori di output dopo il recupero, questi eventi devono essere resi persistenti in un archivio dati.

Qualsiasi stato gestito da adattatori di input o di output personalizzati

Per essere disponibile dopo il recupero da un'interruzione, questo stato deve essere reso persistente in un archivio dati dagli adattatori di input o di output personalizzati.

[Torna all'inizio]

Riprodurre mediante adattatori di input

Quando un'applicazione StreamInsight viene riavviata dopo un'interruzione, la chiamata al metodo Create della factory dell'adattatore di input fornisce il limite massimo alla factory dell'adattatore. Tramite la factory dell'adattatore deve essere implementata l'interfaccia IHighWaterMarkInputAdapterFactory o IHighWaterMarkTypedInputAdapterFactory affinché sia possibile ricevere queste informazioni. È previsto che l'adattatore di input consenta la riproduzione del relativo flusso di input dal limite massimo.

Una riproduzione corretta da ogni adattatore di input offre la garanzia che l'output sia completo.

Pertanto, un output completo dispone dei requisiti seguenti:

  • Implementazione dell'interfaccia IHighWaterMarkInputAdapterFactory o IHighWaterMarkTypedInputAdapterFactory da parte di una factory dell'adattatore di input.

  • Disponibilità dopo il recupero di tutti gli eventi che si sono verificati dopo l'ultimo checkpoint acquisito prima dell'interruzione.

  • Disponibilità dopo il recupero di tutti gli eventi che si sono verificati durante l'interruzione.

  • Riproduzione corretta di questi eventi mediante tutti gli adattatori di input.

  • Checkpoint e recupero dello stato della query.

[Torna all'inizio]

Eliminazione di duplicati mediante adattatori di output

Per identificare il percorso del checkpoint nel flusso di output, la chiamata al metodo Create della factory dell'adattatore di output fornisce sia il limite massimo sia un offset da tale limite. Tramite la factory dell'adattatore deve essere implementata l'interfaccia IHighWaterMarkOutputAdapterFactory o IHighWaterMarkTypedOutputAdapterFactory affinché sia possibile ricevere queste informazioni. L'offset è necessario perché il percorso nel flusso di output che corrisponde al checkpoint può rientrare in qualsiasi punto nel flusso.

Se una query viene riprodotta correttamente, lo stato della query interna sarà quello al momento dell'ultimo checkpoint e tutti gli eventi generati dopo l'ultimo checkpoint acquisito verranno generati durante il riavvio. Pertanto, tutti gli eventi generati come output dopo l'ultimo checkpoint ma prima dell'interruzione verranno generati una seconda volta durante il recupero. Si tratta dei duplicati che devono essere rimossi dall'adattatore di output. La modalità di rimozione di questi ultimi viene scelta dall'adattatore di output; ad esempio è possibile che le copie duplicate vengano ignorate.

L'eliminazione corretta di duplicati mediante ogni adattatore di output (dopo una riproduzione corretta mediante tutti gli adattatori di input) consente di garantire che l'output sia equivalente.

Pertanto, un output che è equivalente dispone dei requisiti seguenti, oltre a quelli elencati precedentemente per un output completo:

  • Implementazione dell'interfaccia IHighWaterMarkOutputAdapterFactory o IHighWaterMarkTypedOutputAdapterFactory da parte di una factory dell'adattatore di output.

  • Disponibilità dopo il recupero di tutti gli eventi che si sono verificati dopo l'ultimo checkpoint acquisito prima dell'interruzione. Questo percorso nel flusso viene identificato dal limite massimo e dall'offset forniti alla factory dell'adattatore di output durante la creazione.

  • Rimozione corretta degli eventi duplicati mediante tutti gli adattatori di output.

[Torna all'inizio]

Ulteriori informazioni

Per ulteriori informazioni sulla compilazione, il monitoraggio e la risoluzione dei problemi relativi ad applicazioni StreamInsight resilienti, vedere gli argomenti seguenti:

Per un esempio di codice end-to-end di un'applicazione resiliente con riproduzione e deduplicazione, vedere l'esempio di checkpoint nella pagina di esempi relativi a StreamInsight su CodePlexhttps://go.microsoft.com/fwlink/?LinkID=180356.

[Torna all'inizio]