YoMo
YoMo 是一个为边缘计算领域打造的低时延流式数据处理框架,基于 QUIC 协议通讯,以 Functional Reactive Programming 为编程范式,构建可靠、安全的低时延实时计算应用,挖掘 5G 潜力,释放实时计算价值。
快速入门
注意: YoMo 的运行环境要求 Go 版本为 1.15 或以上,运行
go version
获取当前环境的版本,如果未安装 Go 或者不符合 Go 版本要求时,请安装或者升级 Go 版本。
安装 Go 环境之后,国内用户可参考 <https://goproxy.cn/> 设置 GOPROXY
,以便下载 YoMo 项目依赖。
1. 安装 CLI
# 请使用 $GOPATH,因为 go 语言需要 plugin 和 main 的高度耦合
$ echo $GOPATH
如果未设置 $GOPATH
,请先看这一节:设置 $GOPATH 和 $GOBIN。
$ GO111MODULE=off go get github.com/yomorun/yomo
$ cd $GOPATH/src/github.com/yomorun/yomo
$ make install
2. 创建一个 Serverless 应用
$ mkdir -p $GOPATH/src/github.com/{YOUR_GITHUB_USERNAME} && cd $_
$ yomo init yomo-app-demo
2020/12/29 13:03:57 Initializing the Serverless app...
2020/12/29 13:04:00 ✅ Congratulations! You have initialized the serverless app successfully.
2020/12/29 13:04:00 🎉 You can enjoy the YoMo Serverless via the command: yomo dev
$ cd yomo-app-demo
YoMo CLI 会自动创建带有以下内容的 app.go
文件:
package main
import (
"context"
"fmt"
"time"
y3 "github.com/yomorun/y3-codec-golang"
"github.com/yomorun/yomo/pkg/rx"
)
// KeyNoise 用于通知YoMo只订阅Y3序列化后Tag为0x10的value
const KeyNoise = 0x10
// NoiseData 描述了Y3序列化后的Tag为0x10的Value所对应的反序列化数据结构
type NoiseData struct {
Noise float32 `y3:"0x11"`
Time int64 `y3:"0x12"`
From string `y3:"0x13"`
}
var printer = func(_ context.Context, i interface{}) (interface{}, error) {
value := i.(NoiseData)
rightNow := time.Now().UnixNano() / int64(time.Millisecond)
return fmt.Sprintf("[%s] %d > value: %f ⚡️=%dms", value.From, value.Time, value.Noise, rightNow-value.Time), nil
}
var callback = func(v []byte) (interface{}, error) {
var mold NoiseData
err := y3.ToObject(v, &mold)
if err != nil {
return nil, err
}
mold.Noise = mold.Noise / 10
return mold, nil
}
// Handler will handle data in Rx way
func Handler(rxstream rx.RxStream) rx.RxStream {
stream := rxstream.
Subscribe(KeyNoise).
OnObserve(callback).
Debounce(rxgo.WithDuration(50 * time.Millisecond)).
Map(printer).
StdOut()
return stream
}
3. 编译并运行
从 terminal 运行 yomo dev
,可以看到:
恭喜你!你创建了你的第一个 YoMo 应用。
Optional: 设置 $GOPATH 和 $GOBIN
针对当前 session:
export GOPATH=~/.go
export PATH=$GOPATH/bin:$PATH
要永久设置这些变量,需要编辑 .zshrc
或 .bashrc
:
zsh
用户:
echo "export GOPATH=~/.go" >> .zshrc
echo "path+=$GOPATH/bin" >> .zshrc
bash
用户:
echo 'export GOPATH=~/.go' >> .bashrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc
示意图
🎯 YoMo 专注于边缘计算
适合用来:
- 开发对延迟敏感的应用程序。
- 处理高网络延迟和数据包丢失的情况。
- 通过流式编程处理连续的高频数据。
- 使用流式 Serverless 架构构建复杂的系统。
贡献代码
首先,感谢你想要为 YoMo 做出贡献,是你这样的人使 YoMo 变得更好。你可以通过多种方式参与这个项目,例如:
- 提交 bug。请包括 YoMo 的版本、你的操作系统以及如何复现 bug 等信息。
- 提出一项新功能。
- 阅读我们的 代码贡献说明,了解我们需要什么类型的贡献。
- 我们还采用了 这些行为准则,希望项目参与者能够遵守。
反馈
如果你有疑问,可以随时到我们的 GitHub 讨论区 留言,任何反馈都很欢迎。