Azure IoT 中樞 的可靠性

Azure IoT 中樞 是一種託管於雲端的服務,作為物聯網應用與其連接裝置間通訊的中央訊息樞紐。

使用Azure時,可靠性是共同責任。 Microsoft 提供一系列功能以支援韌性與復原。 您有責任瞭解這些功能在您使用的所有服務中如何運作,並選取符合業務目標和正常運作時間目標所需的功能。

本文說明如何讓 IoT 中樞 具備多種潛在故障與問題的韌性,包括短暫故障、可用性區域故障及區域故障。 同時說明如何利用備份來從其他類型的問題中復原,並強調關於 IoT 中樞 服務水準協議(SLA)的一些重要資訊。

可靠性的生產部署建議

對於生產工作負載,我們建議您遵循以下建議:

  • 將您的 IoT hub 部署在支援運算與資料元件區域性備援的地區。 如需詳細資訊,請參閱 需求
  • 在所有與IoT 中樞通訊的裝置與應用程式中,實作適當的重試模式
  • 設計你的裝置重連邏輯以應對暫時性故障與服務故障轉移。 欲了解更多資訊,請參閱 「管理裝置重新連線以建立韌性應用程式」。
  • 對於較大規模的部署,請遵循以下建議:
    • 在重新連接 IoT 中樞 時,在裝置與應用程式中實施指數退回與抖動重試模式,有助於避免服務端故障轉移或網路中斷時的重連風暴。
    • 了解 IoT 中樞 的服務配額與限制,並規劃你的解決方案如何處理這些限制。 透過及早考慮服務端限速行為、連線限制及吞吐量單元考量,您可以設計出可預測的可擴展性解決方案,並避免隨著車隊成長而進行架構重構。 更多指引請參見 IoT 中樞 縮放與配額
    • 請將 Azure IoT 中樞 與 Azure IoT 中樞 裝置佈建服務(DPS)結合使用。 DPS 使得安全、零觸控的入職與裝置分配,跨越一個或多個樞紐。 即使你不預期會有龐大的車隊,從一開始就整合 DPS,你的裝置製造與導入工作流程也能擴展,而不必後續更改韌體或基礎設施。 欲了解更多資訊,請參閱 「大規模部署物聯網解決方案與 DPS」。
    • 考慮使用 DPS 配置政策將裝置分散到多個 IoT 中樞 實例,以提升可用性與區域韌性。 此方法實現了數據擷取容量的水平擴展,並支持未來車隊成長,且無需設備重新配置。

可靠性架構概觀

當你建立物聯網集線時,你部署了一個包含管理與與裝置通訊所需所有功能的 物聯網集線資源 。 物聯網集線的主要組成包括:

  • 裝置身份登錄: 一個儲存可連接物聯網集線器裝置與模組資訊的資料庫。 每個裝置必須在身份登錄中有一個條目才能連接。 如需詳細資訊,請參閱了解 IoT 中樞中的身分識別登錄

  • 訊息元件: IoT 中樞處理裝置與後端應用程式之間的雙向訊息傳遞,包括裝置對雲端遙測、雲端對裝置指令及直接方法呼叫。

  • 裝置雙胞胎: JSON 文件儲存裝置狀態資訊,包括元資料、設定與條件。 裝置與後端應用程式都能讀取並更新設備雙胞胎。

為了可靠性考量,IoT 中樞 元件分為兩大類:

  • 計算元件: 管理裝置連線、驗證請求、路由訊息,以及處理直接方法調用。 這些元件決定了 IoT 中樞 接受與處理請求的能力。

  • 資料組成部分: 儲存裝置身份註冊表、裝置數位雙胞胎以及裝置到雲端訊息。 這些元件決定了資料的可用性與耐久性。

此區分很重要,因為 不同區域對這些元件支持不同類型的冗餘

與其他服務整合

你可以整合IoT 中樞與Azure裝置登錄。 若採用此方法,請參考Azure裝置登錄中的可靠性,以了解兩項服務的可靠性。

如果你使用 IoT 中樞 裝置配置服務(DPS)來進行裝置配置,你的解決方案可靠性也取決於 DPS。 欲了解更多資訊,請參閱 IoT 中樞 裝置配置服務高可用性與災難復原

對瞬態故障的彈性

暫時性錯誤是元件中的短暫間歇性失敗。 它們經常出現在雲端等分散式環境中,而且是作業的一般部分。 暫時性錯誤會在短時間內自行修正。 請務必確保您的應用程式能妥善處理暫時性錯誤,通常透過重試受影響的請求來進行。

所有雲端託管應用程式在與任何雲端託管的 API、資料庫及其他元件通訊時,都應遵循 Azure 暫態故障處理指引。 如需詳細資訊,請參閱 處理暫時性錯誤的建議

IoT 中樞 提供相當高的運作時間保證,但任何分散式運算平台都可能發生短暫故障。 若要處理暫時性失敗,請在與雲端應用程式互動的元件中建置適當的 重試模式

對於大規模部署,使用隨機重試抖動是個好習慣。 抖動技術有助於將負載分散到樞紐分區,並降低在大規模重連事件中限制頻寬的可能性。

對可用性區域故障的抵抗力

可用性區域是Azure區域內物理上獨立的資料中心群組。 當某個區域發生故障時,服務可以切換至其他剩餘的區域。

IoT 中樞 支援兩種不同的可用性區支援:

  • 數據的區域備援,可針對儲存裝置身分識別登錄和裝置到雲端訊息的基礎記憶體元件,自動復寫多個可用性區域之間的數據。

  • 計算的區域備援,可在負責管理裝置和路由訊息的元件中提供復原功能。

當區域同時支援這兩種區域冗餘時,關鍵服務資料——包括裝置身份登錄檔——會同步複製於該區域內的可用區域。 因此,若發生單一區域故障,預期不會有資料遺失,服務會自動將裝置連接與訊息流量重新導向健康區域。 雖然在故障轉移事件期間,飛行中請求可能會暫時受到影響,但服務連續性會維持,且裝置重試邏輯通常能確保恢復。

需求

區域支援: 你的物聯網集線支援可用性區的類型取決於部署的區域。

區域 數據的區域冗餘 運算的區域冗餘
Australia East Yes Yes
巴西南部 Yes Yes
加拿大中部 Yes Yes
印度中部 否 Yes
Central US Yes Yes
美國東部 否 Yes
法國中部 Yes Yes
德國中西部 Yes Yes
日本東部 Yes Yes
南韓中部 否 Yes
北歐 Yes Yes
挪威東部 否 Yes
卡達中部 否 Yes
美國中南部 否 Yes
東南亞 Yes Yes
英國南部 Yes Yes
西歐 否 Yes
美國西部 2 Yes Yes
美國西部 3 否 Yes

您在不在此清單上的地區建立的 IoT 中樞不具備抵抗區域中斷的能力。

費用

使用 IoT 中樞 的區域備援不會產生額外費用。

設定可用性區域支援

IoT 中樞資源在部署於支援區域時,會自動支援區域冗餘。 不需要進一步的設定。

所有區域都狀況良好時的行為

本節說明當 IoT 中樞 資源配置為區域冗餘且所有可用區域皆正常運作時,會發生什麼事。

  • 區域之間的數據復寫: 當您的IoT中樞部署在支援資料區域備援的區域時,數據中的變更會自動在可用性區域之間複寫。 複寫會同步發生。

  • 區域之間的流量路由: 當您的IoT中樞部署在支援計算元件區域冗餘的區域時,請求會被路由到其中一個可用性區域中服務的主要實例。 Azure 會自動選擇活躍的實例和區域。

區域失敗期間的行為

本節說明當 IoT 中樞 資源配置為區域冗餘且發生可用性區域中斷時,可以預期的情況。

  • 偵測與回應: IoT 中樞服務負責偵測可用性區域內的故障。 您不需要執行任何動作即可起始區域容錯移轉。
  • 作用中要求:在區域失敗期間,可能會捨棄作用中要求。 您的客戶端和裝置應該已實作足夠的 重試邏輯 來處理暫時性錯誤。

  • 預期的數據遺失: 當您的IoT中樞部署在支援資料區域備援的區域時,區域失敗不應該造成任何數據遺失。

  • 預期停機時間: 當你的IoT hub部署在支援區域冗餘的區域,區域故障不應該會造成IoT 中樞資源停機。

  • 流量重新導向: 當 IoT 中樞 部署在支援計算元件區域容錯的地區時,IoT 中樞 會偵測區域故障。 然後,任何新的要求都會自動重新導向至狀況良好的可用性區域中的一個服務的新主要實例。

區域復原

當可用區域恢復時,IoT 中樞 會自動恢復可用區域內的實例,並照常在你的實例間重新路由流量。

測試區域失敗

由於 IoT 中樞 完全自主管理流量導向、故障切換與區域故障復原,您無需驗證可用性區故障流程或提供任何進一步的輸入。

對區域範圍故障的復原能力

IoT 中樞 是單一區域服務。 如果該區域無法使用,您的 IoT 中樞 資源也會無法使用。 雖然 IoT 中樞 支援非同步資料複製至配對的 Azure 區域以進行災難復原,但裝置連接時並未內建跨區域故障轉移功能。

如果資源位於 非配對區域,Microsoft 不會跨區域複製配置和資料,也沒有內建的跨區域故障轉移功能。 不過,您可以將不同的資源部署到多個區域。 在此案例中,您有責任管理資料複寫、流量分佈和容錯移轉。

如果您的物聯網樞紐位於非配對區域,或預設的複製與故障切換行為不符合需求,您需要設計並實施 自訂的多區域故障轉移策略,包括以下步驟:

  • 在不同的 Azure 區域設置一個次要 IoT 中樞。
  • 實作端點重定向機制,必要時將裝置導向備用區域。 例如,你可以事先在兩個集線器中配置每個裝置,並設定兩個連線串,讓它們能在需要時切換。

Microsoft 管理的故障轉移到配對區域

如果你的資源位於 配對區域,物聯網集線器的資料會被複製到配對區域。 此方法旨在支援災難復原。 如果你的物聯網集線主區域發生區域故障,你不需要採取任何行動來讓裝置在配對區域繼續連線。

故障轉移類型

在下列情況中,您的 IoT 中樞可能會容錯移轉至配對的區域:

  • 客戶自行發起的故障轉移: 您可以自行觸發對配對區域的手動故障轉移,無論該區域是否正在停機。 您可以使用此方法來執行計劃性容錯移轉和演練。

  • Microsoft發起的故障轉移: 若某區域遺失,Microsoft可啟動物聯網樞紐的故障轉移至該配對區域。 然而,Microsoft 除非經過重大延遲且盡力而為,否則不太可能啟動故障轉移。 IoT 中樞 資源的故障轉移可能發生在與其他 Azure 服務故障轉移的時間不同。 此程式是預設選項,不需要您介入。

需求

  • 區域支援: 預設複製與故障轉移僅支援配對區域。
  • Tier: 所有IoT 中樞層皆可支援成對區域複製與故障轉移選項。

考慮事項

不要使用客戶觸發的容錯切換來永久遷移你的中樞到 Azure 配對區域間。 一般而言,裝置位於中樞的主要區域附近。 如果您將中樞移至次要區域,則次要位置中裝置與IoT中樞之間的作業延遲會增加。

費用

針對配對區域中的中樞,跨區域資料複寫或容錯移轉不需要額外費用。

如果您的物聯網中樞位於非配對區域,請參閱 「自訂多區域解決方案」以獲得彈性, 以獲得可能的成本資訊。

設定複寫並準備容錯移轉

根據預設,當您在配對區域中建立IoT中樞時,會自動設定跨區域數據複寫。 此程式是預設選項,不需要您介入。 在巴西南部和東南亞(新加坡)以外的區域,您的客戶數據不會儲存或處理在您部署服務實例的地理位置之外。

如果您的 IoT 中樞位於巴西南部或東南亞(新加坡)區域,您可以停用資料複製,並選擇不參加故障轉移。 如需詳細資訊,請參閱 停用災害復原 (DR)

如果您的 IoT 中樞位於未配對的區域,您需要規劃自己的跨區域備份和故障轉移方法。 如需詳細資訊,請參閱 用於復原的自訂多區域解決方案

當所有區域都正常時的行為

本節說明當 IoT 中樞設定為跨區域複寫和容錯移轉且主要區域運作時,會發生什麼事。

  • 區域間的資料複製: 資料,包括裝置識別登錄檔,會自動複製到配對區域。 複寫會以非同步方式發生,這表示如果發生故障轉移,預期會發生某些數據遺失。 對於非配對區域中 IoT 中樞的區域之間,沒有資料複寫。

  • 區域之間的流量路由: 在正常作業中,流量只會流向主要區域。

區域失敗期間的行為

本節說明當 IoT 中樞設定為跨區域複寫和容錯移轉且主要區域中斷時,會發生什麼事。

  • 偵測與應變: 負責偵測與應變主要區域故障的責任可能會有所不同。

    • 客戶起始的故障轉移: 您必須負責偵測區域故障,並決定何時進行故障轉移。 如需如何在配對區域之間執行客戶起始故障轉移的詳細資訊,請參閱 執行IoT中樞的手動故障轉移

      您可以執行客戶起始容錯移轉或容錯回復的頻率有限制:

      • 允許使用者執行兩次成功的故障轉移作業,以及每天兩次成功的容錯回復作業。

      • 不允許連續執行容錯移轉或容錯回復作業。 您必須在這些作業之間等候一個小時。

    • Microsoft發起的故障轉移: Microsoft 可決定在主區域遺失時執行故障轉移。 在主要區域遺失之後,此過程可能需要數小時,甚至在某些情況下更久。 IoT 中樞 資源的故障轉移可能不會與其他 Azure 服務同時發生。

  • 作用中要求: 在故障轉移期間,主要區域正在處理的任何要求都可能會遺失。 客戶應該在容錯移轉完成之後重試要求。

  • 預期的數據遺失: 針對配對的區域,數據會以異步方式複寫至配對的區域。 因此,在容錯移轉之後,可能會有一些資料遺失。 此流程適用於 Microsoft 管理及客戶管理的故障轉移。 下表概述IoT中樞儲存之每種數據類型的 恢復點目標(RPO)或預期的數據遺失。

    數據類型 RPO
    身分識別登錄 0-5 分鐘的數據遺失
    裝置對應項資料 0-5 分鐘的數據遺失
    雲端到裝置訊息 1 0-5 分鐘的數據遺失
    父系 1 和裝置作業 0-5 分鐘的數據遺失
    裝置到雲端的訊息 所有未讀取的訊息都會遺失
    雲端到裝置的意見反應訊息 所有未讀取的訊息都會遺失

    1 雲端到裝置的訊息和父系作業在使用者起始的容錯移轉過程中不會復原。

  • 預期的停機時間: 區域故障轉移期間預期的停機時間取決於故障轉移類型。

    • 客戶起始的容錯移轉:從區域遺失到資源在配對區域中運作,預期大約有 10 分鐘到 2 小時的停機時間。 針對發生容錯移轉的 IoT 中樞執行個體註冊的裝置數目會影響復原時間。 您可以預期裝載大約 100,000 部裝置之中樞的復原時間大約為 15 分鐘。

    • Microsoft發起故障轉移: 預計從區域發生故障到資源於配對區域可用期間,約有 2 至 26 小時的停機時間。

      長的復原時間是因為 Microsoft 必須代表該區域所有受影響的客戶執行故障轉移操作。 對於重要系統,您應該使用客戶起始的故障轉移來減少停機時間。 不過,如果你使用的是較不關鍵且能維持約一天停機時間的物聯網解決方案,或許可以依賴 Microsoft 主導的方案,以滿足整體的 DR 目標。

    • 對於兩種故障轉移類型,物聯網中樞實例的完整限定網域名稱在故障轉移後保持不變,也就是說連接字串也一樣。 不過,由於基礎的IP位址會變更,客戶端必須等待網域名稱系統 (DNS) 記錄更新完成後,才能在故障轉移之後存取 IoT 中樞。

      這很重要

      IoT 中樞 的 SDK 不會快取 IoT hub 的 IP 位址。 與 SDK 互動的使用者代碼也不應該快取 IoT 中樞的 IP 位址。

      由於這些因素,在容錯移轉結束之後,對您 IoT 中樞執行個體執行之執行階段作業要進入完整運作狀態所需的時間,可使用下列函式來表示:

      恢復時間 = RTO(客戶主動故障轉移需 10 分鐘至 2 小時,Microsoft 發起故障轉移需 2 至 26 小時)+ DNS 傳播延遲 + 用戶端應用程式刷新任何快取物聯網樞紐 IP 位址所需的時間

  • 流量重路由: 在故障轉移過程中,IoT 中樞 更新 DNS 紀錄指向配對區域。 所有後續請求都會傳送至配對的區域。

    IoT 中樞的故障轉移作業完成之後,裝置和後端應用程式的所有作業都有望繼續運作,而不需要手動介入。 此持續性可確保您的裝置到雲端訊息可繼續運作,且整個裝置登錄保持不變。 如果你透過 Azure 事件方格 發佈事件,只要那些 Event Grid 訂閱仍然可用,這些事件就可以被使用你先前設定的相同訂閱來消耗。 自定義端點不需要進一步處理。

需要容錯移轉後設定

根據路由傳送 IoT 中樞訊息的位置,您可能需要在容錯移轉完成之後執行額外的步驟。

  • Azure 事件中樞: 你物聯網樞紐內建事件端點的 Event Hubs 相容名稱與端點會在故障轉移後改變。 此變更是因為 Event Hubs 用戶端無法存取 IoT 中樞 事件的資訊。

    當你使用 Event Hubs 客戶端或事件處理器主機從內建端點接收遙測訊息時,使用 IoT hub 的 連接字串來建立連線。 這種方法可確保後端應用程式在故障轉移后不需要手動介入即可繼續運作。

    如果您直接在應用程式中使用事件中樞相容名稱和端點,您必須在故障轉移後 擷取新的事件中樞相容端點 ,才能繼續作業。 要取得端點和名稱,您可以使用 Azure 入口網站或 .NET SDK:

    • The Azure portal: 欲了解如何使用入口網站取得 Event Hubs 相容端點及 Event Hubs 相容名稱,請參見 Connect to the Builtin endpoint

    • The .NET SDK: 若要使用 IoT 集線器連接字串重新擷取與 Event Hubs 相容的端點,請使用 範例程式碼。 這個程式碼範例使用 連接字串 來取得新的 Event Hubs 端點並重新建立連線。 你必須安裝 Visual Studio。

  • Azure Functions 和 Azure 串流分析: 如果你使用 Azure Functions 或 Stream Analytics 連接內建事件端點,必須依照前述重點所描述的流程更新該函式或工作所連接的事件中心端點。 然後執行 [重新啟動] 動作,因為故障轉移之後任何事件數據流位移都變成無效。

  • Azure 儲存體: 在路由到 Azure 儲存體 時,先列出 blob 或檔案。 然後逐一迭代它們,以確保讀取所有 Blob 或檔案,而不需假設分區。 分割區範圍在 Microsoft 發起的故障轉移或客戶發起的故障轉移期間可能會改變。 你可以使用 List Blobs API 來枚舉 blob 清單,或使用 List Azure Data Lake Storage API來列舉檔案清單。 欲了解更多資訊,請參閱 Azure 儲存體 作為路由端點

區域復原

若要容錯回復到主要區域,您可以第二次手動觸發容錯移轉動作。 請務必記住您可以容錯移轉的頻率限制

如果原始容錯移轉作業是為了從原始主要區域的長時間中斷復原而執行,則在主要區域從中斷復原後執行容錯回復至主要區域。

區域故障測試

若要在區域發生中斷期間模擬失敗,您可以觸發 IoT 中樞的手動容錯移轉。 不過,由於區域故障轉移會導致停機時間和數據遺失,因此您應該只在非生產環境中執行測試故障轉移。 更多資訊請參見 區域失效期間的行為。 建議設置一個測試用的 IoT 中樞 實例,定期啟動預定的故障轉移選項。 定期測試有助您在發生實際災害時,能夠有效地還原並運行您的端到端解決方案。

自訂多區域解決方案,以實現復原能力

IoT 中樞 的跨區域故障轉移功能不適用於以下情境:

  • 您的 IoT 中樞位於未配對的區域。

  • 您的商務運行時間目標因內建容錯移轉選項所提供的復原時間或資料遺失而無法得到滿足。

  • 您必須故障轉移至不是主要區域配對的區域。

您可以設計針對每個個別裝置量身打造的跨區域故障轉移解決方案。 IoT 解決方案中部署拓撲的完整處理不在本文的範圍內,但您可以考慮多區域部署模型。 在此模式下,您的主要物聯網中樞與解決方案後端主要運行於一個 Azure 區域。 第二個物聯網中樞和後端部署在另一個 Azure 區域。 如果主要區域中的IoT中樞發生中斷或從裝置到主要區域的網路連線中斷,裝置會使用次要服務端點。

  • 預期的停機時間: 這種方法的停機時間少於一分鐘,但實作可能相當複雜。

  • 預期的數據遺失: 數據遺失量取決於您使用的特定資料存放區,以及設定兩者之間異地複寫的方式。

  • 成本: 這種方法會要求您布建至少一個額外的 IoT 中樞,以增加整體成本。

從高層次來看,要在 IoT 中樞 實施區域故障轉移模型,您需要採取以下措施:

  • 次要IoT中樞和裝置路由邏輯: 如果主要區域中的服務中斷,裝置必須開始連線到次要區域。 由於涉及大部分服務的狀態感知本質,解決方案管理員通常會手動觸發區域間故障轉移程式。 在維持程序控制權的同時,將新端點傳達給裝置的最佳方式,是讓它們定期查詢管理服務以獲得當前活躍端點的資訊。 禮賓服務可以是透過 DNS 重定向技術(如 Azure 流量管理員 來複製並保持可存取的網頁應用程式。

    備註

    Traffic Manager 沒有內建 IoT 中樞 支援。 您可以為每個 IoT 中樞設定自訂流量管理員端點。 設定流量管理員端點的健全狀態探查,以使用 IoT 中樞的端點。

  • 身分識別登錄複寫: 若要使用,次要IoT中樞必須包含可連線到解決方案的所有裝置身分識別。 解決方案應該保留裝置身分識別的異地復寫備份,並將其上傳至次要IoT中樞,再切換裝置的作用中端點。 IoT 中樞 的裝置身份匯出功能在此情境下非常有用。 如需詳細資訊,請參閱了解 IoT 中樞中的身分識別登錄

  • 合併邏輯: 當主要區域再次可用時,必須在次要區域中建立的所有狀態和數據移轉至主要區域。 此狀態和資料大多與裝置身分識別和應用程式中繼資料相關,必須與主要 IoT 中樞合併,也可能要與主要區域中的其他所有應用程式特定存放區合併。

    若要簡化此步驟,請使用 等冪 作業。 等冪作業可以將副作用降到最低,不只包括來自最終一致的事件分佈的副作用,也包括來自事件的重複項目或失序傳遞的副作用。 此外,應用程式邏輯應該設計為容許潛在的不一致或略為過時狀態。 這種情況可能是因為系統根據 RPO 需要額外時間才能修復。

備份與還原

IoT 中樞 服務支援大量匯出作業,讓您能匯出整個 IoT hub 的身份登記冊。 這些資料會透過共享存取簽章傳送到 Azure 儲存體 的 blob 容器。 這個方法可讓您在所控制的 Blob 容器中建立可靠的裝置資訊備份。 欲了解更多資訊,請參閱大量匯入和匯出 IoT 中心設備身份

你也可以匯出現有物聯網中樞的 Azure Resource Manager 範本(ARM 範本),以建立物聯網中樞設定的備份。 如需詳細資訊,請參閱 使用ARM範本手動移轉IoT中樞

針對大部分的解決方案,您不應該只依賴備份。 請改用本指南中所述的其他功能來支持復原需求。 不過,備份可防範其他方法未發生的一些風險。 欲了解更多資訊,請參閱冗餘、複寫與備份是什麼?

服務維護的韌性

Microsoft 定期執行服務更新及其他維護。 Azure 平台自動處理這些活動,確保維護過程對您來說無縫且透明。 除非您收到透過 Azure 服務健康狀態 計畫維護 的通知,否則維護期間將不會有停機。

服務等級協定

Azure 服務的服務層級協議(SLA)描述了每項服務的預期可用性,以及您的解決方案必須符合的條件,以達成該可用性預期。 欲了解更多資訊,請參閱線上服務的 SLA