
一、前言
不同的接入層
互聯網的產品基本都需要解決終端的接入問題,每個接入層會因為終端數量、終端能力、網路環境等不同的因素有各自的設計特性,比如:淘寶網需要解決海量短連接問題、微信需要解決海量長連接問題,同時大家都要解決移動網路問題,那么阿里云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是怎么設計的?統一接入層技術細節有哪些?整個接入層的高可用是怎么保障的等等,

釘釘掃碼免費報名
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/294554.html
標籤:其他
上一篇:動態分析IoT韌體(三)
