前言
YoMo 是一個開源編程框架,爲邊緣計算領域的低時延流式數據處理而打造,它底層基於 HTTP 3.0 的核心通信層 IETF QUIC 協議通信,以 Functional Reactive Programming 爲編程範式,方便開發者構建可靠、安全的時序型數據的實時計算應用,並針對5G和WiFi-6場景優化,釋放實時計算價值。git
Y3是一種YoMo Codec的Golang實現,它描述了一個快速和低CPU損耗的編解碼器,專一於邊緣計算和流處理。查看 explainer 獲取更多信息,瞭解更多與YoMo組合的方式。github
CluingOS 是一款以 Kubernetes 爲內核的雲原生超融合工業物聯平臺,它的架構能夠很是方便地使第三方應用與雲原生生態組件進行集成、整合和安裝,支持雲原生應用在多雲與多集羣的統一分發和運維管理。。golang
在這個案例裏,咱們結合了YoMo+Y3的低延時流式處理與CluingOS分佈式部署的特性,展示出如何開發部署一套高效的工業數據收集應用系統,體驗從邊緣端收集傳感器數據,低延時高效地跨越2000多千米地傳輸到雲端進行數據流式處理的全過程,基於這個案例你能夠照葫蘆畫瓢地開發出知足自已需求的應用場景。web
述語
- xxx-source:表示一個數據源收集程序,能直接接收MQTT協議的數據。
- xxx-zipper:表示一個工做流和控制平面。
- xxx-flow:表示一個工做流單元,用於實際的業務邏輯處理,被zipper調度。
- xxx-sink:表示一個數據的傳送目的地,本案例爲一個消費數據的WebSocket服務,被zipper調度。
- xxx-web:表示一個展現實時傳感數據的Web服務。
架構
從圖中的案例可見,區分了邊緣端和雲端兩個獨立的服務區域,其中邊緣端位於上海,雲端位於廣州,距離相隔2000多千米,咱們能夠在最後的測試中看到其低延時的流式處理爲數據的收集和處理提供了使人驚喜的優化。另外,CluingOS超融合工業物聯平臺的容器化分佈式部署能高效地部署調試咱們的應用,真香!下面簡單介紹一下各個模塊和服務:sql
傳感器
震動傳感器,薄膜按鍵傳感器docker
-
震動傳感器。用於產生震動相關的原始數據,通過Lora接收器轉爲MQTT協議的數據,數據格式以下:數據庫
-
TOPIC:shake/20210627_cluing/S07編程
-
Payload:json
{ // 租戶數據庫實例 "tenantId": "20210627_cluing", // 採集設備終端DEVEUI "devEui": "0850533277387820", // 採集原始數據 "data": "CwcMys+69Iks0As4YS4N6A==", // 採集數據時間 "createDate": 1624937248919, // 採集溫度 "temperature": 75, // Z軸振動強度 "vertical": 81, //X軸振動強度 "transverse": 53 }
-
-
薄膜按鍵傳感器。用於產生按鍵相關的原始數據,通過Loar接收器轉爲MQTT協議的數據,數據格式以下:安全
-
TOPIC:shake/20210627_cluing/S05
-
Payload:
{ // 租戶數據庫實例 "tenantId": "20210627_cluing", // 採集設備終端DEVEUI "devEui": "393235307d377504", // 採集原始數據 "data": "AAAQ5gAAAQIIAA==", // 採集數據時間 "createDate": 1624937248919, // 按鍵設備按鍵值 "key": "0800" }
-
5G CPE 一體機
Lora接收器,轉發引擎,shake-source,shake-web
5G CPE 一體機
是部署在邊緣端的一個網關設備,它能夠接收傳感器的數據並轉換爲MQTT協議的數據,咱們的YoMo邊緣端的接收器shake-source就是部署在這個網關設備上,它的一大特點是能夠接受CluingOS超融合工業物聯平臺的容器部署和資源調度,這樣即便你在相隔千里的地方也很容易的分發應用到這個網關設備上,並不須要遠程登陸進行操做哦。
- Lora接收器是網關的默認服務。能夠接收各類各樣的傳感器的監控數據,並轉換爲MQTT協議,不一樣設備的數據能夠分配置不一樣的主題易於管理,上節中的震動傳感器和薄膜按鍵傳感器的數據就被轉換爲定義所示的數據格式了。
- 轉發引擎是網關的默認服務。能夠把MQTT的數據轉發給不一樣的MQTT Broker服務,固然也包括咱們案例中的shake-source。
- shake-source數據源。基於YoMo框架開發的數據源接收服務,它的做用是把MQTT協議的數據轉換爲Y3數據格式並以QUIC的方式傳輸到雲端的shake-zipper工做流引擎。
- shake-web數據展現。這是一個展現兩種傳感器的實時數據的展現Web服務,主要是消費shake-sink提供的WebSocket數據,同時也能夠展現一個完整的RTT往返時延的實時性。
SaaS服務
shake-zipper,shake-flow,shake-sink,HOMEY呼美事件精益化管理系統
這是一套完整的雲端服務,其中的容器化部署也是受到了CluingOS的調度和管理,只須要以不一樣的用戶登陸CluingOS就能夠切換管理在邊緣端或者在雲端的服務。
- shake-zipper工做流引擎。經過編排(workflow.yaml)能夠調度多個flow和sink,讓它們以流的方式把業務邏輯串聯起來,以知足複雜的需求。與之相連的全部通訊和編解碼均以QUIC+Y3進行,提供可靠實時的流式處理,全程體驗流式編程的樂趣。
- shake-flow邏輯處理單元。在這個案體中,處理單元把從source傳輸過來的數據解碼爲Topic和Playload後分別處理震動傳感器和薄膜按鍵傳感器兩種設備的數據,而且達到必定的閥值後調用HOMEY呼美管理系統進行警報或者下發控制邊緣端設備的控制指令。
- shake-sink數據輸出單元。在這個案例中並無輸出到數據庫,而是經過搭建一個WebSocket服務器,把實時的傳感器數據輸出給任意的網頁進行展現消費。這裏的數據是做爲shake-web的數據源進行展現。
- HOMEY呼美管理系統。呼美系統接收到shake-flow的事件通知後會發出警報信息或者下發控制指令到邊緣端控制某些設備實施某種操做。但在這個案例中,咱們會把在呼美系統接收到事件通知的時間點用來做爲延時的統計終點,分析咱們基於YoMo+Y3的低延時確實獲得很大的優化。
CluingOS超融合工業物聯平臺
以不一樣用戶登陸能夠切換對邊緣端服務或者雲端服務的部署和管理
CluingOS提供工業物聯網大數據智能平臺服務及容器化、訂閱式、微服務架構的「現場協同+流程管控+數據智能」的端到端一體化透明工廠系統,支持私有云、公有云或混合雲的多種方式、分佈式部署實施。
代碼
項目yomo-cluing-shake提供了全套的源代碼,下表提供了每一個模塊的簡要說明,供感興趣的朋友查看,參照這個案體的代碼,能夠輕鬆開發出類擬場景的案例。
模塊 | 地址 | 本地運行 | 說明 |
---|---|---|---|
zipper | zipper | make debug_zipper |
編排本案例的工做流和數據流向 |
flow | flow | make debug_flow |
對傳感器數據進行預處理和警報 |
sink | sink | make debug_sink |
提供WebSocket服務用於數據展現 |
source | source | make debug_source |
收集MQTT消息格式的傳感器數據 |
emitter | emitter | make debug_emitter |
模擬產生震動和按鍵數據 |
web | web | make debug_web |
消費WebSocket服務展現傳感器數據 |
quic-mqtt | yomo-source-mqtt-starter | 開發xxx-source的通用組件 |
容器化部署
經過下載上節的項目代碼能夠快速地本地運行,體驗YoMo開發的樂趣,同時咱們提供了各個模塊對應的Dockerfile文件用於打包對應的鏡像,而且上傳到hub.dockder.com,供CluingOS進行部署。
模塊 | Dockerfile | 鏡像地址 | 最新版本 |
---|---|---|---|
zipper | Dockerfile.zipper | shake-zipper | yomorun/shake-zipper:latest |
flow | Dockerfile.flow | shake-flow | yomorun/shake-flow:latest |
sink | Dockerfile.sink | shake-sink | yomorun/shake-sink:latest |
source | Dockerfile.source | noise-source | yomorun/shake-source:latest |
emitter | Dockerfile.emitter | shake-emitter | yomorun/shake-emitter:latest |
web | Dockerfile.web | shake-web | yomorun/shake-web:latest |
quic-mqtt | yomorun/quic-mqtt | yomorun/quic-mqtt:latest |
yomorun/quic-mqtt:latest 是打包xxx-source的基礎鏡像,能夠快速打包自定義代碼,但本案例中能夠暫時忽略。
CluingOS部署
經過不一樣的用戶登陸
CluingOS工業超融合系統
能夠分別管理邊緣端和雲端的容器。
部署雲端服務
用戶A部署zipper/flow/sink服務到雲機器。
-
建立自定義應用。
建立一個自制應用shake-cloud,用於管理雲端的服務。
-
建立服務。
進入shake-cloud應用的控制檯,選擇添加服務,選擇無狀態服務,則進入建立服務的流程。
-
基本信息:指定服務的名稱爲shake-sink
-
容器鏡像:
- 添加容器鏡像:選擇從DockerHub中搜索shake-sink
- 端口設置:指定容器暴露的服務端口,例如:8000
- 環境變量:例如
SHAKE_ZIPPER_ADDR=shake-zipper.yomo-cluing-shake:9000
,這裏的shake-zipper.yomo-cluing-shake
則時建立shake-zipper後得到的zipper在內部DNS名。
-
掛載存儲和高級設置:在這個案例中都不須要設置。
-
編輯外網訪問:選擇NodePort的訪問方式,獲取獲得對外暴露端口號30095
-
-
服務列表
至此,分別建立了zipper/flow/sink的服務。
部署邊緣端服務
用戶B部署source/web服務到邊緣的5GCPE一體機。
部署方式與部署雲端服務
相同,先建立一個shake-edge應用,而後在應用中建立對應的無狀態服務,得到服務列表:
接入傳感器展現效果
轉發引擎把MQTT的消息轉發到shake-souce服務。
爲了接入傳感器數據,只須要修改轉發引擎的轉發地址爲shake-source服務的地址端口,便可經過shake-web展現收到的實時數據。
效果對比
爲了與傳統http上報數據進行時延對比,設計測試用例進行效果對比。
本次與yomo集成均採用真實環境進行,全部相關應用組件所有采用CluingOS進行容器化部署和安裝,場景覆蓋了雲-邊-端的應用。除了驗證yomo的加速效果,還將yomo集成整合進了凌犀平臺體系(CluingOS/AIOT/MOM),如下主要介紹yomo的加速測試效果。
實際場景
從測試架構圖可見,使用兩組測試進行對比:
QUIC+Y3通道
如圖中橙色流程所示,數據傳輸路徑爲:
HTTP通道
如圖中綠色流程所示,數據傳輸路徑爲:
環境說明
- 5G CPE一體機放置在上海金橋辦公室。
- MOM智造運營管理系統部署在廣州騰訊雲。
- 測試時延鏈路爲上海金橋辦公室至廣州騰訊雲這段網絡。
測試方法
- 準備傳感器A(3932353062376611)和傳感器B(0850533277387820)。
- 傳感器A走傳統HTTP協議、傳感器B走QUIC+Y3協議。
- 每一個傳感器傳輸600條記錄,求出平均時延。
計算公式
select device_sn,(timeCount/count)*1000 agv,count from( select device_sn,sum(unix_timestamp(end_time) -unix_timestamp(begin_time)) as timeCount, count(id) as count from sdm_device_logs_copy2 GROUP BY device_sn ) t
測試結論
序號 | 協議類型 | 設備編碼 | 平均時延(毫秒) | 測試記錄數 |
---|---|---|---|---|
1 | HTTP | 傳感器A(3932353062376611) | 100.268333(ms) | 600 |
2 | QUIC+Y3 | 傳感器B(0850533277387820) | 33.493333(ms) | 600 |
從採集樣本中利用計算公式,求得每一個傳感器傳輸600條數據的平均時延,能夠看出HTTP協議平均時延爲100.26毫秒,QUIC+Y3協議平均時延只有33.49毫秒,具備很是明顯的加速效果。
結束語
近年來,新一代信息技術發展日新月異,互聯網由消費領域向工業領域加速拓展。從數字產業化方面來看,工業互聯網想要向更大範圍、更深程度和更高水平發展,亟需新的技術、產品和解決方案。YoMo 開源編程框架可以大幅提高從邊端到雲端的傳輸效率,提高實時性和得到低延時的優點,同時全新的流式計算和編程範式給開發者一個全新的開發體驗,更天然更高效地開發出流式計算的應用。藉助凌犀的CluingOS超融合工業物聯平臺能夠快速方便地把容器服務部署在邊緣端和雲端,實現服務治理能力的大幅提高。