Skip to content
Documentation
Glossary of terms

Glossary of terms

YoMo's goal is provide an open source Software Edge Infra to help developers building their own Geo-distributed System.

YoMo - The Geo-distributed Architecture

Building an application that can be deployed on multiple Data Regions is not that easy, nowadays, more and more developers want to put thier services close to users. Response in low-latency, enhanced data privacy and security, distributed AI inference and more, give users beest experience.

To archieve this goal, YoMo provides a framework which consists of 3 parts:

  • 🏌🏻‍♀️ Source - generate data, and send data to Zipper.
  • 🚦 Zipper - forward data between Sources and StreamFunctions, and provide ability to connect to other Zipper nodes.
  • 🏋🏼‍♀️ StreamFunction - process data and generate results.

Source

Source is responsible for generating data, and send data to Zipper. API Source provides details about how to implement a Source.

Zipper Service

Zipper is a service that allows Sources and StreamFunctions connect. It is responsible for forwarding data between Source and StreamFunction.

Zipper expose a QUIC endpoint, as the QUIC server, while Source and StreamFunction are all QUIC clients.

Zipper Cascading and Mesh Network

YoMo is designed as a decentralized system, Zippers can be connected to each other, and the data is forwarded to downstream Zippers when needed. Using this approach, we can build a large scale system, but developers do not need to care about the network topology; the data will be delivered to the nearest StreamFunction, and, when needed, the data can also be delivered to other Zipper nodes.

By this mechanism, developers can deploy their functions close to the data source for low-latency processing or privacy data handling, deploy other functions to regional data centers for general processing or GPU farm.

StreamFunction

StreamFunction is Stateful Serverless, responsible for processing data and generating results. API StreamFunction provides details about how to implement a StreamFunction.

Currently, YoMo support build StreamFunction as WebAssembly, this means developers can write their functions in any language that can be compiled to WebAssembly (opens in a new tab), such as Rust, C, C++, Go, AssemblyScript, etc.

A tutorial of how to build a StreamFunction in WebAssembly is available here.

Philosophy

Unix philosophy says a program should Do One Thing and Do It Well (opens in a new tab), we think the same for serverless. Developers can separate their functions into multiple StreamFunctions, and connect them together to build a complex system.