Skip to content
forked from yomorun/yomo

πŸ¦– Serverless Streaming Framework for Low-latency Edge Computing applications, running atop QUIC protocol, as Metaverse infrastructure, engaging 5G technology.

License

Notifications You must be signed in to change notification settings

Kendr1ckFu/yomo

Β 
Β 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

YoMo Go Discord

YoMo is an open-source Streaming Serverless Framework for building Low-latency Edge Computing applications. Built atop QUIC Transport Protocol and Functional Reactive Programming interface. makes real-time data processing reliable, secure, and easy.

Official Website: πŸ¦–https://yomo.run

Gitee

🌢 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 Celluar/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

1. Install CLI

$ go install github.com/yomorun/cli/yomo@latest

Verify if the CLI was installed successfully

$ yomo -V

YoMo CLI version: v0.1.3

2. Create your stream function

$ yomo init yomo-app-demo

βŒ›  Initializing the Stream Function...
βœ…  Congratulations! You have initialized the stream function successfully.
ℹ️   You can enjoy the YoMo Stream Function 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

CLI will automatically create the 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 DataID() []byte {
	return []byte{0x33}
}

3. Build and run

  1. Run yomo dev from the terminal. you will see the following message:
$ yomo dev

ℹ️  YoMo Stream Function file: app.go
βŒ›  Create YoMo Stream Function instance...
βŒ›  YoMo Stream Function building...
βœ…  Success! YoMo Stream Function build.
ℹ️   YoMo Stream Function is running...
2021/11/16 10:02:43 [core:client]  has connected to yomo-app-demo (dev.yomo.run:9140)
[localhost] 1637028164050 > value: 6.575044 ⚑️=9ms
[StdOut]:  6.5750437
[localhost] 1637028164151 > value: 10.076103 ⚑️=5ms
[StdOut]:  10.076103
[localhost] 1637028164251 > value: 15.560066 ⚑️=8ms
[StdOut]:  15.560066
[localhost] 1637028164352 > value: 15.330824 ⚑️=2ms
[StdOut]:  15.330824
[localhost] 1637028164453 > value: 10.859857 ⚑️=7ms
[StdOut]:  10.859857

Congratulations! You have done your first YoMo Stream Function.

🧩 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!

License

Apache License 2.0

About

πŸ¦– Serverless Streaming Framework for Low-latency Edge Computing applications, running atop QUIC protocol, as Metaverse infrastructure, engaging 5G technology.

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • Go 99.4%
  • Other 0.6%