IoT 工作負載中的效能效率
IoT 解決方案包括裝置、邊緣和雲端元件,範圍從數百萬個小型裝置連線到雲端到產業解決方案,其中少數功能強大的伺服器是雲端連線的閘道。 裝置數目、其實體和地理位置位置,以及傳送或接收的訊息數目,是可定義 IoT 工作負載效能效率的一些因素。
效能效率也包括 IoT 工作負載能夠有效率地調整以符合需求。 雲端的優點是地理可用性,以及隨選調整服務的能力,幾乎不需要停機應用程式。
效能效率代表相對於狀態條件中資源使用量的效能。 效能效率會測量產品或系統在執行其功能時的效能,符合下列需求:
時間行為,例如回應時間、處理時間和輸送量速率。
資源使用率,或所使用的資源數量和類型。
容量或上限。
評估 IoT 工作負載中的效能效率
若要透過 Well-Architected 架構效能效率要素的鏡頭來評估 IoT 工作負載,請在 Azure Well-Architected 檢閱中完成 IoT 工作負載的效能效率問題。 評估識別 IoT 解決方案的關鍵效能效率建議之後,請使用下列內容來協助實作建議。
設計原則
架構卓越五大要素 可支援 IoT 工作負載設計方法。 這些要素可作為跨 重要 IoT 設計領域的後續設計決策指南針。 下列設計原則可擴充 Azure Well-Architected Framework - 效能效率的品質要素。
設計原則 | 考量事項 |
---|---|
水準調整的設計 | IoT 解決方案可以從數百部裝置或訊息開始,並每分鐘成長至數百萬個裝置和訊息。 您可以輕鬆地將雲端服務調整為負載增加,但 IoT 裝置和閘道的情況可能更為複雜。 IoT 裝置可以在解決方案完成之前進行設計或部署。 工業 IoT 或類似產業可以測量數十年的裝置生命週期。 藉由更換裝置來更新容量的成本很高。 在這些案例中,預先規劃特別重要。 |
效能測試的左移 | 早期測試並經常測試,以提早攔截問題。 請注意,在地理位置上具有不同特性、速度和通訊可靠性的感應器、裝置和閘道的複雜性。 在測試中規劃此複雜性,並確定測試失敗案例,例如網路中斷連線。 在您的 IoT 解決方案中,對所有裝置、邊緣和雲端元件執行壓力和負載測試。 |
持續監視生產環境的效能 | 若要監視多個地理區域中不同類型的裝置,請使用分散式監視解決方案。 根據記憶體和效能成本,平衡監視和傳送至雲端的資訊量。 微調診斷案例的傳輸,並在多個層級和層級進行監視。 公開產業或已啟用閘道之解決方案的閘道計量。 |
IoT 架構層
效能效率設計原則有助於厘清考慮,以確保 IoT 工作負載符合基礎 IoT 架構層的需求。 下列各節說明效能效率要素的圖層細節。
裝置和閘道層
IoT 裝置是一種運算裝置,可連線到 IoT 解決方案,並可收集、傳輸或接收資料。 閘道是裝置與雲端之間的連線點,或 IoT 與其他元件之間的連線點。
優化硬體功能
升級或更換硬體的成本很高且耗時。 預先調整 IoT 裝置的大小,以取得所需的容量和功能。
若要優化硬體功能:
在特定硬體上執行計算和輸入輸出密集型工作。 例如,在本機圖形處理單位上執行機器學習 (ML) 演算法, (GPU) 。
使用有效率的語言和架構,例如 Embedded C 和 Rust Embedded,將現有的硬體功能優化。 您可以在開發受限制的裝置時使用 Azure IoT Embedded C SDK ,或在裝置上已提供大部分的安全性和通訊堆疊時使用。
使用 適用于 C 的 Azure IoT 裝置 SDK ,您只需要連線到雲端閘道即可。 Azure IoT 裝置軟體發展工具組 (SDK) 管理復原連線所需的訊息轉譯、錯誤處理和重試機制。
調整對於裝置和閘道層很重要。 若要調整此圖層:
使用閘道作為縮放單位。 如果您的解決方案新增 IoT 裝置或資產 (例如 OPC UA 伺服器一段時間) ,請使用更多邊緣閘道從這些伺服器擷取資料。
針對所有上游層進行規模評估,包括雲端閘道和雲端服務。 若要深入瞭解如何使用多個 IoT 中樞作為 IoT 解決方案的縮放單位,請參閱 如何跨 IoT 中樞布建裝置。
在邊緣執行工作負載
視網路輸送量或延遲等系統限制而定,請考慮在邊緣執行某些工作負載。 依時間條件約束和必要的延遲和回應時間來分隔工作負載。 針對低延遲和間歇性連線案例使用本機計算。 在雲端中執行大規模的工作負載。
在邊緣,使用優先順序佇列以必要的順序傳送不同的資料流程。 優先順序佇列訊息會依優先順序傳送,但Azure IoT 中樞仍會根據收據順序來日誌訊息。
優化裝置連線能力
請考慮下列幾點,以優化裝置連線能力:
使用對裝置具有最低延遲的 IoT 中樞。 當裝置需要從不同的地理位置連線時,您可能需要多個區域中的 IoT 中樞。
針對裝置與 IoT 解決方案之間的雙向通訊使用開放式具狀態連線,以將設定連線的額外負荷降到最低。
請勿一次連線所有裝置,例如區域性電源中斷之後。 在重試時,使用截斷的指數輪詢與引進的抖動。
優化離線案例
您可以為裝置提供足夠的資訊和內容,以便在沒有雲端連線的情況下運作,並在本機儲存資料,以便從中斷連線和重新開機中復原。 下列策略支援離線作業:
確定裝置能夠在裝置未連線時將資料儲存在本機,包括根據優先順序的記錄和快取遙測。
設定資料的存留時間 (TTL) ,以便自動移除過期的資料。
在裝置未連線時捨棄較不重要的資料,以減少所需的本機儲存體,並減少裝置重新連線時的同步處理時間。
如果邊緣裝置儲存體達到容量,請使用快取收回策略,例如先出後出 (FIFO) 、最後一個進階 (LIFO) 或優先順序型。
請考慮使用個別的磁片或磁碟控制卡來儲存資料,讓裝置執行時間或應用程式可以在儲存體不足時繼續運作。
使用裝置對應項 和模組對應項 ,以非同步方式同步裝置與雲端之間的狀態資訊,即使裝置目前未連線到雲端閘道也一般。 裝置和模組對應項只包含某個時間點的目前狀態,而不是任何歷程記錄或移除的資訊。
擷取和通訊層
資料擷取和通訊層會將資料從裝置傳送至 IoT 解決方案。 裝置與 IoT 解決方案之間的通訊模式包括:
- 裝置到雲端訊息。
- 雲端到裝置的訊息。
- 檔案上傳。
- 裝置對應項。
- 直接方法。
優化傳訊效率
裝置到雲端訊息的數目和大小是 IoT 解決方案效能效率的重要參數。 IoT 中樞和Azure IoT Central 等 Azure IoT服務會定義每一層的訊息限制,這會影響解決方案效能和成本。
請考慮下列傳訊建議:
IoT 中樞和 IoT Central 會根據4 KB 訊息大小計算每日配額訊息計數。 傳送較小的訊息會讓部分容量無法使用。 一般而言,使用接近 4 KB 界限的訊息大小。 將較小的裝置到雲端訊息分組成較大的訊息,以減少訊息總數,但請考慮合併訊息時所引進的延遲。
避免閒聊的通訊。 針對裝置對裝置或模組對模組邊緣通訊,請勿設計傳送許多小型訊息的互動。
使用內建的 Azure IoT Edge SDK 訊息批次處理進行進階訊息佇列通訊協定 (AMQP) ,將多個遙測訊息傳送至雲端。
在下游裝置結合多個較小的訊息,並將較大的訊息傳送至邊緣閘道,以使用應用層級批次處理。 此批次處理會限制訊息額外負荷,並減少本機邊緣磁片儲存體的寫入。
使用 AMQP 連線多工處理來減少每個 SDK 用戶端的傳輸控制通訊協定相依性 (TCP) 連線限制。 使用 AMQP 連線多工處理,多個裝置可以使用單一 TCP 連線來IoT 中樞。
在使用者指定的逾時之後,針對可立即成功或失敗的要求-回復互動使用直接方法。 此方法適用于視裝置是否回應而不同動作的案例。
針對裝置狀態資訊使用裝置對應項,包括中繼資料和組態。 IoT 中樞會為您連線的每個裝置維護裝置對應項。
瞭解傳訊配額和節流
IoT 中樞層會設定每個單位的雲端閘道限制。 傳訊 配額 會定義層的持續輸送量和持續傳送速率。 IoT 中樞可以在短時間內處理超過這些配額的負載,以彈性地處理高載或負載超載。
另一個重要限制是每小時或每日服務負載或 節流 限制。 節流限制可保護 IoT 中樞免于太久的負載。
下圖顯示負載、配額和節流限制之間的關聯性。 左圖顯示IoT 中樞可以處理持續或固定高負載,最多可處理IoT 中樞層配額層級。 右圖顯示IoT 中樞可以處理隨著時間變更的負載,只要其未達到節流限制,且平均不高於IoT 中樞層的配額。
優化訊息處理
裝置或閘道的訊息可能需要在儲存體之前翻譯、處理或擴充更多資訊。 此步驟可能很耗時,因此請務必評估效能的影響。 某些建議衝突,例如使用壓縮來優化資料傳輸,而不是避免在解密訊息時進行雲端處理。 這些建議必須平衡並針對其他架構要素和解決方案需求進行評估。
若要優化雲端資料處理效能:
優化用來將資料傳送至雲端的資料格式。 比較效能 (和成本) 頻寬與效能改善,以及所需的較少雲端資料處理。 請考慮使用IoT 中樞訊息擴充,將內容新增至裝置訊息。
在擷取資料送達時,對擷取的資料執行時間關鍵事件處理,而不是儲存未處理的資料,並要求複雜的查詢取得資料。 對於時間關鍵性事件處理,請考慮延遲抵達和時間範圍的影響。 根據使用案例進行評估,例如重大警示處理與訊息擴充。
根據解決方案需求選取正確的IoT 中樞層、基本或標準。 請注意基本層不支援的功能。
選取正確的IoT 中樞層大小、1、2 或 3,並根據資料輸送量、配額和作業節流來選取實例數目。 針對 IoT Central,根據從裝置傳送至雲端的訊息數目,選取正確的層級:標準 0、標準 1 或標準 2。
請考慮針對發佈-訂閱事件路由使用Azure 事件方格。 如需詳細資訊,請參閱使用事件方格觸發動作和比較訊息路由和事件方格以IoT 中樞React IoT 中樞事件。
設定資料的優先順序
裝置傳送至雲端的某些資料可能比其他資料更重要。 根據優先順序分類和處理資料是效能效率的良好作法。
例如,控溫器感應器會傳送溫度、濕度和其他遙測,但也會在溫度超出定義的範圍時傳送警示。 系統會將警示訊息分類為較高的優先順序,並以不同于溫度遙測的方式來處理。
請考慮下列資料分類和處理建議:
使用IoT Edge優先順序佇列,以確保傳送至IoT 中樞時,會優先處理重要的資料。 IoT Edge會在沒有連線時緩衝訊息,但在還原連線之後,會先依優先順序傳送所有緩衝的訊息,後面接著新的訊息。
視使用案例而定,使用IoT 中樞訊息路由來分隔不同資料優先順序的路由。 IoT 中樞訊息路由會增加一些延遲。
以較長的間隔儲存和傳送低優先順序資料,或使用批次或檔案上傳。 上傳檔案上的惡意程式碼偵測會增加延遲。
根據時間條件約束來分隔訊息。 例如,如果有時間限制,請直接將訊息傳送至IoT 中樞,並在沒有時間限制時,透過IoT 中樞或批次資料傳輸來利用檔案上傳,例如Azure Data Factory。 您可以使用 IoT Edge Blob 模組進行檔案上傳。
裝置管理和模型化層
不同類型的裝置可以連線到 IoT 解決方案,而 IoT 解決方案可以同時連線到許多裝置和閘道。 除了連線和設定裝置和閘道之外,IoT 解決方案還必須瞭解裝置和閘道擷取和內嵌的資料,而且必須傳輸和內容化該資料。
IoT 元件可以使用不同的通訊協定、連線能力、資料擷取頻率,以及通訊模式。 IoT 解決方案必須能夠管理哪些裝置和閘道已連線,以及其設定方式。
若要管理裝置和組態以提升效能:
根據裝置和訊息負載優化調整大小。
根據階層和單位數目,瞭解雲端閘道可以處理的訊息數目。
考慮因數據分佈、季節性和高載而導致持續輸送量的異常狀況。
當 IoT 解決方案必須管理數百萬個裝置時,請使用多個雲端閘道。 使用 DPS 將裝置指派給 IoT 中樞。
使用 DPS 布建裝置
使用 DPS 在布建期間設定 IoT 中樞的連線、當IoT 中樞連線已無法使用,或在裝置重新開機期間。
使用 DPS 平均加權分配原則,根據使用案例調整布建的權數。 如需詳細資訊,請參閱 配置原則如何將裝置指派給 IoT 中樞。
請考慮在一段時間內將裝置布建到 IoT 解決方案、分散或較小批次,以平衡 DPS 負載和配額。 在批次中上線時,請規劃批次和整體移轉時程表。 考慮 DPS 限制的作業數目、裝置註冊,以及每分鐘的連線上限,包括延遲和重試。
使用 DPS 根據延遲,將裝置配置給不同區域中的 IoT 中樞。
使用 DPS 連接字串的快取策略來減少 DPS 重新連線作業。
管理下游裝置
如果 IoT 解決方案具有每個網站或位置的多個閘道或邊緣裝置,以及可連線到這些閘道或邊緣裝置的任何下游裝置,則其可水準調整。
當下游裝置的數目、訊息和訊息大小會隨著時間變更,且必須轉譯其通訊協定或訊息時,在 轉譯 模式中使用多個閘道和邊緣裝置。 轉譯模式中的閘道和邊緣裝置可以將通訊協定或訊息轉譯到下游裝置,不過需要對應來尋找下游裝置所連線的閘道。 考慮當您使用翻譯模式時,閘道或邊緣裝置上新增的訊息轉譯和緩衝額外負荷。
使用 透明 模式中的多個閘道和邊緣裝置,在每個月臺或位置可能會隨著時間變更時,將下游訊息佇列遙測傳輸 (MQTT) 或 AMQP 裝置連線。 透明模式中的閘道和邊緣裝置可以連接 MQTT/AMQP 裝置以進行雙向通訊。 考慮當您使用透明模式時,閘道或邊緣裝置上新增的訊息緩衝、儲存體和設定額外負荷。
傳輸層
傳輸層會處理裝置與 IoT 解決方案之間的連線,將 IoT 訊息轉換成網路套件,並透過實體網路傳送它們。 IoT 解決方案通常會使用 AMQP 和 MQTT 連線通訊協定。
優化資源使用量
裝置與雲端之間的連線必須安全、可靠且可調整,才能處理目標數目的裝置和訊息。
使用從裝置到雲端閘道的開放具狀態連線。 IoT 中樞已針對使用 MQTT、AMQP 或 WebSocket 通訊協定來管理數百萬個開放式具狀態連線進行優化。 讓裝置保持開啟連線,以將安全性交握、驗證和授權的額外負荷降到最低。 此做法可改善效能,並大幅減少所需的頻寬。
使用支援在單一連線上多工處理多個通道的 AMQP 通訊協定,將雲端閘道所需的開啟連線數目降到最低。 藉由使用多工處理,透明閘道可以透過單一連線,使用自己的通道來連接多個分葉裝置。
使用裝置和模組對應項雲端閘道模式,以非同步方式交換裝置與雲端之間的狀態資訊。
設定 DPS 以在裝置連線到另一個雲端閘道時移動裝置狀態。
優化資料通訊
裝置到雲端訊息的數目和大小會影響效能和成本。 評估資料通訊是 IoT 工作負載中效能效率的關鍵。
使用沒有使用大量頻寬將資料傳送至雲端的有效資料格式和編碼方式。 對於低頻寬網路,請考慮使用壓縮或二進位格式,但瞭解在雲端中解壓縮或轉換資料的額外負荷。
請考慮在本機儲存大量資料,並每小時或每天上傳。
將許多小型裝置到雲端訊息分組成較小的訊息,以減少總數。 不過,不要只傳送大型訊息,而是在平均訊息大小與輸送量之間取得平衡。
儲存層
IoT 解決方案中收集及參考的不同資料類型通常需要針對裝置、閘道和雲端上不同案例特製化和優化的儲存體類型。 全域或本機多個地理區域必須提供的資料,在某些情況下複寫以優化延遲,會增加 IoT 儲存體複雜性。
使用時間序列資料庫來儲存具有時間戳記和值的時間序列資料。 使用資料行來擴充時間序列資料遙測,例如 CustomerID、RoomID 或其他使用案例特定資料行。
使用裝置和閘道儲存體來快取資料,或在中斷連線時保留資料。 考慮必要的儲存空間。 請勿保留所有資料,但使用向下取樣、僅儲存匯總,或儲存有限時間週期的資料。
請考慮將資料擷取和事件處理儲存體與報告和整合儲存體需求分開。
使用符合所需輸送量、大小、保留期間、資料磁片區、CRUD 需求和區域複寫需求的資料儲存類型。 一些範例包括Azure Data Lake Storage、Azure Data Explorer、Azure SQL和 Azure Cosmos DB。
事件處理和分析層
您可以在將裝置傳送至 IoT 解決方案或內部之前,先處理裝置所產生的資料。 資料處理可能包括翻譯、內容化、篩選和路由,或更進階的分析,例如趨勢分析或異常偵測。
優化邊緣與雲端處理
使用本機計算,在裝置上或邊緣執行即時且近乎即時的工作負載,或小型、優化、低延遲的處理。 在雲端中執行較大的工作負載或其他已新增或外部資料或計算相依性的工作負載。
例如,在邊緣執行機器學習演算法來計算影片串流中的人員,並將包含計數的事件傳送至雲端。 使用雲端來比較不同工廠之間的趨勢。
使用串流分析 Edge 模組在邊緣執行分析工作負載。 例如,您可以在邊緣執行異常偵測,並使用偵測到的異常來標記傳送至雲端的事件。 當您在邊緣執行分析時,請考慮額外的延遲、延遲抵達和視窗影響。
請注意具有許多已連線下游裝置之邊緣工作負載的額外負荷。 邊緣節點必須轉送或處理所有訊息,並在有間歇性雲端連線時處理所有資料的快取。 測試每個邊緣節點的下游裝置和訊息上限,以驗證對解決方案的效能影響。 請注意訊息轉譯或擴充在邊緣、IoT 中樞或雲端事件處理上可能會對效能的影響。
分類個別工作負載
依時間條件約束和所需的延遲和回應時間來分隔工作負載,例如在秒內與每小時批次的回應。 混合式硬體系統 (SoC) 可支援裝置層級上的工作負載。
在邊緣,使用優先順序佇列來分隔具有不同優先順序和 TTL 的不同資料流程。 例如,警示應該一律先傳送,但 TTL 低於遙測。
在雲端中,您可以使用Azure 事件中樞上的取用者群組來分隔不同的資料流程,並處理和調整警示與遙測不同。 您也可以使用IoT 中樞路由來分隔不同的資料流程,並篩選和個別端點。 IoT 中樞訊息路由會增加一些延遲。 使用事件中樞、Azure 事件方格或Azure 服務匯流排來散發工作負載,同時防止雲端中的反向壓力。
過度複雜IoT 中樞路由規則可能會影響輸送量,特別是具有訊息本文 JSON 篩選的路由規則,其中每個訊息都需要還原序列化和掃描。
處理大量雲端資料
若要優化大量雲端資料的效能效率:
在IoT 中樞和資料目的地之間使用現用的服務整合,例如已針對高效能輸送量優化的Azure Data Lake Storage和資料目的地,例如Azure Data Lake Storage和 Azure Data Explorer。
使用事件中樞 SDK,從包含的事件處理器從 IoT 中樞開發自訂擷取。 事件處理器可以重新平衡裝置和主機。
針對同時的資料讀取器和必要輸送量,使用正確的IoT 中樞資料分割和取用者群組數目。
將資料擷取和事件處理所需的儲存體與報告和整合所需的儲存體分開。
根據所需的輸送量、大小、保留期間、資料磁片區、CRUD 需求和區域複寫,使用符合需求的資料儲存體。 範例包括Azure Data Lake Storage、Azure Data Explorer、Azure SQL或 Azure Cosmos DB。 如需詳細資訊,請參閱 為您的應用程式選取 Azure 資料存放區。
整合層
整合層會將 IoT 解決方案連線至其他服務和商務應用程式。
將 IoT 解決方案擷取管線與整合處理分開。 請確定來自整合層的複雜查詢或載入不會影響資料擷取效能。
使用定義完善的版本 API 來存取 IoT 資料和命令。
避免終端使用者針對 IoT 資料儲存體建立使用者定義查詢的工具。 請考慮使用個別的資料存放區進行整合和報告。
DevOps 層
使用下列 DevOps 機制將效能效率最大化:
用於本機快取和部署容器映射的 連線登錄 。
IoT 中樞一次將部署更新至多個裝置,包括裝置和閘道。
裝置對應項和模組對應項,以可調整且有效率的方式更新裝置組態。
效能測試,包括壓力和負載測試,以複寫生產環境,例如位置和異質裝置。
監視
使用 Azure 監視器來收集具有重要計量警示的IoT 中樞計量。 根據目前的調整限制設定 Azure 監視器警示,例如每秒傳送到雲端訊息的裝置。 針對即將推出的延展性限制預先通知,請將警示設定為限制的百分比,例如 75%。 同時設定記錄和計量的 Azure 監視器警示,例如節流錯誤數目。
設定 Azure 服務健康狀態服務警示,以在IoT 中樞狀態變更時觸發通知。