• Stars
    star
    1,645
  • Rank 28,407 (Top 0.6 %)
  • Language
    Go
  • License
    Apache License 2.0
  • Created over 4 years ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

๐Ÿฆ– Stateful Serverless Framework for Geo-distributed Edge AI Infra. with function calling support, write once, run on any model.

YoMo Go codecov Discord

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:

yomo geo-distributed system

๐ŸŒถ Features

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

๐Ÿš€ Getting Started

Prerequisite

Install Go

Step 1. Install CLI

curl -fsSL https://get.yomo.run | sh

Verify if the CLI was installed successfully

yomo version

Step 2. Init your first stream function, in WebAssembly way

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.

Step 3. Build

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.

Step 4. Run

There is an 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 to tap.yomo.dev:9140 automatically. It's a shortcut of yomo run -z tap.yomo.dev:9140 -n yomo-app-demo.

There are many other examples that can help reduce the learning curve:

  • 0-basic: Write Stream Function in pure golang.
  • 1-pipeline: Unix Pipeline over Cloud.
  • 2-iopipe: Unix Pipeline over Cloud.
  • 3-multi-sfn: Write programs that do one thing and do it well. Write programs to work together. -- Doug Mcllroy
  • 4-cascading-zipper: Flexible adjustment of sfn deployment and run locations.
  • 5-backflow
  • 6-mesh: Demonstrate how to put your serverless closer to end-user.
  • 7-wasm: Implement Stream Function by WebAssembly in c, go, rust and even zig.
  • 8-deno: Demonstrate how to write Stream Function with TypeScript and deno.
  • 9-cli: Implement Stream Function in Rx way.

Read more about YoMo at yomo.run/docs.

๐Ÿงฉ Interop

Metaverse Workplace (Virtual Office) with YoMo

Sources

Stream Functions

Output Connectors

๐Ÿ—บ Location Insensitive Deployment

yomo-flow-arch

๐Ÿ“š Documentation

YoMo โค๏ธ Vercel, our documentation website is

Vercel Logo

๐ŸŽฏ Focuses on computings out of data center

  • IoT/IIoT/AIoT
  • Latency-sensitive applications.
  • Networking situation with packet loss or high latency.
  • Handling continuous high frequency generated data with stream-processing.
  • Building Complex systems with Streaming-Serverless architecture.

๐ŸŒŸ Why YoMo

  • Based on QUIC (Quick UDP Internet Connection) protocol for data transmission, which uses the User Datagram Protocol (UDP) as its basis instead of the Transmission Control Protocol (TCP); significantly improves the stability and throughput of data transmission. Especially for cellular networks like 5G.
  • A self-developed y3-codec optimizes decoding performance. For more information, visit its own repository on GitHub.
  • Based on stream computing, which improves speed and accuracy when dealing with data handling and analysis; simplifies the complexity of stream-oriented programming.
  • Secure-by-default from transport protocol.

๐Ÿฆธ Contributing

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:

  • File a bug report. Be sure to include information like what version of YoMo you are using, what your operating system is, and steps to recreate the bug.
  • Suggest a new feature.
  • Read our contributing guidelines to learn about what types of contributions we are looking for.
  • We have also adopted a code of conduct that we expect project participants to adhere to.

๐Ÿคน๐Ÿปโ€โ™€๏ธ Feedback

Any questions or good ideas, please feel free to come to our Discussion. Any feedback would be greatly appreciated!

๐Ÿ„โ€โ™‚๏ธ Best Practice in Production

Discussion #314 Tips: YoMo/QUIC Server Performance Tuning

License

Apache License 2.0

More Repositories

1

hashids-java

Hashids algorithm v1.0.0 implementation in Java
Java
1,022
star
2

react-cursor-chat

<CursorChat /> React Component helps bring Figma's Cursor Chat to your web applications in less than 3 minutes, making real-time collaboration anywhere.
TypeScript
132
star
3

yomo-wasmedge-tensorflow

This application demonstrates how to launch high-performance "serverless" functions from the YoMo framework to process streaming data. The functions are embedded in a WebAssembly VM, WasmEdge, for safety, security, portability, and manageability.
Go
63
star
4

metaverse-workplace-vercel-frontend

Open-source Metaverse Workplace (Virtual Office) with YoMo, Macrometa, Agora.io, Next.js and other Geo-distributed System Tech Stacks.
TypeScript
50
star
5

y3-codec-golang

Golang implementation of Y3 Codec, a fast than real-time TLV based binary codec with low CPU usage
Go
46
star
6

yomo-vhq-backend

An Open-source Virtual HQ Presence Server by Geo-Distributed Cloud Architecture.
Go
17
star
7

y3-codec

๐Ÿงฎ a faster than real-time TLV based binary codec with low CPU usage, reveal advantages of next generation networking like 5G
17
star
8

webtransport-polyfill

WebTransport implementation to fallback to WebSocket if browser does not support it
TypeScript
14
star
9

presencejs

Edge Infra for realtime web applications, geo-distributed architecture.
Go
14
star
10

yomo-flow-ssvm-example

SSVM ๐Ÿ™Œ YoMo: This example demonstrates writing yomo-flow interop with WebAssembly by SSVM
Go
10
star
11

yomo-source-mqtt-broker-starter

Receive MQTT messages and convert them to the YoMo protocol for transmission to YoMo Streaming Function.
Go
10
star
12

metaverse-workplace-cloudflare-frontend

๐Ÿก Metaverse Workplace with fully Geo-distributed edge architecture
TypeScript
10
star
13

cli

Command-line tools for YoMo.
Go
6
star
14

presence.js.org

MDX
5
star
15

debs-2014

Source code of https://blog.yomo.run/posts/debs2014-grand-challenge-by-yomo
Go
4
star
16

yomo-sink-faunadb-example

FaunaDB ๐Ÿ™Œ YoMo: This example demonstrates how to integrate FaunaDB as yomo-sink
Go
4
star
17

yomo-source-mqtt-starter

MQTT-API-Compatible YoMo server, receive MQTT data and transfer data over QUIC, implement real-time IoT analytics by YoMo
Go
4
star
18

yomo-sink-redpanda-example

Connect to Redpanda with Yomo
Go
4
star
19

yomo-presence-backend

The open-source presence server (WebSocket & WebTransport) for @yomo/presencejs โšก๏ธ made realtime web applications edge-aware by YoMo
Go
4
star
20

yomo-sink-tdengine-example

TDEngine ๐Ÿ™Œ YoMo
Go
3
star
21

y3

Golang implementation of Y3 Codec, a fast than real-time TLV based binary codec with low CPU usage
Go
3
star
22

yomo-docs

YoMo Documentation Website
JavaScript
3
star
23

example-noise

Noise Sensor Case
2
star
24

yomo-cluing-shake

Go
2
star
25

yomo-sink-macrometa-example

Connect to Macrometa.com with YoMo
Go
2
star
26

yomo-grafana-datasource

YoMo + Grafana
TypeScript
2
star
27

webtransport

WebTransport server in Golang
2
star
28

GreptimeDB-YoMo

High-performance data ingestion for GreptimeDB using QUIC by YoMo
Go
2
star
29

y3-playground

JavaScript
1
star
30

yomo-sink-tidb-example

Connect to TiDB with Yomo
Go
1
star
31

yomo-source-noise-example

Serverless of YoMo-Source in Noise example
Go
1
star
32

yomo-sink-socketio-server-example

The example of socket.io for yomo-sink which can be used to show the real-time data on a web page.
Go
1
star