Shifu+WasmEdge:物聯網資料輕鬆“瘦身”

語言: CN / TW / HK

點選藍字 · 關注我們

Shifu+ WasmEdge

物聯網資料輕鬆“瘦身”

當我們在使用 Shifu  採集資料的時候,通常會出現從裝置所採集到的資料,與我們所需要的資料格式不同的情況。為解決此問題,我們可以使用  Shifu WasmEdge 實現把  Shifu 採集到的資料通過  WasmEdge 進行處理後再返回給我們的應用程式。

簡介

本文將簡單介紹如何將  WasmEdge 整合到  Shifu 中,從而實現從IoT裝置上採集的資料的清洗。

以下為基本架構:

以下為本專案的資料流:

Shifu 簡介

Shifu 為使用者提供全場景裝置託管與一體化軟體開發的透明框架。開發者通過使用  Shifu ,可以更簡單地連線、監視和控制任何物聯網裝置。

Shifu 的創新優勢是通過透明框架內的數字孿生技術,為裝置賦予有思考能力的 “數字大腦”。數字孿生將反映裝置的實時狀態,對其進行開發操作等同於操作裝置本身。物聯網裝置接入到  Shifu 中便會生成標準化介面,實現網際網路互動,通過平臺層對場景內所有裝置、機器進行北向資料收集和南向指令管控。

Shifu 是基於Kubernetes的雲原生架構,創造性地將物聯網裝置對應為Kubernetes中的Pod,釋放了物聯網平臺在邊緣場景的裝置管理能力以及雲邊端協同能力。雲原生架構為物聯網的應用開發提供了超高的系統穩定性,並提供給開發者僅運維一套架構實現對物聯網的平臺級維護。

Shifu  官方網站: https://shifu.run

WasmEdge 簡介 

WasmEdge 是輕量級、安全、高效能、符合 OCI 標準的軟體容器與執行環境。目前是 CNCF 沙箱專案。 WasmEdge 被應用在 Servrless SaaS、雲原生,service mesh、邊緣雲、邊緣裝置、智慧合約等領域。

WasmEdge 作為輕量級的容器,footprint 只有幾兆,能夠在資源受限的環境提供安全且不損失效能的執行環境。

嵌入式 Runtime 是 WasmEdge 的一個典型應用場景, WasmEdge 提供了 C/C++、Rust、 Golang 等 SDK,方便開發者將 WasmEdge 嵌入到 現有的應用軟體中,從而將幾乎任何應用軟體變成可擴充套件的開發者平臺。 WasmEdge 作為嵌入到 Shifu 的輕量級容器,為 Shifu 提供了安全執行第三方不受信任程式碼的環境。

瞭解 WasmEdge 相關資訊:

https://github.com/WasmEdge/WasmEdge

步驟

準備 

kubectl v1.24.2 

docker 20.10.16 

kind v0.14.0 

git 2.36.1 

部署 

為了方便更快的瞭解本篇文章,你可以通過以下命令從GitHub上拉取本專案。

git clone https://github.com/Edgenesis/wasm-shifu-demo.git
cd wasm-shifu-demo

建立 kind 叢集 

使用以下命令建立 Kind 叢集

$ kind delete cluster && kind create cluster

Creating cluster "kind" ...

✓ Ensuring node image (kindest/node:v1.24.0)

✓ Preparing nodes :package:

✓ Writing configuration :scroll:

✓ Starting control-plane ️

✓ Installing CNI :electric_plug:

✓ Installing StorageClass :floppy_disk:

Set kubectl context to "kind-kind"

You can now use your cluster with:

kubectl cluster-info --context kind-kind

Have a question, bug, or feature request? Let us know! https://kind.sigs.k8s.io/#community

構建 Shifu 映象 

使用以下命令構建 Shifu 映象。

$ make -f shifu/Makefile build-image-deviceshifu

$ kind load docker-image edgehub/deviceshifu-http-http:v0.0.6

$ docker images | grep edgehub/deviceshifu-http-http

edgehub/deviceshifu-http-http v0.0.6 1d6b3544b8ad 54 minutes ago 36.1MB

執行虛擬裝置 

為了方便你的體驗,這裡我們使用虛擬裝置進行模擬。安裝並執行虛擬裝置,裝置的埠號為8099。

$ docker build -f mockDevice/dockerfile -t mockdevice:v0.0.1 .

$ docker run -p 8099:8099 -itd mockdevice:v0.0.1

$ docker ps | grep mockdevice

bdfd2b1323be mockdevice:v0.0.1 "./mockDevice" 19 seconds ago Up 18 seconds 0.0.0.0:8099->8099/tcp admiring_feistel

編寫規則,編譯wasm 

你可以通過使用 JavaScript 編寫規則。如果你不熟悉 JavaScript,可以直接使用預設規則。

規則檔案路徑: wasmEdge/js-func/src/js/run.js    你可以通過修改該規則來實現不同的功能。

$ docker build -t wasm:v0.0.1 -f wasmEdge/js.dockerfile .

$ kind load docker-image wasm:v0.0.1

$ kubectl apply -f wasmEdge/k8s

你可以通過以下命令檢查 WasmEdge 的 pod 執行情況。

$ kubectl get pod -n wasmedge

NAME READY STATUS RESTARTS AGE

wasm-deployment-fbc9564d8-td428 1/1 Running 0 1s

安裝並執行 Shifu 

使用以下命令安裝 shifu。

$ kubectl apply -f shifuConfig/shifu_install.yml

$ kubectl get pod -n shifu-crd-system

NAME READY STATUS RESTARTS AGE

shifu-crd-controller-manager-5bbdb4d786-s6h4m 2/2 Running 0 1s

安裝 deviceShifu    與   mockDeivce    進行連線。在此之前,請先將    shifuConfig/task3/task3.yaml    檔案中的    address 修改成你電腦的IP。

spec:

sku: "E93"

connection: Ethernet

address: "192.168.14.163:8099" #修改此處IP地址

通過以下命令,部署執行 deviceShifu 

$ kubectl apply -f shifuConfig/task3

$ kubectl get pod -n deviceshifu

NAME READY STATUS RESTARTS AGE

deviceshifu-demodevice-deployment-5589b55569-l5nb2 1/1 Running 0 4s

體驗 

你可以啟動一個 nginx    與   deviceShifu    進行通訊。

$ kubectl run nginx --image=nginx:1.21

$ kubectl get pod

NAME READY STATUS RESTARTS AGE

nginx 1/1 Running 0 3s

通過以下命令,你即可與裝置的數字孿生進行互動,從而清洗從IoT裝置上採集的資料。

$ kubectl exec -it nginx -- curl -v  http://deviceshifu-demodevice-service.deviceshifu.svc.cluster.local/get_info;echo

[

{

"code":375287,

"name":"大氣溫度",

"val":"24.56",

"unit":"℃",

"exception":"溫度過高"

},

{

"code":375287,

"name":"大氣溼度",

"val":"81.63",

"unit":"%RH",

"exception":"溼度過高"

}

]

同時我們可以使用以下命令檢視 IoT 裝置所產生的原始資料。

$ curl localhost:8099/getInfo

{

"statusCode":"200",

"message":"success",

"entity":[

{

"dateTime":"2022-09-09 09:46:45",

"eUnit":"℃",

"eValue":"23.87",

"eKey":"e1",

"eName":"大氣溫度",

"eNum":"101"

},

{

"dateTime":"2022-09-09 09:46:45",

"eUnit":"%RH",

"eValue":"80.62",

"eKey":"e2",

"eName":"大氣溼度",

"eNum":"102"

}

],

"deviceId":950920,

"deviceName":"950920",

"deviceRemark":"2022-09-09 09:46:45"

}

將兩個輸出放在一起比較,可以清晰看出我們成功地將資料採集並進行了清洗,從而得到我們想要的資料。

          

關於 WasmEdge

WasmEdge 是輕量級、安全、高效能、實時的軟體容器與執行環境。目前是 CNCF 沙箱專案。WasmEdge 被應用在 Serverless SaaS、雲原生,service mesh、邊緣雲/計算、智慧合約、邊緣裝置等領域。

 :sparkles: GitHub :https://github.com/WasmEdge/WasmEdge

 :computer: 官網 :https://wasmedge.org/

:man:‍:computer:‍ Discord  群: https://discord.gg/WCXUEBNV

文件 :https://wasmedge.org/book/en

點選閱讀原文,檢視 demo