All Projects โ†’ yomorun โ†’ Yomo

yomorun / Yomo

Licence: apache-2.0
๐Ÿฆ– Streaming-Serverless Framework for Low-latency Edge Computing applications, running atop QUIC protocol, engaging 5G technology.

Programming Languages

go
31211 projects - #10 most used programming language

Projects that are alternatives of or similar to Yomo

Drago
A flexible configuration manager for Wireguard networks
Stars: โœญ 204 (-26.88%)
Mutual labels:  iot, networking, edge-computing
Neardb
Simple document db made for infinitely scalable globally distributed reads.
Stars: โœญ 92 (-67.03%)
Mutual labels:  serverless, iot, edge-computing
Wasm3
๐Ÿš€ The fastest WebAssembly interpreter, and the most universal runtime
Stars: โœญ 4,375 (+1468.1%)
Mutual labels:  serverless, iot, edge-computing
Zenoh
zenoh unifies data in motion, data in-use, data at rest and computations. It carefully blends traditional pub/sub with geo-distributed storages, queries and computations, while retaining a level of time and space efficiency that is well beyond any of the mainstream stacks.
Stars: โœญ 182 (-34.77%)
Mutual labels:  iot, networking, edge-computing
ripple
Simple shared surface streaming application
Stars: โœญ 17 (-93.91%)
Mutual labels:  realtime, stream-processing, low-latency
Samsara
Samsara is a real-time analytics platform
Stars: โœญ 132 (-52.69%)
Mutual labels:  stream-processing, iot, realtime
Emitter
High performance, distributed and low latency publish-subscribe platform.
Stars: โœญ 3,130 (+1021.86%)
Mutual labels:  networking, realtime, low-latency
Ops
ops - build and run nanos unikernels
Stars: โœญ 552 (+97.85%)
Mutual labels:  serverless, edge-computing
Fly
Deploy app servers close to your users. Package your app as a Docker image, and launch it in 17 cities with one simple CLI.
Stars: โœญ 862 (+208.96%)
Mutual labels:  serverless, edge-computing
Kong
๐Ÿฆ The Cloud-Native API Gateway
Stars: โœญ 30,838 (+10953.05%)
Mutual labels:  serverless, iot
Space Cloud
Open source Firebase + Heroku to develop, scale and secure serverless apps on Kubernetes
Stars: โœญ 3,323 (+1091.04%)
Mutual labels:  serverless, realtime
Githut
Github Language Statistics
Stars: โœญ 503 (+80.29%)
Mutual labels:  serverless, functional-reactive-programming
Apisix
The Cloud-Native API Gateway
Stars: โœญ 7,920 (+2738.71%)
Mutual labels:  serverless, iot
Vandium Node
AWS Lambda framework for building functions using Node.js for API Gateway, IoT applications, and other AWS events.
Stars: โœญ 377 (+35.13%)
Mutual labels:  serverless, iot
Serving
Kubernetes-based, scale-to-zero, request-driven compute
Stars: โœญ 4,238 (+1419%)
Mutual labels:  serverless, networking
Flogo
Project Flogo is an open source ecosystem of opinionated event-driven capabilities to simplify building efficient & modern serverless functions, microservices & edge apps.
Stars: โœญ 1,891 (+577.78%)
Mutual labels:  serverless, iot
Hydro Serving
MLOps Platform
Stars: โœญ 213 (-23.66%)
Mutual labels:  serverless, realtime
Skypad
Skypad
Stars: โœญ 141 (-49.46%)
Mutual labels:  serverless, realtime
traffic
Massively real-time traffic streaming application
Stars: โœญ 25 (-91.04%)
Mutual labels:  realtime, stream-processing
Flex4apps
Flex4Apps main project repository
Stars: โœญ 255 (-8.6%)
Mutual labels:  serverless, iot

YoMo Go

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

1. Install CLI

Note: YoMo requires Go 1.15 and above, run go version to get the version of Go in your environment, please follow this link to install or upgrade if it doesn't fit the requirement.

# Ensure use $GOPATH, golang requires main and plugin highly coupled
โ—‹ echo $GOPATH

if $GOPATH is not set, check Set $GOPATH and $GOBIN first.

$ GO111MODULE=off go get github.com/yomorun/yomo

$ cd $GOPATH/src/github.com/yomorun/yomo

$ make install

YoMo Tutorial 1

2. Create your serverless app

$ 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 Tutorial 2

CLI will automatically create the app.go:

package main

import (
	"context"
	"fmt"
	"time"

	"github.com/reactivex/rxgo/v2"
	y3 "github.com/yomorun/y3-codec-golang"
	"github.com/yomorun/yomo/pkg/rx"
)

// NoiseDataKey represents the Tag of a Y3 encoded data packet
const NoiseDataKey = 0x10

// NoiseData represents the structure of data
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)
	fmt.Println(fmt.Sprintf("[%s] %d > value: %f โšก๏ธ=%dms", value.From, value.Time, value.Noise, rightNow-value.Time))
	return value.Noise, 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(NoiseDataKey).
		OnObserve(callback).
		Debounce(rxgo.WithDuration(50 * time.Millisecond)).
		Map(printer).
		StdOut()

	return stream
}

3. Build and run

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

YoMo Tutorial 3

Congratulations! You have done your first YoMo application.

Optional: Set $GOPATH and $GOBIN

for current session:

export GOPATH=~/.go
export PATH=$GOPATH/bin:$PATH

for shell:

for zsh users

echo "export GOPATH=~/.go" >> .zshrc
echo "path+=$GOPATH/bin" >> .zshrc

for bash users

echo 'export GOPATH=~/.go' >> .bashrc
echo 'export PATH="$GOPATH/bin:$PATH"' >> ~/.bashrc

๐Ÿงฉ Interop

event-first processing

Multiple data sources combined calculation

Sources

Flows

Sinks

๐Ÿ—บ 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

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].