來源 | HaaS技術社區
一、前言
不同的接入層
互聯網的產品基本都需要解決終端的接入問題,每個接入層會因為終端數量、終端能力、網絡環境等不同的因素有各自的設計特性,比如:淘寶網需要解決海量短連接問題、微信需要解決海量長連接問題,同時大家都要解決移動網絡問題,那麼阿里雲IoT物聯網接入層需要解決的是什麼?在回答這個問題之前,先來看看物聯網的特性
物的特性不同
"物"的種類非常多,應用場景、成本各不同,比如水錶一般安裝在戶外,一般採用電池供電,這種設備對能耗的要求非常苛刻,比如基站鐵塔的後備電源,一般安裝在荒野,這種設備對網絡的要求非常苛刻,比如開關,這種設備對存儲、內存、cpu的要求非常苛刻,不同的"物"特性催生了不同的IoT接入層,下面來看看IoT接入層需要做什麼?
二、IoT接入層需要解決什麼問題?
2.1 接入層關鍵問題
-
安全性:通道安全、身份安全、數據安全
-
連接方式:採用TCP、UDP,使用長連接還是短連接?
-
協議選擇:http協議、protobuf協議、mqtt、coap、私有協議等
-
網絡問題:就近接入/就快接入、系統及TCP/IP協議內核參數的調優等
-
海量連接問題:當海量連接在線時,怎麼保障系統的可用性?
-
IoT協議多樣性、設備碎片化
針對這些設備特性,IoT接入層需要怎麼來解決?
2.2 相同的問題,不同的解法
-
安全性:各種設備都聯網後,設備將在我們的生活中更加根深蒂固,給安全帶來更大的挑戰,比如:汽車、門鎖、起搏器等收到安全攻擊,那麼用戶的隱私、財產、生命都會帶來嚴重的威脅。IoT場景下很多設備對存儲、內存、cpu、網絡都有要求,那麼在設計安全時,就不能簡單的通過加強加密的安全方法來解決這個問題,因為它們執行復雜加密和解密的速度不足以讓它們實時安全地傳輸數據。IoT接入層既要考慮安全性,又要對受限設備做妥協,需要怎麼去平衡兩者的需求?
-
網絡問題:IoT場景下的網絡更加複雜,通信層面包括有廣域網技術:GPRS/4G/5G/Lora/NB-IoT等,有局域網技術:Ble、ZigBee等,不同的通信模組會有不同的網絡質量,怎麼來保障網絡穩定性,網絡RT是非常關鍵的點。IoT場景下很多設備只能採用局域網通信技術,這類設備不能直接上網,需要邊緣網關來代理上網,針對邊緣網關的場景,接入層需要怎麼設計?一個邊緣網關下面可能掛了幾萬個設備,如果一個通道來處理的話,怎麼解決單通道的擁塞問題以及單通道的熱點問題?如果多通道來處理,這些通道之間怎麼建立網絡拓撲模型?
-
協議選擇:一般的接入層只會選擇一種協議(比如淘寶的http、釘釘的lwp、微信的私有協議),但是IoT不同,它需要支持多種協議,支持這麼多協議,就是為了解決不同的業務場景。比如業務已經有大量存量設備,同時採用了私有協議,連接了自建的平臺,但是現在又想要接入阿里雲IoT平臺,使用平臺各種能力(數據分析、監控、生態等),那麼採用泛化接入是比較合理的做法,通過泛化協議把私有協議轉成標準協議,設備不需要改動,只要在自建平臺做個適配層就可以了。
三、怎麼解決這些問題,阿里雲優勢在哪裡?
3.1 安全設計
對於系統設計來說,安全是基礎,但又不能因為安全問題影響用戶體驗,需要在安全性和體驗上找到平衡點,同時對於低功耗設備需要有不同的安全考量,那麼阿里雲IoT接入層是怎麼來做的呢?
核心思想:通過三層安全防護機制 + 雲端的安全風控模型來保證設備的安全性
三層防護機制
第一層:DDos 防護系統
基於阿里雲強大、專業的DDos安全防護體系,防止IoT業務出現重大經濟損失、數據洩露等問題,詳細參考DDos防護。
第二層:通道安全
通過支持TLS、DTLS、X509、ID2 四種方式來解決通道的安全問題,同時針對低功耗設備,做了多個維度的優化
-
不同傳輸協議上的TLS:mqtt協議跑在TCP之上,而coap協議跑在UDP之上,針對不同的傳輸協議,IoT接入層分別實現了TLS、DTLS,用來解決不同協議的通道安全問題
-
流量維度:TLS認證流程中,需要把服務端證書傳給設備端,大概消耗4K左右流量,同時要求設備支持非對稱加密算法,對於某些低功耗設備來說,能耗、流量、加密能力都是有要求的,IoT接入層通過PSK技術,解決證書傳輸帶來的流量消耗問題,同時解決非對稱加密算法對cpu的性能損耗問題
-
RTT減少1次:為了減少網絡交互次數,IoT接入層實現了sessionTicket技術,利用sessionTicket的複用能力來減少通道建立過程中的RTT次數,同時也去掉了證書傳輸和非對稱加密
注:ID2是阿里雲安全團隊實現的類TLS協議,能力跟X509的雙向TLS對等,同時在雙向認證的基礎上,減少了設備證書的傳輸,適用於對安全等級要求較高、同時對設備流量有要求的場景。
第三層:設備身份授權及驗證
阿里雲IoT的設備身份叫三元組,由平臺授權頒發的設備身份信息,每個設備全球唯一,在設備建立連接時,設備通過DeviceSecret加簽設備信息,然後有平臺對加簽信息進行驗證,用來完成設備登陸IoT平臺,保障設備的安全性。
三元組指的是ProductKey、DeviceName、DeviceSecret的組合。
-
ProductKey:是物聯網平臺為產品頒發的全局唯一標識。
-
DeviceName:在註冊設備時,自定義的或系統生成的設備名稱,具備產品維度內的唯一性。
-
DeviceSecret:物聯網平臺為設備頒發的設備密鑰,和DeviceName成對出現。
雲端一體的安全風控體系
為了進一步提升設備的安全等級,阿里雲IoT建立安全風控模型,針對設備暴力認證、設備惡意連接等行為,採取主動預警,快速阻斷等措施,為設備安全保駕護航。比如某個設備不停的來認證,但是每次認證都是因為簽名驗證而失敗,同時設備每次上傳的簽名又不同,根據這三個條件基本可以判定該設備存在暴力認證的行為。
3.2 網絡優化
直連網絡
不同的通信模組、不同的部署環境(電梯、地下車庫、荒野),會導致各種不同的網絡差異,給設備的連接穩定性帶來風險,阿里雲IoT針對這些問題是怎麼來解決的?核心思路:讓設備就近接入,同時提供穩定、高速的網絡環境。阿里雲IoT接入層通過部署多region(如下圖)的方式來為用戶提供就近接入的能力,通過BGP網絡為設備提供穩定、高速的網絡環境。
BGP網絡有什麼優勢?
-
消除南北訪問障礙。由於BGP可以將聯通、電信、移動等運營商的線路“合併”,使得中國南北無障礙通訊成為可能。對接入層來說,可使“聯通、電信”這類區別消失,更能使一個網站資源無限制的在全國範圍內無障礙訪問,而不需要在異地部署VPN或者異地加速站來實現異地無障礙訪問。
-
高速互聯互通。原來一條線路訪問另一線路往往要經過很多層路由,但實現BGP以後就像進入了高速公路。
-
質量最好的網絡:從運營商網絡質量來看,BGP帶寬是中國內地地域目前最昂貴的、線路質量也是最好的線路。對於延遲要求比較苛刻的業務可以使用BGP線路來解決。
就近接入
先來看看用戶怎麼就近接入?分兩種情況:
-
設備使用的區域確定:設備廠商在生產設備時,已經知道設備需要賣到哪些地方,對於這類情況,設備直接寫死就近的region接入地址就可以了。
-
設備使用的區域未定:設備在生產時,並不清楚設備在哪個區域使用?這種情況肯定不能直接寫死一個接入地址了,首先需要解決的是設備的區域歸屬問題,解決這個問題有兩種方式:一種方式是讓用戶指定設備的歸屬地,這種方式比較普遍,比如買蘋果產品時,不管iphone,ipad都會在設備初始化時要求設定一個歸屬地,還有一種是根據設備IP地址來判定,可以做到無人工干預,完全自動化,但因為IP庫存在一定的誤差,這種自動化同時也會帶來歸屬地判定的錯誤。
那麼阿里雲IoT針對這兩種歸屬地判定場景做了什麼優化?
-
用戶指定歸屬地:用戶可以在配網的時候設置歸屬地到設備裡,也可以在阿里雲IoT平臺提前預置設備的歸屬地,設備只需要在接入IoT平臺之前去設備引導服務獲取就近接入點地址就可以了,看起來很完美,這裡有個問題:去哪裡獲取設備接入點地址?阿里雲IoT只部署一箇中心,通過全球設備引導服務中心+加速通道+智能域名來解決這個問題。
-
自動判定設備歸屬地:為了減少IP判定帶來的誤差,阿里雲IoT支持產品的多區域指定能力,比如可以指定設備可能會在新加坡,上海、美東等地使用,然後動態的根據IP+設定區域來判定設備歸屬地,這樣的精度就會有明顯的提升。
region覆蓋不到的區域的網絡優化方案
-
阿里雲IoT通過多region部署來滿足設備的就近接入,但是region數量有限(部署region的代價較大),不能解決一些偏遠地區的網絡問題,IoT接入將通過部署前置節點 + 智能動態路由能力來解決這個問題。比如把IoT前置接入點(不需要部署整個region)部署在離偏遠地區最近的機房,然後通過該前置接入點代理設備登陸到指定的region中,然後在前置接入點跟指定region部署加速通道,這樣就能解決這些偏遠地區設備的網絡問題。
邊緣網關
針對網關設備,如果子設備較多的情況下,會帶來哪些問題?
-
網關下有10w個子設備,同時每個子設備定時數據上報,需要怎麼設計?
-
網關下的10w個子設備,因為網關下線,全部需要斷線重連,需要怎麼保障子設備快速上線?
大數據的上報的解決方案
阿里雲IoT的網關技術方案核心技術點:
-
多通道:一個網關有多條物理TCP連接,每個物理連接等價,網關可以往任意一個物理連接發送或者接受數據
-
子設備虛擬連接:網關代理子設備上線,每個子設備對應一個虛擬連接的session
-
子設備&自連設備打平:服務器對子設備跟直連設備等同處理,唯一差別就是直連設備有獨立channel,子設備是共享物理channel,這樣設計便於設備的各種運維操作
通過多通道解決了網關的海量數據上報問題、通道的熱點問題,同時解決了通道容災問題。
通過虛擬連接解決了子設備通道複用的問題,不需要為每個子設備建立一個TCP連接。
通過子設備和直連設備打平解決了各種運維的複雜性,子設備相當於一個直連設備。
子設備的登陸慢的解決方案
核心思想:優化登陸速度、減少離線次數、延遲離線時間+增量同步策略。
業務場景:針對不同的子設備數量,可以採取不同的策略,比如子設備在1000以內,可以只提升登陸速度就可以了,如果子設備在10w以上,建議多種策略配合,同時根據業務對設備的狀態敏感度來定義這些策略,比如子設備全部下線了,業務都無所謂,那麼建議網關按簡單的來處理,串行/並行批量登陸都是可以的。
優化策略:
-
提升登陸速度:通過併發批量登陸來解決。
-
減少離線次數:首先需要定義網關離線,只有網關的全部通道都斷開了,才認為網關斷開,這樣可以通過多通道的模式來減少網關的離線次數。
-
延遲離線時間+增量同步策略:服務端只有在網關離線一段時間後,才會把所有子設備下線,如果網關在這個時間段內重新登陸,那麼網關只需要登陸/離線在這個時間內有變動的子設備。
其他優化點
阿里雲IoT接入層不盡對應用層做了很多積極的優化,同時對系統內核、CPU、網卡、TCP內存參數都做了優化,連針對防火牆、路由器等中間網絡設備都專門做了優化。
3.3 架構設計
對於協議的選擇,阿里雲IoT採取的是標準化策略,通過標準化來解決設備之間的互通問題,通過標準化來解決設備接入平臺的理解成本,標準的好處很多,不一一列舉。這裡主要講講多種標準協議和接入層怎麼適配?怎麼在系統發佈時,設備做到無感?怎麼讓每個設備在連接層、協議層都做到連接高可用?
協議層和接入層適配
核心思想:接入層、協議層分離,讓接入層更純粹、讓協議層支持更多的能力。接入層更純粹指的是什麼、協議層支持更多的能力是什麼意思?
-
接入層更純粹:讓接入層只做接入的事情,包括:基礎網絡優化、智能路由、TLS卸載、證書管理、限流等,這樣做的好處很明顯,接入層只有基礎能力,不支持任何業務特性,沒有業務特性也意味著減少系統變更,減少了系統變更意味著更加穩定。
-
標準協議層支持更多的能力:這裡的能力指的是在協議層上做的各種業務特性,同時也包括協議本身的擴充能力。業務特性包括實例邏輯隔離、實例規格能力限制等,協議的擴充。
通過兩層分離機制,讓接入更穩定,同時讓業務更快的迭代發展。
3.4 連接高可用
通用的高可用策略:副本、隔離、failover機制。副本是最常用的做法,對於連接來說,副本就是每個設備建立多通道,如果同一個設備有多個通信模組(比如:4G+wifi),阿里雲IoT現在的策略是什麼?隔離 + failover:
-
連接型實例的物理隔離(隔離):提供連接型實例,讓設備可以獨佔物理資源,在物理上做到實例的連接完全隔離。
-
設備端重試(failover):提供SDK支持設備快速重連能力,同時支持重連的指數退避策略,防止因為服務本身問題而不停的重連,導致設備資源的消耗。
-
每個設備獨享一條通道(隔離+failover):設備<-->接入層<-->協議層,這三者之間一一對應,這樣做的目的是每個設備的連接不會相互影響,在該連接通道上的消息上下行全部隔離。接入層<-->協議層之間也支持了failover能力,比如當協議層應用發佈時,接入層會自動把該通道1-1恢復到另一臺協議層上,做到了設備無感知。
四、結尾
IoT接入層涉及的技術點非常多,上面只是針對3個核心的問題做了簡單的介紹,後續會陸續展開介紹其關鍵點。比如:設備SDK是怎麼設計的?統一接入層技術細節有哪些?整個接入層的高可用是怎麼保障的等等。