YoMo是开源的Streaming Serverless Framework,支持Geo-distributed System的编写,作为 Metaverse Infrastructure 被多个产品使用,以构建全球分布式系统,满足用户的低时延接入和实时计算
Y3 是面向物联网IoT领域的数据编解码规则 yomo-codec 的 Golang 实现,Y3 的目标是在低功耗设备上能做到快速解析,并尽可能的降低 CPU 消耗。在设计上基于 Binary,采用了 TLV 结构的编码。
Y3-Codec SEPC规范
YoMo is an open-source Streaming Serverless Framework for building Low-latency Geo-Distributed System. Built atop QUIC Transport Protocol and Functional Reactive Programming interface, it makes real-time collaborative applications reliable, secure, and easy.
Read the docs: 🦖https://yomo.run
💚 We care about: The Demand For Real-Time Digital User Experiences
It’s no secret that today’s users want instant gratification, every productivity
application is more powerful when it's collaborative. But, currently, when we
talk about distribution
, it represents distribution in data center. API is
far away from their users from all over the world.
If an application can be deployed anywhere close to their end users, solve the problem, this is Geo-distributed System Architecture:
Features | |
---|---|
⚡️ | Low-latency Guaranteed by implementing atop QUIC QUIC |
🔐 | Security TLS v1.3 on every data packet by design |
📱 | 5G/WiFi-6 Reliable networking in Cellular/Wireless |
🌎 | Geo-Distributed Edge Mesh Edge-Mesh Native architecture makes your services close to end users |
📸 | Event-First Architecture leverages serverless service to be event driven and elastic |
🦖 | Streaming Serverless Write only a few lines of code to build applications and microservices |
🚀 | Y3 a faster than real-time codec |
📨 | Reactive stream processing based on Rx |
curl -fsSL https://get.yomo.run | sh
Verify if the CLI was installed successfully
yomo version
In this demo, we will create a go project observing a data stream and count bytes received.
yomo init try-yomo
The yomo CLI will generate codes in folder try-yomo
.
This Stream Function is written in Go, before compiling to WebAssembly, you need to install tinygo first.
$ yomo build app.go
ℹ️ YoMo Stream Function file: app.go
⌛ YoMo Stream Function building...
✅ Success! YoMo Stream Function build.
Now, we get the sfn.wasm
file, only 190K bytes.
$ exa -l
.rw-r--r-- 359 fanweixiao 14 Apr 01:02 app.go
.rwxr-xr-x 190k fanweixiao 14 Apr 01:08 sfn.wasm
Note: you can implement Stream Function in Rust, Zig, C or other languages can be compiled to WebAssembly, more examples can be found at example/7-wasm/sfn.
There is a public test Zipper service tap.yomo.dev:9140
which is provided by
our community, you can test your StreamFunction quickly by connecting to it.
$ yomo dev sfn.wasm
ℹ️ YoMo Stream Function file: sfn.wasm
⌛ Create YoMo Stream Function instance...
ℹ️ Starting YoMo Stream Function instance with executable file: sfn.wasm. Zipper: [tap.yomo.dev:9140].
ℹ️ YoMo Stream Function is running...
time=2023-04-14T00:05:25.073+08:00 level=INFO msg="use credential" component="Stream Function" client_id=7IwpRofCpPp-AcVV2qUFc client_name=yomo-app-demo credential_name=none
time=2023-04-14T00:05:26.297+08:00 level=INFO msg="connected to zipper" component="Stream Function" client_id=7IwpRofCpPp-AcVV2qUFc client_name=yomo-app-demo zipper_addr=tap.yomo.dev:9140
sfn received 57 bytes
sfn received 59 bytes
sfn received 59 bytes
sfn received 59 bytes
sfn received 58 bytes
sfn received 59 bytes
sfn received 58 bytes
sfn received 59 bytes
sfn received 58 bytes
^C
It works!
Note:
yomo dev sfn.wasm
is more convinient for development, it will connect totap.yomo.dev:9140
automatically. It's a shortcut ofyomo run -z tap.yomo.dev:9140 -n yomo-app-demo
.
There are many other examples that can help reduce the learning curve:
c
,
go
, rust
and even zig.Read more about YoMo at yomo.run/docs.
YoMo-Source
: docs.yomo.run/source
YoMo-Stream-Function
:
docs.yomo.run/stream-function
YoMo-Zipper
: docs.yomo.run/zipper
Faster than real-time codec
: Y3
YoMo ❤️ Vercel, our documentation website is
y3-codec
optimizes decoding performance. For more
information, visit its own repository
on GitHub.First off, thank you for considering making contributions. It's people like you that make YoMo better. There are many ways in which you can participate in the project, for example:
Any questions or good ideas, please feel free to come to our Discussion. Any feedback would be greatly appreciated!
Discussion #314 Tips: YoMo/QUIC Server Performance Tuning