Azure IoT Hub常見問題

來源: 云計算實戰(zhàn)
作者:Sean Yu
時間:2021-06-03
16893
使用Event訂閱Azure IoT Hub設(shè)備上下線,如果不發(fā)送消息,每隔一段時間會收到一次上下線通知:所有的SDK的令牌有效期為默認60分鐘,令牌續(xù)訂有效期約為 85%,即 60*0.85= 50分鐘左右, 在默認的SAS令牌到期后,如果沒有任何流量來刷新token,則會遇到IoT Hub斷開設(shè)備,設(shè)備再重連的情況。

使用Event訂閱Azure IoT Hub設(shè)備上下線,如果不發(fā)送消息,每隔一段時間會收到一次上下線通知:

所有的SDK的令牌有效期為默認60分鐘,令牌續(xù)訂有效期約為 85%,即 60*0.85= 50分鐘左右, 在默認的SAS令牌到期后,如果沒有任何流量來刷新token,則會遇到IoT Hub斷開設(shè)備,設(shè)備再重連的情況。

如果要調(diào)試該狀態(tài),可以在IoT hub中配置 診斷設(shè)置 到Log Analytics工作區(qū):

 

輸出到Log Analytics工作區(qū)中:

在日志中輸入如下指令,可以查詢到 404104 和401003的設(shè)備 deviceDisconnect 和deviceConnect的事件,事件每50分鐘左右出現(xiàn)一次。

AzureDiagnostics
| where ResourceProvider == "MICROSOFT.DEVICES" and ResourceType == "IOTHUBS"
| where Category == "Connections"
| extend parsed_json = parse_json(properties_s)
| extend SDKVersion = tostring(parsed_json.sdkVersion) , DeviceId = tostring(parsed_json.deviceId) , Protocol =  tostring(parsed_json.protocol)
| distinct TimeGenerated, OperationName, Level, ResultType, ResultDescription, DeviceId, Protocol, SDKVersion

關(guān)于此現(xiàn)象官網(wǎng)的解釋:

https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-troubleshoot-connectivity?WT.mc_id=AZ-MVP-5003757&WT.mc_id=AZ-MVP-5003757#mqtt-device-disconnect-behavior-with-azure-iot-sdks

關(guān)于設(shè)備SDK 和云端如何保持連接的解釋:

為了確??蛻舳?IoT 中心連接保持活動狀態(tài),服務(wù)和客戶端會定期向?qū)Ψ桨l(fā)送一個 keep-alive ping。使用 IoT SDK 的客戶端按下表中定義的時間間隔發(fā)送 keep-alive:

語言默認的 keep-alive 時間間隔可配置性
Node.js180 秒
Java230 秒
C240 秒
C#300 秒
Python60 秒

按照 MQTT 規(guī)范,IoT 中心的 keep-alive ping 時間間隔是客戶端 keep-alive 值的 1.5 倍。但是,IoT 中心將服務(wù)器端最大超時限制為 29.45 分鐘(1767 秒),因為所有 Azure 服務(wù)都綁定到了 Azure 負載均衡器 TCP 空閑超時(29.45 分鐘)。

例如,使用 Java SDK 的設(shè)備會發(fā)送 keep-alive ping,然后失去網(wǎng)絡(luò)連接。230 秒后,設(shè)備會由于處于脫機狀態(tài)而錯過 keep-alive ping。但是,IoT 中心不會立即關(guān)閉連接 - 它會再等待 (230 * 1.5) - 230 = 115 秒,然后再斷開設(shè)備的連接,并顯示錯誤 404104 DeviceConnectionClosedRemotely。

可設(shè)置的客戶端最大 keep-alive 值為 1767 / 1.5 = 1177 秒。任何流量都將重置 keep-alive。例如,成功的 SAS 令牌刷新會重置 keep-alive。

參照官網(wǎng):

https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-mqtt-support?WT.mc_id=AZ-MVP-5003757&WT.mc_id=AZ-MVP-5003757#using-the-device-sdks

關(guān)于設(shè)備連接/保持連接是否計費的問題:

使用 AMQP 或 MQTT 協(xié)議時,為建立連接而交換的消息和協(xié)商中交換的消息不收費。

參見:

https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-devguide-pricing?WT.mc_id=AZ-MVP-5003757

關(guān)于IoT Hub 能連接的最大設(shè)備數(shù)量

設(shè)備可注冊到單個 IoT 中心的設(shè)備和模塊的總數(shù)上限為 1,000,000。只能聯(lián)系 Microsoft 支持部門來提高此限制。

但請注意,100萬設(shè)備連接到云中,是需要一定時間的,這個受限于連接速率:

“設(shè)備連接” 限制控制與 IoT 中心建立新設(shè)備連接的速率?!霸O(shè)備連接” 限制不控制同時連接的最大設(shè)備數(shù)。設(shè)備連接 速率限制取決于為 IoT 中心預(yù)配的單位數(shù)。

例如,如果購買的是單一 S1 單位,則限制為每秒 100 個連接。因此,若要連接 100,000 臺設(shè)備,至少需要花費 1,000 秒(大約 16 分鐘)。但是,同時連接的設(shè)備數(shù)可與用戶在標識注冊表中注冊的設(shè)備數(shù)相同。

具體的連接速率參考:

限制免費、B1 和 S1B2 和 S2B3 和 S3
新設(shè)備連接(此限制適用于建立 新連接 的速率,而不是連接總數(shù))

高于 100/秒或 12/秒/單位
例如,

底線是100個連接/秒,兩個 S1 單位是 2*12 = 24 個新連接/秒,該值< 100,則按100進行限制。

如果有 9 個 S1 單位,則你的單位就有 108 個新連接/秒 (9*12)。

120 個新連接/秒/單位6,000 個新連接/秒/單位

 

此外,設(shè)備到云的消息發(fā)送也是有速率限制的:

在設(shè)計物聯(lián)網(wǎng)系統(tǒng)時,要充分考慮這些限制條件,才能決定是將 S1 升級到S2 或者增加S1 的單元數(shù)。

限制免費、B1 和 S1B2 和 S2B3 和 S3
設(shè)備到云的發(fā)送100 個發(fā)送操作/秒或 12 個發(fā)送操作/秒/單位,具體取決于哪一個更高
例如,兩個 S1 單位是 2*12 = 24/秒,但是在所有單位中至少有 100 個發(fā)送操作/秒。如果有 9 個 S1 單位,則你的單位就有 108 個發(fā)送操作/秒 (9*12)。
120 個發(fā)送操作/秒/單位6,000 個發(fā)送操作/秒/單位
云到設(shè)備的發(fā)送11.67 個發(fā)送操作/秒/單位(100 條消息/分鐘/單位)1.67 個發(fā)送操作/秒/單位(100 個發(fā)送操作/分鐘/單位)83.33 個發(fā)送操作/秒/單位(5,000 個發(fā)送操作/分鐘/單位)
云到設(shè)備的接收1
(僅當設(shè)備使用 HTTPS 時)
16.67 個接收操作/秒/單位(1,000 個接收操作/分鐘/單位)16.67 個接收操作/秒/單位(1,000 個接收操作/分鐘/單位)833.33 個接收操作/秒/單位(50,000 個接收操作/分鐘/單位)

 

流量整形

為了應(yīng)對突發(fā)流量,IoT 中心可在有限的一段時間內(nèi)接受超出限制的請求。其中的前幾個請求會立即得到處理。但是,如果請求數(shù)持續(xù)違反限制,IoT 中心會開始將請求放入隊列,并以限制速率對請求進行處理。此效應(yīng)稱為“流量整形”。此外,此隊列的大小受到限制。如果違反限制的情況持續(xù)出現(xiàn),隊列最終將會填滿,而 IoT 中心會開始拒絕請求并引發(fā) 429 ThrottlingException。

例如,如果你使用模擬設(shè)備每秒將 200 條設(shè)備到云的消息發(fā)送到 S1 IoT 中心(它限制為每秒發(fā)送 100 條 D2C 消息)。在前一兩分鐘,消息會立即得到處理。但是,由于設(shè)備發(fā)送的消息數(shù)持續(xù)超過限制,IoT 中心隨后將每秒處理 100 條消息,并將剩余的消息放入隊列。此時你會注意到延遲增大。最終,在隊列填滿后,你會開始收到 429 ThrottlingException,并且“限制錯誤數(shù)”IoT 中心指標會開始增加。若要了解如何基于指標創(chuàng)建警報和圖表,請參閱監(jiān)視 IoT 中心。

參考:

https://docs.microsoft.com/zh-cn/azure/iot-hub/iot-hub-devguide-quotas-throttling?WT.mc_id=AZ-MVP-5003757

立即登錄,閱讀全文
版權(quán)說明:
本文內(nèi)容來自于云計算實戰(zhàn),本站不擁有所有權(quán),不承擔相關(guān)法律責(zé)任。文章內(nèi)容系作者個人觀點,不代表快出海對觀點贊同或支持。如有侵權(quán),請聯(lián)系管理員(zzx@kchuhai.com)刪除!
優(yōu)質(zhì)服務(wù)商推薦
更多