Glossary of terms
YoMo's goal is provide an open source Software Edge Infra to help developers building their own Geo-distributed System.
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 is responsible for generating data, and send data to Zipper. API Source provides details about how to implement a Source.
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 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.
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.