This repository contains a research prototype of the EDGELESS platform, which is under active development within the project EDGELESS.
There currently are no guarantees on Stability and API-Stability!
EDGELESS is a framework that enables serverless edge computing, which is intended especially for edge nodes with limited capabilities.
An EDGELESS cluster consists of one or more orchestration domains (three in the example figure above) managed by an ε-CON (controller).
Users interact with the ε-CON to request the creation of workflows. A workflow specifies how a number of functions and resources should interact with one another to compose the service requested by the user by sending to one another asynchronous events that are akin to function invocations. Functions live entirely within the realm of the EDGELESS run-time, while resources may interact with the external environment, e.g., handling events in a resource may have a side effect, such as updating an entry on an external in-memory database or reading the value of a physical sensor.
Currently supported resources:
Functions are stateful: a given function instance is assigned to exactly one workflow, thus the function developer may assume that data will generally remain available across multiple invocations on the same function instance. However such state is:
Furthermore, unlike many other serverless computing platforms, workflows may consist of a wide variety of function compositions, as illustrated below.
An orchestration domain contains:
The byte code of the WASM function instance or the name of the Docker container to be started is provided by the user when requesting the creation of a workflow, which also includes annotations to specify the Quality of Service requirements (e.g., maximum completion time) and workload characteristics (e.g, average invocation rate), as well as affinity of functions to specific hardware properties (e.g., GPU required) or preference for other system parameters (e.g., location, owner, price). Depending on the annotations, the set of active workflows, and the current system conditions, the ε-CON may reject the workflow creation request.
Some components/features are illustrated separately:
Currently there are several known limitations, including the following ones:
The full list of issues is tracked on GitHub.
Stay tuned (star & watch the GitHub project) to remain up to date on future developments.
Directory | Description |
---|---|
deployment | Docker and Docker Compose scripts |
documentation | Repository documentation. |
edgeless_api | gRPC API definitions, both services and messages. This directory must be imported by other projects wishing to interact with EDGELESS components through its interfaces. The following interfaces are currently implemented: s01, s04, s06, s07. |
edgeless_api_core | Work-in-progress development on minimal functions for embedded devices using CoAP. |
edgeless_bal | Reference implementation of the ε-BAL, currently a mere skeleton. The concrete implementation will be done in the next project phase when inter-domain workflows will be supported. |
edgeless_benchmark | Suite to benchmark an EDGELESS system in controlled and repeatable conditions using artificial workloads. |
edgeless_cli | EDGELESS command-line interface. This is used currently to locally build function instances and to interact with the ε-CON via the s04 interface to create/terminate/list workflows. |
edgeless_con | Reference implementation of the ε-CON, currently only supporting a single orchestration domain and ignoring workflow annotations. |
edgeless_container_function | Skeleton of a function to be deployed in a container. |
edgeless_dataplane | EDGELESS intra-domain dataplane, which is realised through the full-mesh interconnection of gRPC services implementing the s01 API. |
edgeless_embedded | Work-in-progress implementation of special features for embedded devices. |
edgeless_embedded_emu | Embedded device emulator. |
edgeless_embedded_esp32 | Support of some ESP32 microcontrollers. |
edgeless_function | WebAssembly Rust bindings and function programming model. |
edgeless_http | Utility structures and methods for HTTP bindings. |
edgeless_inabox | Implements a minimal, yet complete, EDGELESS system consisting of an ε-CON, an ε-ORC, an ε-BAL and an edgeless node. This is intended to be used for development/validation purposes. |
edgeless_node | EDGELESS node with WebAssembly and Container run-times. |
edgeless_orc | Reference implementation of the ε-ORC, supporting deployment annotations and implementing two simple function instance allocation strategies: random and round-robin. Upscaling is not supported: all the functions are deployed as single instances. |
edgeless_systemtests | Tests of EDGELESS components deployed in a system fashion, e.g., interacting through gRPC interfaces. |
edgeless_telemetry | Work-in-progress component that provides telemetry data regarding the EDGELESS operation, also supporting Prometheus agents. |
examples | Contains several examples showcasing the key features of the EDGELESS reference implementation. |
functions | Library of functions shipping with the EDGELESS platform and used in the examples. |
model | Work-in-progress OCaml model of the EDGELESS system. |
scripts | Collection of scripts |
It is recommended that you enable at least info-level log directives with:
export RUST_LOG=info
To get the basic system running, first create the default configuration files (they have fixed hardcoded values):
target/debug/edgeless_inabox -t
target/debug/edgeless_cli -t cli.toml
which will create:
balancer.toml
controller.toml
node.toml
orchestrator.toml
cli.toml
Then you can run the EDGELESS-in-a-box, which is a convenience binary that runs every necessary component as one, using the generated configuration files:
target/debug/edgeless_inabox
Congratulations 🎉 now that you have a complete EDGELESS system you may want to check the the examples/
directory, which contains several workflows/functions that are representative of the current EDGELESS features.
You can find here the full list with a short description of each.
Please refer to the following specific docs:
We love the open source community of developers ❤️ and we welcome contributions to EDGELESS.
The contributing guide contains some rules you should adhere to when contributing to this repository.
The Repository is licensed under the MIT License. Please refer to LICENSE and CONTRIBUTORS.txt.
EDGELESS received funding from the European Health and Digital Executive Agency (HADEA) program under Grant Agreement No 101092950.