邊緣計(jì)算,是一種分散式運(yùn)算的架構(gòu),它將應(yīng)用程序、數(shù)據(jù)資料與服務(wù)的運(yùn)算,由網(wǎng)絡(luò)中心節(jié)點(diǎn),移往網(wǎng)絡(luò)邏輯上的邊緣節(jié)點(diǎn)來(lái)處理。邊緣運(yùn)算將原本完全由中心節(jié)點(diǎn)處理大型服務(wù)加以分解,切割成更小與更容易管理的部分,分散到邊緣節(jié)點(diǎn)去處理。
基于邊緣計(jì)算物聯(lián)網(wǎng)解決方案,從架構(gòu)上可以分為:傳感控制層、網(wǎng)絡(luò)層、敏捷控制器和應(yīng)用層。
傳感控制層:包含大量的傳感器、控制部件(比如開(kāi)關(guān)等)和測(cè)量部件(比如電表等),另外還有通信部件。這些通信部件可能是獨(dú)立的,也可能是和其它部件結(jié)合在一起的。
網(wǎng)絡(luò)層:主要實(shí)現(xiàn)融合和互聯(lián),它的功能除了網(wǎng)絡(luò)聯(lián)接和管理之外,還包括邊緣計(jì)算,進(jìn)行現(xiàn)場(chǎng)處理,同時(shí)保障業(yè)務(wù)在本地的存活。本地存活和現(xiàn)場(chǎng)處理對(duì)物聯(lián)網(wǎng)尤其是工業(yè)和民用大型設(shè)施是非常重要的。此外,協(xié)議轉(zhuǎn)換也是這一層的重要功能。在 IoT 領(lǐng)域有特別多的協(xié)議,這些協(xié)議來(lái)自于各個(gè)行業(yè)歷史上的積累,所以需要在網(wǎng)關(guān)上做協(xié)議的轉(zhuǎn)換,將數(shù)據(jù)統(tǒng)一承載在 IP 網(wǎng)絡(luò)上向外傳輸。
敏捷控制器:將網(wǎng)關(guān)送上來(lái)的數(shù)據(jù)進(jìn)行統(tǒng)一的處理,向上送給應(yīng)用層。并對(duì)下層的網(wǎng)絡(luò)、傳感器、控制部件、測(cè)量部件、計(jì)算資源進(jìn)行管理,提供網(wǎng)絡(luò)布署、配置的自動(dòng)化工具。
業(yè)務(wù)應(yīng)用層:集成各種行業(yè)應(yīng)用。
“兩端一云”的物聯(lián)網(wǎng)解決方案IoT Suite
萬(wàn)物互聯(lián)的蓬勃發(fā)展,互聯(lián)網(wǎng)接入的用戶和設(shè)備越來(lái)越多,無(wú)論是個(gè)人用戶,還是物聯(lián)網(wǎng)接入設(shè)備,每時(shí)每刻都在產(chǎn)生大量的數(shù)據(jù)。數(shù)據(jù)量不斷增多的情況下,同時(shí)要求對(duì)于設(shè)備的響應(yīng)、本身的計(jì)算能力越來(lái)越強(qiáng)?;趥鹘y(tǒng)設(shè)備連接中央服務(wù)器,網(wǎng)絡(luò)延遲和帶寬會(huì)產(chǎn)生巨大成本,設(shè)備無(wú)法通過(guò)網(wǎng)絡(luò)即時(shí)連接到云和中央服務(wù)器。
為了解決上述問(wèn)題,騰訊云提出了“兩端一云”的物聯(lián)網(wǎng)解決方案IoT Suite,幫助實(shí)現(xiàn)設(shè)備的快速物聯(lián)網(wǎng)化。同時(shí),平臺(tái)提供標(biāo)準(zhǔn)TLS1.2、雙向認(rèn)證保護(hù)設(shè)備與云端通道安全,對(duì)于計(jì)算能力偏弱的設(shè)備,采用動(dòng)態(tài)令牌,實(shí)現(xiàn)一機(jī)一鑰的能力,完成設(shè)備端-云-應(yīng)用端的雙向安全通信。
如上圖所示,騰訊云物聯(lián)網(wǎng)平臺(tái)整體包括三層架構(gòu),包括平臺(tái)核心處理層,設(shè)備連接層以及應(yīng)用連接層。平臺(tái)核心處理層提供統(tǒng)一的云端中控管理平臺(tái),提供包括數(shù)據(jù)模版,日志存儲(chǔ),影子服務(wù),規(guī)則引擎等功能。設(shè)備連接層和應(yīng)用連接層通過(guò)開(kāi)放的APIs提供封裝的固件SDK和應(yīng)用SDK,向上集成不同行業(yè)應(yīng)用,向下連接各種傳感器、終端和中控網(wǎng)關(guān)設(shè)備,完成跨硬件設(shè)備接入。
整個(gè)平臺(tái)提供的開(kāi)發(fā)支持,包括設(shè)備端的嵌入式固件 SDK,云端開(kāi)放式API 接口,以及用戶應(yīng)用端的集成式 SDK 等。設(shè)備與云之間的通訊平臺(tái)封裝了標(biāo)準(zhǔn)的MQTT、CoAP、HTTP等不同的通訊協(xié)議,支持2G/4G/NB/lora/wifi等連接方式。同時(shí),應(yīng)用端提供MQTT、WebSocket、HTTP協(xié)議及中間件,方便企業(yè)應(yīng)用、手機(jī)應(yīng)用等不同應(yīng)用的接入。
設(shè)備端固件 SDK
提供基于 Linux、Android 及主流 Rtos 的設(shè)備接入SDK,支持各種包括 2/3/4G、WIFI、LORA、NB-IOT 通訊模式的通訊模組, SOC 開(kāi)發(fā)板、SIP 開(kāi)發(fā)板,封裝了與云端鑒權(quán)、通信的全套接口,支持 MQTT/ CoAP/ WebSocket 等多種協(xié)議,可移植至不同硬件環(huán)境運(yùn)行。
應(yīng)用端 SDK
封裝了 APP 應(yīng)用端與騰訊云物聯(lián)網(wǎng)開(kāi)發(fā)中心的通訊過(guò)程, 包括設(shè)備的配置入網(wǎng)、發(fā)現(xiàn)、連接、控制、狀態(tài)上報(bào)、告警和故障通知等。使用 SDK,可以使得用戶快速完成 APP 開(kāi)發(fā),從而降低對(duì)復(fù)雜的協(xié)議與錯(cuò)誤處理等事項(xiàng)。
開(kāi)放式通訊云 API
提供從設(shè)備接入,賬號(hào)管理,設(shè)備綁定,遠(yuǎn)程監(jiān)控&升級(jí)等設(shè)備高級(jí)數(shù)據(jù)服務(wù),并提供對(duì)應(yīng)的云端 API 調(diào)用接口給到用戶進(jìn)行訪問(wèn)使用,同時(shí)打通騰訊云大數(shù)據(jù),AI 等各種云產(chǎn)品的接口,滿足客戶根據(jù)自身業(yè)務(wù)對(duì)數(shù)據(jù)的使用。
整個(gè)框架從產(chǎn)品創(chuàng)建,設(shè)備功能設(shè)置,數(shù)據(jù)指令的上傳下發(fā),數(shù)據(jù)的存儲(chǔ)到發(fā)布環(huán)境的應(yīng)用,基本上實(shí)現(xiàn)了設(shè)備物聯(lián)網(wǎng)化所需要的所有組件??傮w而言,基于“兩端一云”的騰訊云 IoT Suite 物聯(lián)網(wǎng)云平臺(tái),能夠?qū)崿F(xiàn)包含設(shè)備接入、設(shè)備管理、數(shù)據(jù)分析處理、數(shù)據(jù)可視化、終端智能在內(nèi)的多項(xiàng)功能。
如何實(shí)現(xiàn)邊緣計(jì)算?
騰訊云IoT邊緣計(jì)算架構(gòu)
基于物聯(lián)網(wǎng)的邊緣計(jì)算實(shí)現(xiàn),主流的主要為兩條路徑,一是微服務(wù)的升級(jí)模式,簡(jiǎn)單理解就是允許用戶在邊緣平臺(tái)運(yùn)行應(yīng)用程序,且提供開(kāi)放的編程環(huán)境,與近年來(lái)來(lái)軟件定義的路徑相似;二是邊緣向云的滲透,利用邊緣能力滲透進(jìn)云領(lǐng)域的核心產(chǎn)品及服務(wù),如數(shù)據(jù)庫(kù)、計(jì)算、存儲(chǔ)、安全的邊緣化。
騰訊云物聯(lián)網(wǎng)邊緣計(jì)算解決方案,主要為物聯(lián)邊緣設(shè)備提供一套本地服務(wù),解決物聯(lián)網(wǎng)應(yīng)用場(chǎng)景下的高可用、實(shí)時(shí)性、帶寬限制、私密性等問(wèn)題。 騰訊云IoT邊緣計(jì)算提供設(shè)備管理、消息收發(fā)、本地計(jì)算、緩存及同步能力,可以在邊緣設(shè)備完成本地化的物聯(lián)設(shè)備管理和通訊。
同時(shí)結(jié)合騰訊云SCF無(wú)服務(wù)函數(shù)agent,用戶只需在云端完成業(yè)務(wù)邏輯代碼編寫(xiě),運(yùn)行方式配置,消息規(guī)則配置,下發(fā)至在網(wǎng)設(shè)備。在設(shè)備上,系統(tǒng)將自動(dòng)完成代碼和配置同步,云函數(shù)運(yùn)行,并在設(shè)備上提供消息收發(fā)、緩存、與云端進(jìn)行消息同步等能力。當(dāng)數(shù)據(jù)產(chǎn)生時(shí),底層的物聯(lián)網(wǎng)設(shè)備將數(shù)據(jù)上報(bào)至智能網(wǎng)關(guān)設(shè)備,觸發(fā)云函數(shù)的運(yùn)行,將數(shù)據(jù)進(jìn)行離線處理,通過(guò)本地的 IoT網(wǎng)關(guān),再將離線處理的數(shù)據(jù)下發(fā)至物聯(lián)網(wǎng)底層設(shè)備。整個(gè)數(shù)據(jù)最主要的計(jì)算處理部分運(yùn)行主要是在云函數(shù)中進(jìn)行。
未來(lái),我們會(huì)將更多的智能化服務(wù)如圖像識(shí)別,包裝為SCF云函數(shù),逐步替換目前的SDK模式,通過(guò)調(diào)用云函數(shù)的方式就可以完成智能化應(yīng)用的開(kāi)發(fā)。
執(zhí)行環(huán)境:無(wú)服務(wù)器云函數(shù)SCF
無(wú)服務(wù)器云函數(shù)(Serverless Cloud Function)是騰訊云提供的無(wú)服務(wù)器(Serverless)執(zhí)行環(huán)境,通過(guò)托管用戶代碼,使用用戶配置的觸發(fā)器,根據(jù)觸發(fā)器的觸發(fā)事件,能夠自動(dòng)執(zhí)行用戶應(yīng)用。SCF 云函數(shù)由事件觸發(fā)執(zhí)行,事件來(lái)源即觸發(fā)器,通常是由其他產(chǎn)品資源對(duì)象作為觸發(fā)器,例如 COS Bucket, CMQ Topic隊(duì)列,定時(shí)器, IoT 設(shè)備等。
云函數(shù)更多是對(duì)用戶的計(jì)算進(jìn)行托管,用戶將代碼和配置提交到云函數(shù)平臺(tái)上,此處的代碼是指用戶的一份代碼或者代碼包。配置,一個(gè)是指本身對(duì)于函數(shù)運(yùn)行環(huán)境的配置,包括使用的是哪種環(huán)境、所需的內(nèi)存、超時(shí)時(shí)間等;另一個(gè)是指觸發(fā)器的配置。
因?yàn)檎麄€(gè)函數(shù)即服務(wù)的運(yùn)行方式是觸發(fā)式運(yùn)行,觸發(fā)就需要有一個(gè)事件來(lái)源,而事件來(lái)源是和騰訊云其他產(chǎn)品進(jìn)行關(guān)聯(lián)后而產(chǎn)生。例如COS對(duì)象存儲(chǔ)產(chǎn)品,它的關(guān)聯(lián)就在COS的存儲(chǔ)桶中,當(dāng)用戶上傳一張圖片或者刪除一張圖片時(shí),就會(huì)產(chǎn)生一個(gè)事件,這個(gè)事件會(huì)觸發(fā)云函數(shù)的運(yùn)行。
例如和API網(wǎng)關(guān)的對(duì)接,也可以作為事件來(lái)源,在用戶的HTTP請(qǐng)求到達(dá)網(wǎng)關(guān)之后,API網(wǎng)關(guān)會(huì)把該請(qǐng)求作為事件轉(zhuǎn)發(fā)給云函數(shù),觸發(fā)云函數(shù)的運(yùn)行,云函數(shù)拿到請(qǐng)求之后進(jìn)行處理,生成響應(yīng)給到用戶。
上圖為云函數(shù)的計(jì)算過(guò)程,用戶先代碼和配置提交到云函數(shù)平臺(tái)進(jìn)行保存,真正事件產(chǎn)生后,針對(duì)每一個(gè)事件都會(huì)拉起一個(gè)函數(shù)實(shí)例,實(shí)現(xiàn)觸發(fā)式運(yùn)行。真正事件來(lái)臨時(shí),用戶函數(shù)才會(huì)運(yùn)行,用戶代碼運(yùn)行時(shí)才有云函數(shù)代碼的數(shù)據(jù)運(yùn)算和費(fèi)用計(jì)算。
因?yàn)楹瘮?shù)本身是托管型的,用戶本身無(wú)法感知到實(shí)例在哪里運(yùn)行。云函數(shù)平臺(tái)背后有個(gè)大的計(jì)算資源池,用戶實(shí)例觸發(fā)之后,從資源池中隨機(jī)選取可運(yùn)行的位置,把用戶的函數(shù)實(shí)例在對(duì)應(yīng)位置上運(yùn)營(yíng)起來(lái)。因此整個(gè)調(diào)度過(guò)程,或者事件來(lái)臨之后的函數(shù)擴(kuò)縮容過(guò)程,都是由平臺(tái)進(jìn)行的。云函數(shù)帶來(lái)的價(jià)值主要包括四點(diǎn):
簡(jiǎn)化架構(gòu):函數(shù)粒度的微服務(wù)架構(gòu),使得系統(tǒng)的各個(gè)功能天然解耦,能像搭積木一樣組合自有及外部服務(wù),實(shí)現(xiàn)所看即所得的后臺(tái)服務(wù);
簡(jiǎn)化開(kāi)發(fā):無(wú)需關(guān)注底層硬件配置、OS,服務(wù)啟停、網(wǎng)絡(luò)收發(fā),故障容災(zāi),服務(wù)擴(kuò)縮容等,只需寫(xiě)最核心的業(yè)務(wù)邏輯,實(shí)現(xiàn)真正的代碼即服務(wù);
簡(jiǎn)化運(yùn)維:無(wú)須關(guān)注服務(wù)部署,服務(wù)器運(yùn)維,安全管控,擴(kuò)縮容配置等,且應(yīng)用能無(wú)縫升級(jí),實(shí)現(xiàn)無(wú)痛切換到DevOps模式。
減少支出:無(wú)閑置成本,僅對(duì)函數(shù)資源大小,執(zhí)行時(shí)間,執(zhí)行次數(shù)按需計(jì)費(fèi),相對(duì)云主機(jī)平均5%~15% 的使用率,價(jià)格優(yōu)勢(shì)明顯,實(shí)現(xiàn)了最徹底的按需計(jì)費(fèi)。
物聯(lián)網(wǎng)主要是和設(shè)備打交道,云函數(shù)交由平臺(tái)托管的調(diào)度,可以把云函數(shù)調(diào)度到用戶設(shè)備上去。通過(guò)云函數(shù),用戶能夠在邊緣平臺(tái)運(yùn)行應(yīng)用程序,幫助實(shí)現(xiàn)設(shè)備上的邊緣計(jì)算。開(kāi)發(fā)者只需通過(guò)編寫(xiě)核心代碼并設(shè)置代碼運(yùn)行的條件,即可進(jìn)行實(shí)時(shí)文件處理和數(shù)據(jù)處理。
硬件設(shè)備如何接入?
接入IoT Suit
因?yàn)橹饕δ芗稍?Iot Suite中,因此硬件設(shè)備的接入比較簡(jiǎn)單,只需獲取SDK、配置開(kāi)發(fā)環(huán)境、將相關(guān)文件進(jìn)行移植即可。
SDK 獲取
git clone https: //github.com /tencentyun /tencent-cloud-iotsuite- embedded- c.git
開(kāi)發(fā)環(huán)境
SDK 在 Linux 環(huán)境下的測(cè)試和驗(yàn)證,主要基于 Ubuntu 16.04 版本,gcc-5.4 (建議至少 gcc-4.7+),Python 2.7.12+(代碼生成及控制臺(tái)命令行腳本)。安裝cmake工具 http://www.cmake.org/download/
編譯及運(yùn)行
a.執(zhí)行命令,編譯示例程序
cd tencent-cloud- iotsuite- embedded-c
mkdir - p build
cd build
cmake ../
make
b.編譯后,build目錄下的關(guān)鍵輸出及說(shuō)明如下:
bin
|-- demo_mqtt # MQTT 連接云服務(wù)演示程序
|-- demo_shadow # Shadow 影子設(shè)備操作演示程序
|-- iotsuite_app # 通用數(shù)據(jù)模板演示程序
|-- light # 基于數(shù)據(jù)模板的 RGB LED Light 演示程序
lib
|-- libtc_iot_suite.a # SDK 的核心層, libtc_ iot_ hal、libtc_ iot_ common 提供連接云服務(wù)的能力
|-- libtc_iot_common.a # SDK 基礎(chǔ)工具庫(kù),負(fù)責(zé)http、json 、base64 等解析和編解碼功能
|-- libtc_iot _hal.a # SDK 的硬件及操作系統(tǒng)抽象,負(fù)責(zé)內(nèi)存、定時(shí)器、網(wǎng)絡(luò)交互等功能
c.執(zhí)行示例程序
cd bin
# 運(yùn)行demo程序
./demo_mqtt
# or
./iotsuite_app
移植說(shuō)明
SDK 抽象定義了硬件及操作系統(tǒng)平臺(tái)抽象層(HAL 層),將所依賴的內(nèi)存、定時(shí)器、網(wǎng)絡(luò)傳輸交互等功能, 都封裝在 HAL 層(對(duì)應(yīng)庫(kù)libtc_iot_hal)中,進(jìn)行跨平臺(tái)移植時(shí),首先都需要根據(jù)對(duì)應(yīng)平臺(tái)的硬件及操作系統(tǒng)情況, 對(duì)應(yīng)適配或?qū)崿F(xiàn)相關(guān)的功能。
平臺(tái)移植相關(guān)的頭文件及源文件代碼結(jié)構(gòu)如下:
include /platform/
|-- linux # 不同的平臺(tái)或系統(tǒng),單獨(dú)建立獨(dú)立的目錄
| |-- tc_iot_ platform.h # 引入對(duì)應(yīng)平臺(tái)相關(guān)的定義或系統(tǒng)頭文件
|-- tc_iot_hal_ network.h # 網(wǎng)絡(luò)相關(guān)定義
|-- tc_iot_hal_ os.h # 操作系統(tǒng)內(nèi)存、時(shí)間戳等相關(guān)定義
|-- tc_iot_hal_ timer.h # 定時(shí)器相關(guān)定義
src/ platform/
|-- CMakeLists.txt
|-- linux
|-- CMakeLists.txt
|-- tc_iot_hal_ net.c # TCP 非加密直連方式網(wǎng)絡(luò)接口實(shí)現(xiàn)
|-- tc_iot_hal_ os.c # 內(nèi)存及時(shí)間戳實(shí)現(xiàn)
|-- tc_iot_hal_ timer.c # 定時(shí)器相關(guān)實(shí)現(xiàn)
|-- tc_iot_hal_ tls.c # TLS 加密網(wǎng)絡(luò)接口實(shí)現(xiàn)
C-SDK 中提供的 HAL 層是基于 Linux 等 POSIX 體系系統(tǒng)的參考實(shí)現(xiàn),但并不強(qiáng)耦合要求實(shí)現(xiàn)按照 POSIX 接口方式,移植時(shí)可根據(jù)目標(biāo)系統(tǒng)的情況,靈活調(diào)整。所有 HAL 層函數(shù)都在 include/platform /tc_iot_ hal *.h 中進(jìn)行聲明,函數(shù)都以 tc_ iot_ hal為前綴。
使用IoT Suit 和 SCF完成邊緣計(jì)算
以搭建一個(gè)電子圍欄應(yīng)用為例,用戶只需配置簡(jiǎn)單五步即可快速開(kāi)發(fā):
在云端創(chuàng)建設(shè)備,云端將為設(shè)備分配設(shè)備標(biāo)識(shí),分配通訊通道,分配配置認(rèn)證信息;
編寫(xiě)電子圍欄消息處理函數(shù),配置消息轉(zhuǎn)發(fā)規(guī)則;
綁定設(shè)備與函數(shù),綁定設(shè)備與規(guī)則;
在設(shè)備中安裝邊緣計(jì)算agent,配置設(shè)備標(biāo)識(shí),認(rèn)證信息,配置通訊通道信息;
啟動(dòng)agent,云端將電子圍欄函數(shù)下發(fā)至本地,驗(yàn)證函數(shù)與規(guī)則在邊緣端生效。