本期推荐的是一个基于GO开发的低延时流式边缘计算框架——yomo。
YoMo 是一个为边缘计算领域打造的低时延流式数据处理框架,基于 QUIC 协议通讯,以 Functional Reactive Programming 为编程范式,构建可靠、安全的低时延实时计算应用,挖掘 5G 潜力,释放实时计算价值。
特性
- 基于QUIC协议进行数据传输
- 每个数据包都基于TLSv1.3安全策略
- 在5G/WiFi-6网络下保证数据传输的稳定性和吞吐量
- 使用 Edge-Mesh Native 架构更贴近终端用户
- 利用无服务器服务来实现事件驱动和弹性
- 只需几行代码即可构建应用程序和微服务
- 自主研发的 y3-codec 优化解码性能比实时编解码器更快
- 基于Rx的反应式流计算,提高处理和分析数据的速度和准确性
YoMo适合用来
- 物联网/工业物联网/AIoT
- 开发对延迟敏感的应用程序
- 处理高网络延迟和数据包丢失的情况
- 通过流式编程处理连续的高频数据
- 使用流式 Serverless 架构构建复杂的系统
快速入门
1 先决条件
确保已安装 Go 编译运行环境。
2 安装 CLI
Binary(推荐):
$ curl -fsSL "https://bina.egoist.sh/yomorun/cli?name=yomo" | sh
或者从源代码编译:
$ go install github.com/yomorun/cli/yomo@latest
验证 CLI 是否成功安装:
$ yomo -V
YoMo CLI version: v0.1.8
3 创建一个 Serverless 应用
$ yomo init yomo-app-demo
Initializing the Serverless app...
Congratulations! You have initialized the serverless function successfully.
You can enjoy the YoMo Serverless via the command:
DEV: yomo dev -n Noise yomo-app-demo/app.go
PROD: First run source application, eg: go run example/source/main.go
Second: yomo run -n yomo-app-demo yomo-app-demo/app.go
$ cd yomo-app-demo
YoMo CLI 会自动创建带有以下内容的 app.go 文件:
package main
import (
"context"
"encoding/json"
"fmt"
"time"
"github.com/yomorun/yomo/rx"
)
// NoiseData represents the structure of data
type NoiseData struct {
Noise float32 `json:"noise"` // Noise value
Time int64 `json:"time"` // Timestamp (ms)
From string `json:"from"` // Source IP
}
var echo = func(_ context.Context, i interface{}) (interface{}, error) {
value := i.(*NoiseData)
value.Noise = value.Noise / 10
rightNow := time.Now().UnixNano() / int64(time.Millisecond)
fmt.Println(fmt.Sprintf("[%s] %d > value: %f =%dms", value.From, value.Time, value.Noise, rightNow-value.Time))
return value.Noise, nil
}
// Handler will handle data in Rx way
func Handler(rxstream rx.Stream) rx.Stream {
stream := rxstream.
Unmarshal(json.Unmarshal, func() interface{} { return &NoiseData{} }).
Debounce(50).
Map(echo).
StdOut()
return stream
}
func DataTags() []byte {
return []byte{0x33}
}
4 编译并运行
从 terminal 运行 yomo dev,可以看到:
$ yomo dev
YoMo serverless function file: app.go
Create YoMo serverless instance...
YoMo serverless function building...
Success! YoMo serverless function build.
YoMo serverless function is running...
Run: /Users/xiaojianhong/Downloads/yomo-app-demo/sl.yomo
2021/06/07 12:00:06 Connecting to zipper dev.yomo.run:9000 ...
2021/06/07 12:00:07 Connected to zipper dev.yomo.run:9000
[10.10.79.50] 1623038407236 > value: 1.919251 =-25ms
[StdOut]: 1.9192511
[10.10.79.50] 1623038407336 > value: 11.370256 =-25ms
[StdOut]: 11.370256
[10.10.79.50] 1623038407436 > value: 8.672209 =-25ms
[StdOut]: 8.672209
[10.10.79.50] 1623038407536 > value: 4.826996 =-25ms
[StdOut]: 4.826996
[10.10.79.50] 1623038407636 > value: 16.201773 =-25ms
[StdOut]: 16.201773
[10.10.79.50] 1623038407737 > value: 13.875483 =-26ms
[StdOut]: 13.875483
示意图
—END—
开源协议:Apache2.0