StreamInsight 恢復功能

當系統失效中斷 StreamInsight 應用程式對事件的處理時,您通常會要求復原後應用程式輸出的品質和時刻表。

  1. 您希望輸出資料流的內容符合未發生中斷時的內容。

  2. 您希望中斷的持續時間越短越好。

Premium 版的 StreamInsight 提供一個檢查點檢查功能,可將查詢的狀態定期儲存到磁碟。您可以使用此功能與輸入和輸出配接器的相關功能,達到從中斷復原後輸出資料流的相等狀況。正確撰寫的輸入配接器僅會重新執行自擷取最後一個檢查點以後遺漏的事件,因此復原所需的時間會維持最少。

本主題內容

  • 檢查點

  • 恢復功能的三個層級

  • 上限標準

  • 檢查點檢查無法儲存的事件和狀態

  • 由輸入配接器重新執行

  • 透過輸出配接器排除重複項目

  • 詳細資訊

檢查點

StreamInsight 檢查點作業會以一致的方式,將查詢的狀態保存到磁碟中。中斷之後,可以將查詢還原到其在檢查點的狀態。

檢查點檢查本身不保證未中斷之查詢所產生的事件資料流與中斷發生後產生的事件資料流相等。有兩個問題可能會影響相等:

  • **事件可能遭到遺漏。**檢查點不會擷取 StreamInsight 在檢查點之後收到的事件,以及在中斷和復原之間發生的事件。您必須向伺服器再次呈現這些事件,才能包含在查詢輸出中。解決這個問題需要能夠重新執行遺漏事件之輸入配接器的參與。

  • **事件可能遭到複製。**當輸入配接器如預期般重新執行事件時,將會在從中斷復原期間再次產生中斷之前,由 StreamInsight 在最後一個檢查點之後產生的事件。解決這個問題需要能夠排除這些重複事件之輸出配接器的參與。

檢查點記錄檔是一組檔案,其中包含已保存的檢查點資訊。記錄檔會儲存到您在設定具有恢復功能之伺服器時指定的目錄。您應該將此目錄僅保留給 StreamInsight 使用,而且應該將其視為不透明。

[回到頂端]

恢復功能的三個層級

您可以使用 StreamInsight 實現的恢復功能有三個層級。如何選取層級取決於您的需求,以及您變更現有應用程式與配接器的能力。

  1. **狀態保留:**您可以使用檢查點儲存查詢的狀態,而不必對輸入或輸出配接器進行任何變更。這個層級的恢復功能不保證從中斷復原後產生的資料流與未發生中斷時的資料流相同,因為已經遺失擷取最後一個檢查點之後發生的事件。不過,這在不需要相等結果的情況下,以及在可以使用部分輸入達成大約正確之輸出的情況下,或許是可以接受的。

  2. **完整輸出:**您可以保證透過變更輸入配接器重新執行事件將不會遺漏任何事件。來自已復原之查詢的輸出資料流與來自未中斷之查詢的輸出資料流超集,在邏輯上相等,而且額外的事件將是未中斷之資料流中的重複事件。

  3. **相等輸出:**您可以透過變更輸入配接器,同時也變更輸出配接器來排除重複事件,保證在邏輯上相等的輸出。

[回到頂端]

上限標準

上限標準是在事件資料流中,高達特定點時所看到的應用程式時間上限。要求檢查點時,StreamInsight 會針對每個輸入,擷取上限標準的檢查點。

[回到頂端]

檢查點檢查無法儲存的事件和狀態

為了解從中斷復原後完整相等之輸出的必要條件,辨識 StreamInsight 檢查點檢查無法儲存的事件和狀態相當有幫助。這些事件以及這個狀態必須分別保存,以便在從中斷復原之後使用。

檢查點檢查無法儲存的事件或狀態

解決方案

在最後一個檢查點之後、中斷之前抵達的事件

這些事件必須保存在資料存放區中,以便在從中斷復原之後,用於重新執行。

在中斷期間抵達的事件

這些事件必須保存在資料存放區中,以便在從中斷復原之後使用。

在最後一個檢查點之後、中斷之前,當做輸出產生的事件知識

為支援輸出配接器在復原之後移除重複的事件,這些事件必須保存在資料存放區中。

透過自訂輸入或輸出配接器維護的任何狀態

這個狀態必須透過自訂輸入或輸出配接器保存在資料存放區中,以便在從中斷復原之後使用。

[回到頂端]

由輸入配接器重新執行

當 StreamInsight 應用程式在中斷之後重新啟動時,對輸入配接器 Factory 之 Create 方法的呼叫會將上限標準提供給配接器 Factory (配接器 Factory 必須實作 IHighWaterMarkInputAdapterFactory 或 IHighWaterMarkTypedInputAdapterFactory 介面,才能收到這個資訊)。輸入配接器應該從上限標準重新執行其輸入資料流。

透過所有輸入配接器正確重新執行可保證完整的輸出。

因此,完整的輸出具有下列需求:

  • 實作 IHighWaterMarkInputAdapterFactory or IHighWaterMarkTypedInputAdapterFactory 介面的輸入配接器 Factory。

  • 針對中斷之前擷取之最後一個檢查點之後發生的所有事件,其復原之後的可用性。

  • 在中斷期間發生之所有事件復原之後的可用性。

  • 透過所有輸入配接器對這些事件的正確重新執行。

  • 查詢狀態的檢查點檢查與復原。

[回到頂端]

透過輸出配接器排除重複項目

若要識別檢查點在輸出資料流中的位置,對輸出配接器 Factory 之 Create 方法的呼叫會同時提供上限標準以及與此上限標準間的位移 (配接器 Factory 必須實作 IHighWaterMarkOutputAdapterFactory 或 IHighWaterMarkTypedOutputAdapterFactory 介面,才能收到這個資訊)。這個位移是必要的,因為在輸出資料流中,對應到檢查點的位置可能會落在資料流中的任何點上。

如果有正確重新執行查詢,內部查詢狀態就是最後一個檢查點的狀態,而且在擷取最後一個檢查點之後產生的任何事件都會在重新啟動時產生。也就是說,在最後一個檢查點之後,但在中斷之前,當做輸出所產生的任何事件都會在復原期間再產生一次。這些是輸出配接器必須移除的重複項目。如何移除這些重複項目,取決於輸出配接器:例如,您可以忽略重複副本。

透過所有輸出配接器正確排除重複項目 (在透過所有輸入配接器正確重新執行之後) 可保證相等的輸出。

因此,相等的輸出除了先前針對完整輸出所列的需求之外,還具有下列需求:

  • 實作 IHighWaterMarkOutputAdapterFactory or IHighWaterMarkTypedOutputAdapterFactory 介面的輸出配接器 Factory。

  • 針對中斷之前擷取之最後一個檢查點之後發生的所有事件,其復原之後的可用性 (資料流中的這個位置是以建立該資料流時,提供給輸出配接器 Factory 的上限標準和位移識別)。

  • 透過所有輸出配接器正確移除重複的事件。

[回到頂端]

詳細資訊

如需有關建立、監視與疑難排解具有恢復功能之 StreamInsight 應用程式的詳細資訊,請參閱下列主題:

如需包含重新執行和重複資料刪除之具有恢復功能的應用程式端對端程式碼範例,請參閱 Codeplex 上的 StreamInsight 範例頁面中的<檢查點檢查範例>。

[回到頂端]