Faasm is a high-performance stateful serverless runtime.
Faasm provides multi-tenant isolation, but also lets functions share regions of memory. These shared memory regions give low-latency concurrent access to data, and are synchronised globally to support large-scale parallelism.
Faasm combines software fault isolation from WebAssembly with standard Linux tools to isolate functions in Faaslets, which provide security and resource isolation at low cost. Faaslets run side-by-side as threads of a single runtime process, with low overheads and fast boot times. The underlying WebAssembly execution and code generation is handled by WAVM.
Faasm defines a custom host interface which lets functions perform serverless-specific tasks (e.g. invoking other functions and managing state), as well as interacting with the underlying host (e.g. using the filesystem and networking). The Faasm host interface achieves the same goal as WASI, but in a serverless-specific context.
You can start a Faasm cluster locally using the docker-compose.yml
file in the root of the project:
docker-compose up --scale worker=2
Then run the Faasm CLI, from which you can build, deploy and invoke functions:
# Start the CLI
./bin/cli.sh
# Upload the demo "hello" function
inv upload demo hello
# Invoke the function
inv invoke demo hello
Note that the first time you run the local set-up it will generate some machine code specific
to your host. This is stored in the machine-code
directory in the root of the project and reused
on subsequent runs.
More detail on some key features and implementations can be found below:
- Usage and set-up - using the CLI and other features.
- C/C++ functions - writing and deploying Faasm functions in C/C++.
- Python functions - isolating and executing functions in Python.
- Faasm host interface - the serverless-specific interface between functions and the underlying host.
- Kubernetes and Knative integration- deploying Faasm as part of a full serverless platform.
- Tensorflow Lite - performing inference in Faasm functions with TF Lite.
- API - invoking and managing functions and state through Faasm's HTTP API.
- MPI and OpenMP - executing existing MPI and OpenMP applications in Faasm.
- Local development - developing and modifying Faasm.
- Faasm.js - executing Faasm functions in the browser and on the server.
- Proto-Faaslets - rapid snapshot-and-restore initialisation to cut down cold starts.