天天看點

IoT億級裝置接入層建設實踐

一、前言

不同的接入層

網際網路的産品基本都需要解決終端的接入問題,每個接入層會因為終端數量、終端能力、網絡環境等不同的因素有各自的設計特性,比如:淘寶網需要解決海量短連接配接問題、微信需要解決海量長連接配接問題,同時大家都要解決移動網絡問題,那麼阿裡雲IoT物聯網接入層需要解決的是什麼?在回答這個問題之前,先來看看物聯網的特性

物的特性

既然要解決"物"的問題,那麼首先需要了解"物",先來看看這些"物"包括哪些,這些物有什麼特性?

  • 居家類:電視機、音箱、開關、燈泡,空調、洗衣機等
  • 基礎設施類:水表、電表、瓦斯表等
  • 工業場景:産品資訊、品質資訊、裝置能耗資訊等
  • 安防類:攝像頭、門磁、煙感等
  • 其他:汽車、手表、眼鏡、單車、門鎖、充電寶、起搏器等
IoT億級裝置接入層建設實踐

"物"的種類非常多,應用場景、成本各不同,比如水表一般安裝在戶外,一般采用電池供電,這種裝置對能耗的要求非常苛刻,比如基站鐵塔的後備電源,一般安裝在荒野,這種裝置對網絡的要求非常苛刻,比如開關,這種裝置對存儲、記憶體、cpu的要求非常苛刻,不同的"物"特性催生了不同的IoT接入層,下面來看看IoT接入層需要做什麼?

二、IoT接入層需要解決什麼問題?

2.1 接入層關鍵問題

通用接入層需要解決的問題

  • 安全性:通道安全、身份安全、資料安全
  • 連接配接方式:采用TCP、UDP,使用長連接配接還是短連接配接?
  • 協定選擇:http協定、protobuf協定、mqtt、coap、私有協定等
  • 網絡問題:就近接入/就快接入、系統及TCP/IP協定核心參數的調優等
  • 海量連接配接問題:當海量連接配接線上時,怎麼保障系統的可用性?

IoT接入層有什麼不同

特性:多樣性、碎片化

針對這些裝置特性,IoT接入層需要怎麼來解決?

2.3 相同的問題,不同的解法

  • 安全性:各種裝置都聯網後,裝置将在我們的生活中更加根深蒂固,給安全帶來更大的挑戰,比如:汽車、門鎖、起搏器等收到安全攻擊,那麼使用者的隐私、财産、生命都會帶來嚴重的威脅。IoT場景下很多裝置對存儲、記憶體、cpu、網絡都有要求,那麼在設計安全時,就不能簡單的通過加強加密的安全方法來解決這個問題,因為它們執行複雜加密和解密的速度不足以讓它們實時安全地傳輸資料。IoT接入層既要考慮安全性,又要對受限裝置做妥協,需要怎麼去平衡兩者的需求?
  • 網絡問題:IoT場景下的網絡更加複雜,通信層面包括有廣域網技術:GPRS/4G/5G/Lora/NB-IoT等,有區域網路技術:Ble、ZigBee等,不同的通信模組會有不同的網絡品質,怎麼來保障網絡穩定性,網絡RT是非常關鍵的點。IoT場景下很多裝置隻能采用區域網路通信技術,這類裝置不能直接上網,需要邊緣網關來代理上網,針對邊緣網關的場景,接入層需要怎麼設計?一個邊緣網關下面可能挂了幾萬個裝置,如果一個通道來處理的話,怎麼解決單通道的擁塞問題以及單通道的熱點問題?如果多通道來處理,這些通道之間怎麼建立網絡拓撲模型?
  • 協定選擇:一般的接入層隻會選擇一種協定(比如淘寶的http、釘釘的lwp、微信的私有協定),但是IoT不同,它需要支援多種協定,支援這麼多協定,就是為了解決不同的業務場景,比如業務場景會主動給裝置推送消息(共享充電寶、共享自行車等),那麼需要使用tcp長連接配接來解決,這種情況下采用mqtt+tcp協定會比較合理。比如業務隻需要裝置上報消息(水表、電表等),不需要發控制指令給裝置,那麼采用coap的udp短連接配接就比較合适,既能省能耗,又能省流量。比如業務需要在浏覽器上使用,那麼http的tcp短連接配接就比較合适,天然的适配。比如業務已經有大量存量裝置,同時采用了私有協定,連接配接了自建的平台,但是現在又想要接入阿裡雲IoT平台,使用平台各種能力(資料分析、監控、生态等),那麼采用泛發接入是比較合理的做法,通過泛發協定把私有協定轉成标準協定,裝置不需要改動,隻要在自建平台做個适配層就可以了。
    IoT億級裝置接入層建設實踐

三、怎麼解決IoT的接入問題,阿裡雲的優勢在哪裡?

3.1 安全設計

對于系統設計來說,安全是基礎,但又不能因為安全問題影響使用者體驗,需要在安全性和體驗上找到平衡點,同時對于低功耗裝置需要有不同的安全考量,那麼阿裡雲IoT接入層是怎麼來做的呢?

核心思想:通過三層安全防護機制 + 雲端的安全風控模型來保證裝置的安全性

三層防護機制

第一層:DDos 防護系統

基于阿裡雲強大、專業的DDos安全防護體系,防止IoT業務出現重大經濟損失、資料洩露等問題,詳細參考

DDos防護
IoT億級裝置接入層建設實踐
第二層:通道安全

通過支援TLS、DTLS、X509、ID2 四種方式來解決通道的安全問題,同時針對低功耗裝置,做了多個次元的優化

  • 不同傳輸協定上的TLS:mqtt協定跑在TCP之上,而coap協定跑在UDP之上,針對不同的傳輸協定,IoT接入層分别實作了TLS、DTLS,用來解決不同協定的通道安全問題
  • 流量次元:TLS認證流程中,需要把服務端證書傳給裝置端,大概消耗4K左右流量,同時要求裝置支援非對稱加密算法,對于某些低功耗裝置來說,能耗、流量、加密能力都是有要求的,IoT接入層通過PSK技術,解決證書傳輸帶來的流量消耗問題,同時解決非對稱加密算法對cpu的性能損耗問題
  • RTT減少1次:TLS的握手需要2次RTT,正常公網的RT 50毫秒,兩次RTT需要消耗100毫秒時間,為了減少網絡互動次數,IoT接入層實作了sessionTicket技術,利用sessionTicket的複用能力來減少通道建立過程中的RTT次數,同時也去掉了證書傳輸和非對稱加密

注:ID2是阿裡雲安全團隊實作的類TLS協定,能力跟X509的雙向TLS對等,同時在雙向認證的基礎上,減少了裝置證書的傳輸,适用于對安全等級要求較高、同時對裝置流量有要求的場景。

第三層:裝置身份授權及驗證

阿裡雲IoT的裝置身份叫三元組,由平台授權頒發的裝置身份資訊,每個裝置全球唯一,在裝置建立連接配接時,裝置通過DeviceSecret加簽裝置資訊,然後有平台對加簽資訊進行驗證,用來完成裝置登陸IoT平台,保障裝置的安全性。

三元組指的是ProductKey、DeviceName、DeviceSecret的組合。

  • ProductKey:是物聯網平台為産品頒發的全局唯一辨別。
  • DeviceName:在注冊裝置時,自定義的或系統生成的裝置名稱,具備産品次元内的唯一性。
  • DeviceSecret:物聯網平台為裝置頒發的裝置密鑰,和DeviceName成對出現。

雲端一體的安全風控體系

為了進一步提升裝置的安全等級,阿裡雲IoT建立安全風控模型,針對裝置暴力認證、裝置惡意連接配接等行為,采取主動預警,快速阻斷等措施,為裝置安全保駕護航。比如某個裝置不停的來認證,但是每次認證都是因為簽名驗證而失敗,同時裝置每次上傳的簽名又不同,根據這三個條件基本可以判定該裝置存在暴力認證的行為。

3.2 網絡優化

直連網絡

不同的通信模組(GRPS/3G/4G/5G、Ble/ZigBee),不同的部署環境(電梯、地下車庫、荒野),會導緻各種不同的網絡差異,給裝置的連接配接穩定性帶來風險,阿裡雲IoT針對這些問題,是怎麼來解決的?核心思路:讓裝置就近接入,同時提供穩定、高速的網絡環境。阿裡雲IoT接入層通過部署多region(如下圖)的方式來為使用者提供就近接入的能力,通過BGP網絡為裝置提供穩定、高速的網絡環境。

BGP網絡有什麼優勢?
  • 消除南北通路障礙。由于BGP可以将聯通、電信、移動等營運商的線路“合并”,使得中國南北無障礙通訊成為可能。對接入層來說,可使“聯通、電信”這類差別消失,更能使一個網站資源無限制的在全國範圍内無障礙通路,而不需要在異地部署VPN或者異地加速站來實作異地無障礙通路。
  • 高速互聯互通。原來一條線路通路另一線路往往要經過很多層路由,但實作BGP以後就像進入了高速公路。
  • 品質最好的網絡:從營運商網絡品質來看,BGP帶寬是中國内地地域目前最昂貴的、線路品質也是最好的線路。對于延遲要求比較苛刻的業務可以使用BGP線路來解決。
IoT億級裝置接入層建設實踐
就近接入

先來看看使用者怎麼就近接入?分兩種情況:

  • 裝置使用的區域确定:裝置廠商在生産裝置時,已經知道裝置需要賣到哪些地方,對于這類情況,裝置直接寫死就近的region接入位址就可以了。
  • 裝置使用的區域未定:裝置在生産時,并不清楚裝置在哪個區域使用?這種情況肯定不能直接寫死一個接入位址了,這種情況下,首先需要解決的是裝置的區域歸屬問題,解決這個問題有兩種方式:一種方式是讓使用者指定裝置的歸屬地,這種方式比較普遍,比如買蘋果産品時,不管iphone,ipad都會在裝置初始化時要求設定一個歸屬地,還有一種是根據裝置IP位址來判定,可以做到無人工幹預,完全自動化,但因為IP庫存在一定的誤差,這種自動化同時也會帶來歸屬地判定的錯誤。

那麼阿裡雲IoT針對這兩種歸屬地判定場景做了什麼優化?

  • 使用者指定歸屬地:使用者可以在配網的時候設定歸屬地到裝置裡,也可以在阿裡雲IoT平台提前預置裝置的歸屬地,裝置隻需要在接入IoT平台之前去裝置引導服務擷取就近接入點位址就可以了。 這裡有個問題:去哪裡擷取裝置接入點位址?阿裡雲IoT隻部署一個中心,然後通過全球裝置引導服務中心+加速通道+智能域名來解決這個問題。
  • 自動判定裝置歸屬地:為了減少IP判定帶來的誤差,阿裡雲IoT支援産品的多區域指定能力,比如可以指定裝置可能會在新加坡,上海、美東等地使用,然後動态的根據IP+設定區域來判定裝置歸屬地,這樣的精度就會有明顯的提升。

region覆寫不到的區域的網絡優化方案

阿裡雲IoT通過多region部署來滿足裝置的就近接入,但是region數量有限(部署region的代價較大),不能解決一些偏遠地區的網絡問題,IoT接入将通過部署前置節點 + 智能動态路由能力來解決這個問題。比如把IoT前置接入點(不需要部署整個region)部署在離偏遠地區最近的機房,然後通過該前置接入點代理裝置登陸到指定的region中,然後在前置接入點跟指定region部署加速通道,這樣就能解決這些偏遠地區裝置的網絡問題。

IoT億級裝置接入層建設實踐

邊緣網關

針對網關裝置,如果子裝置較多的情況下,會帶來哪些問題?

  • 網關下有10w個子裝置,同時每個子裝置定時資料上報,需要怎麼設計?
  • 網關下的10w個子裝置,因為網關下線,全部需要斷線重連,需要怎麼保障子裝置快速上線?
大資料的上報的解決方案
IoT億級裝置接入層建設實踐

阿裡雲IoT的網關技術方案核心技術點:

  • 多通道:一個網關有多條實體TCP連接配接,每個實體連接配接等價,網關可以往任意一個實體連接配接發送或者接受資料
  • 子裝置虛拟連接配接:網關代理子裝置上線,每個子裝置對應一個虛拟連接配接的session
  • 子裝置&自連裝置打平:伺服器對子裝置跟直連裝置等同處理,唯一差别就是直連裝置有獨立channel,子裝置是共享實體channel,這樣設計便于裝置的各種運維操作

通過多通道解決了網關的海量資料上報問題、通道的熱點問題,同時解決了通道容災問題。

通過虛拟連接配接解決了子裝置通道複用的問題,不需要為每個子裝置建立一個TCP連接配接。

通過子裝置和直連裝置打平解決了各種運維的複雜性,子裝置相當于一個直連裝置。

子裝置的登陸慢的解決方案

核心思想:優化登陸速度、減少離線次數、延遲離線時間+增量同步政策。

業務場景:針對不同的子裝置數量,可以采取不同的政策,比如子裝置在1000以内,可以隻提升登陸速度就可以了,如果子裝置在10w以上,建議多種政策配合,同時根據業務對裝置的狀态敏感度來定義這些政策,比如子裝置全部下線了,業務都無所謂,那麼建議網關按簡單的來處理,串行/并行批量登陸都是可以的。

優化政策:

  • 提升登陸速度:通過并發批量登陸來解決。
  • 減少離線次數:首先需要定義網關離線,隻有網關的全部通道都斷開了,才認為網關斷開,這樣可以通過多通道的模式來減少網關的離線次數。
  • 延遲離線時間+增量同步政策:服務端隻有在網關離線一段時間後,才會把所有子裝置下線,如果網關在這個時間段内重新登陸,那麼網關隻需要登陸/離線在這個時間内有變動的子裝置。

其他優化點

阿裡雲IoT接入層不盡對應用層做了很多積極的優化,同時對系統核心、CPU、網卡、TCP記憶體參數都做了優化,連針對防火牆、路由器等中間網絡裝置都專門做了優化

TCP/IP核心參數優化
  • TCP三向交握的優化:半連接配接隊列、全連接配接斷鍊、syn重試政策、syn+ack重試政策、fastopen等
  • TCP傳輸的優化:初始視窗大小優化、tcp記憶體優化、支援緩沖區的動态調整、快速重傳政策等
  • TCP四次揮手的優化:主要是針對time_wait狀态的優化、孤兒連接配接優化
系統優化
  • 網卡隊列大小優化
  • 利用reuseport來提升TCP建連性能
針對防火牆的優化
  • 對于mqtt的1883端口,有些防火牆可能會阻斷連接配接,阿裡雲IoT通過支援443端口來繞過這個問題
針對路由器的優化
  • 對于一些非标的路由器,可能不支援分片,因為MSS封包太大而被這些中間路由器丢棄,導緻裝置連接配接不上或發送資料異常,阿裡雲IoT通過優化MTU大小來解決這個問題

3.3 架構設計

對于協定的選擇,阿裡雲IoT采取的是标準化政策,通過标準化來解決裝置之間的互通問題,通過标準化來解決裝置接入平台的了解成本,标準的好處很多,不一一列舉。這裡主要講講多種标準協定和接入層怎麼适配?怎麼在系統釋出時,裝置做到無感?怎麼讓每個裝置在連接配接層、協定層都做到連接配接高可用?

協定層和接入層适配

核心思想:接入層、協定層分離,讓接入層更純粹、讓協定層支援更多的能力。接入層更純粹指的是什麼、協定層支援更多的能力是什麼意思?

  • 接入層更純粹:讓接入層隻做接入的事情,包括:基礎網絡優化、智能路由、TLS解除安裝、證書管理、限流等,這樣做的好處很明顯,接入層隻有基礎能力,不支援任何業務特性,沒有業務特性也意味着減少系統變更,減少了系統變更意味着更加穩定(據統計80%以上的故障都是變更引起的),同時為了解決接入層釋出帶來的裝置批量斷連問題,阿裡雲IoT接入層支援二進制熱更新能力,在接入層釋出過程中,可以不斷開裝置連接配接,同時為了讓裝置更快的體驗新能力,可控的觸發裝置重連(比如針對連接配接一直穩定的裝置,在釋出新功能後,讓裝置在低峰期慢慢的重連),通過不同的組合政策,讓裝置連接配接更穩定。
  • 标準協定層支援更多的能力:這裡的能力指的是在協定層上做的各種業務特性,同時也包括協定本身的擴充能力。業務特性包括執行個體邏輯隔離、執行個體規格能力限制等,協定的擴充:比如mqtt 3.1通過pub、sub來模拟通用的RPC能力(解決使用者控制裝置的能力,比如使用者通過手機借用共享充電寶的業務),通過clientId字段打标來支援payload的解壓縮能力,通過壓縮能力減少裝置的流量,通過智能心跳機制減少心跳報的發送。

通過兩層分離機制,讓接入更穩定,同時讓業務更快的疊代發展。

3.4 連接配接高可用

通用的高可用政策:副本、隔離、failover機制。副本是最常用的做法,對于連接配接來說,副本就是每個裝置建立多通道,如果同一個裝置有多個通信模組(比如:4G+wifi),還可以根據不同的模組建通道,這個成本對于裝置端和服務端來說都會比較高,想做成通用比較麻煩,但是對于邊緣網關裝置确實可能會有這種業務場景,後續我們會支援起來,那麼阿裡雲IoT現在的政策是什麼?隔離 + failover

  • 連接配接型執行個體的實體隔離(隔離):提供連接配接型執行個體,讓裝置可以獨占實體資源,在實體上做到執行個體的連接配接完全隔離。
  • 裝置端重試(failover):提供SDK支援裝置快速重連能力,同時支援重連的指數退避政策,防止因為服務本身問題而不停的重連,導緻裝置資源的消耗。
  • 每個裝置獨享一條通道(隔離+failover):裝置<-->接入層<-->協定層,這三者之間一一對應,這樣做的目的是每個裝置的連接配接不會互相影響,在該連接配接通道上的消息上下行全部隔離。接入層<-->協定層之間也支援了failover能力,比如當協定層應用釋出時,接入層會自動把該通道1-1恢複到另一台協定層上,做到了裝置無感覺。

四、結尾

IoT接入層涉及的技術點非常多,上面隻是針對3個核心的問題做了簡單的介紹,後續會陸續展開介紹其關鍵點。 比如:裝置SDK是怎麼設計的?統一接入層技術細節有哪些?整個接入層的高可用是怎麼保障的等等,

繼續閱讀