StreamInsight の回復性
システムの停止によって StreamInsight アプリケーションによるイベントの処理が中断される場合、通常、回復後のアプリケーションの出力についてその品質と適時性の要件に対応する必要があります。
出力ストリームのコンテンツは、中断が発生しなかった場合のコンテンツと一致する必要があります。
また、中断の時間はできる限り短時間にする必要があります。
StreamInsight の Premium Edition では、クエリの状態を定期的にディスクに保存できるチェックポイント機能が用意されています。この機能を入出力アダプターの関連機能と共に使用すると、中断から回復した後の出力ストリームの等価を達成できます。正しく記述された入力アダプターは、キャプチャされた最後のチェックポイント以降に欠落したイベントのみを再生するため、回復にかかる時間は最小限に抑えられます。
このトピックの内容
チェックポイント
回復性の 3 つのレベル
高ウォーターマーク
チェックポイントによって保存できないイベントと状態
入力アダプターによる再生
出力アダプターによる重複の削除
その他の情報
チェックポイント
StreamInsight チェックポイント操作により、クエリの状態は一貫してディスクに保持されます。中断後、クエリはチェックポイントに記録された状態に復元できます。
チェックポイント処理を行っただけでは、中断が発生しなかった場合にクエリによって生成されるイベントのストリームと中断の発生後に生成されるイベントのストリームが同じになるとは限りません。以下の 2 つの問題によって、同じになるかが左右されます。
**イベントが欠落する可能性がある。**チェックポイントの後に StreamInsight によって受信されたイベントと、中断と復元の間に発生したイベントはチェックポイントによってキャプチャされません。これらのイベントをクエリ出力に含めるには、これらをサーバーに再び送信する必要があります。この問題を解決するには、欠落したイベントを再生できる入力アダプターを使用する必要があります。
**イベントが重複する可能性がある。**最後のチェックポイントの後から中断の前までに StreamInsight で生成されたイベントは、入力アダプターが通常どおりにイベントを再生すると、中断からの回復中にもう一度生成されます。この問題を解決するには、これらの重複イベントを削除できる出力アダプターを使用する必要があります。
チェックポイント ログは、保持されたチェックポイント情報が含まれる一連のファイルです。このログは、サーバーが回復性を持つように設定したときに指定するディレクトリに保存されます。このディレクトリは、StreamInsight によってのみ使用されるよう予約され、不透過として扱われる必要があります。
[トップに戻る]
回復性の 3 つのレベル
StreamInsight を使用して達成できる回復性には 3 つのレベルが存在します。レベルの選択は、既存のアプリケーションとアダプターを変更するための要件と権限に応じて異なります。
**状態の保持。**チェックポイントを使用すると、入力アダプターまたは出力アダプターに変更を加えることなくクエリの状態を保存できます。このレベルの回復性では、最後のチェックポイントがキャプチャされた後に発生したイベントが欠落しているため、中断から回復した後のストリームと中断が発生しなかった場合のストリームが同じになるとは限りません。ただし、この問題は、等価の結果が必要ない状況や、一部の入力でほぼ正確な出力を達成できる状況では許容される場合があります。
**完全な出力。**入力アダプターを変更してイベントを再生することによって、欠落するイベントがないことを確認できます。回復されたクエリからの出力ストリームは、中断されていないクエリからの出力ストリームのスーパーセットと論理的に等価になり、追加のイベントは中断されていないストリームのイベントと重複します。
**等価の出力。**入力アダプターと出力アダプターを変更して重複イベントを削除することによって、論理的に等価な出力を保証できます。
[トップに戻る]
高ウォーターマーク
高ウォーターマークは、イベントのストリームで特定のポイントまで表示される最高レベルのアプリケーション時間です。チェックポイントが要求されると、StreamInsight は各入力で高ウォーターマークのチェックポイントをキャプチャします。
[トップに戻る]
チェックポイントによって保存できないイベントと状態
中断からの回復後の完全で等価な出力の前提条件を理解するには、StreamInsight チェックポイントによって保存できないイベントと状態を認識することが役立ちます。保存できないイベントと状態は、中断から回復後に使用できるように別個に保存する必要があります。
チェックポイントによって保存できないイベントと状態 |
解決方法 |
---|---|
最後のチェックポイントの後と中断の前に発生したイベント |
中断からの回復後に再生できるようにするには、これらのイベントをデータ ストアに保存する必要があります。 |
中断中に発生したイベント |
中断からの回復後に使用できるようにするには、これらのイベントをデータ ストアに保存する必要があります。 |
最後のチェックポイントの後から中断の前までに出力として生成されたイベントの情報 |
回復後に出力アダプターによって重複イベントが削除されるようにするには、これらのイベントをデータ ストアに保存する必要があります。 |
カスタム入出力アダプターによって保持される任意の状態 |
中断からの回復後に使用できるようにするには、カスタム入出力アダプターによってこの状態をデータ ストアに保存する必要があります。 |
[トップに戻る]
入力アダプターによる再生
StreamInsight アプリケーションが中断後に再起動すると、入力アダプター ファクトリの Create メソッドへの呼び出しによって、アダプター ファクトリに高ウォーターマークが提供されます (アダプター ファクトリがこの情報を受信するには、IHighWaterMarkInputAdapterFactory インターフェイスまたは IHighWaterMarkTypedInputAdapterFactory インターフェイスを実装する必要があります)。入力アダプターは、高ウォーターマークから入力ストリームを再生する必要があります。
すべての入力アダプターによる正確な再生により、完全な出力が保証されます。
そのため、完全な出力には次の要件が含まれます。
IHighWaterMarkInputAdapterFactory インターフェイスまたは IHighWaterMarkTypedInputAdapterFactory インターフェイスを実装する入力アダプター ファクトリ。
キャプチャされた最後のチェックポイントの後から中断の前までに発生したすべてのイベントの回復後の可用性。
中断中に発生したすべてのイベントの回復後の可用性。
すべての入力アダプターによるこれらのイベントの正確な再生。
クエリ状態のチェックポイント処理と回復。
[トップに戻る]
出力アダプターによる重複の削除
出力ストリームのチェックポイントの場所を指定するため、出力アダプター ファクトリの Create メソッドへの呼び出しによって、高ウォーターマークとこの高ウォーターマークからのオフセットの両方が提供されます (アダプター ファクトリがこの情報を受信するには、IHighWaterMarkOutputAdapterFactory インターフェイスまたは IHighWaterMarkTypedOutputAdapterFactory インターフェイスを実装する必要があります)。チェックポイントに対応する出力ストリームがストリームの任意のポイントにある可能性があるため、このオフセットは必須です。
クエリが適切に再生されると、内部のクエリ状態は最後のチェックポイントになり、最後のチェックポイントの後に生成されたすべてのイベントは再起動時に生成されます。つまり、中断前ではなく最後のチェックポイント後に出力として生成されたすべてのイベントは、回復時にもう一度生成されます。これらは重複しているので、出力アダプターで削除される必要があります。これらの削除方法は、出力アダプターによって異なります。たとえば、重複コピーは無視できます。
すべての入力アダプターによる正確な再生の後の、すべての出力アダプターによる重複の正確な削除によって、等価な出力が保証されます。
そのため、等価な出力には、これまで説明した完全な出力の要件に加えて、次の要件が含まれます。
IHighWaterMarkOutputAdapterFactory インターフェイスまたは IHighWaterMarkTypedOutputAdapterFactory インターフェイスを実装する出力アダプター ファクトリ。
キャプチャされた最後のチェックポイントの後から中断の前までに発生したすべてのイベントの回復後の可用性。(ストリームのこの場所は、作成されたときに出力アダプター ファクトリに提供される高ウォーターマークとオフセットによって指定されます)。
すべての出力アダプターによる重複イベントの正確な削除。
[トップに戻る]
その他の情報
回復性 StreamInsight アプリケーションの構築、監視、およびトラブルシューティングの詳細については、次のトピックを参照してください。
再生と重複除外を含む回復性アプリケーションのエンド ツー エンド サンプルについては、Codeplex の StreamInsight サンプル ページのチェックポイント サンプルを参照してください。
[トップに戻る]