SLEdge is a lightweight serverless solution suitable for edge computing. It builds on WebAssembly sandboxing provided by the aWsm compiler.
- Docker - Installation Instructions
Note: These steps require Docker. Make sure you've got it installed!
We provide a Docker build environment configured with the dependencies and toolchain needed to build the SLEdge runtime and serverless functions.
To setup this environment, run:
./devenv.sh setupTo enter the docker environment, run:
./devenv.sh runThe first time you enter this environment, run the following to copy the sledgert binary to /sledge/runtime/bin.
cd /sledge/runtime
make clean allThere are a set of benchmarking applications in the /sledge/runtime/tests directory. Run the following to compile all benchmarks runtime tests using the aWsm compiler and then copy all resulting <application>_wasm.so files to /sledge/runtime/bin.
cd /sledge/runtime/tests/
make clean allYou now have everything that you need to execute your first serverless function on SLEdge
To exit the container:
exitTo stop the Docker container:
./devenv.sh stopAn SLEdge serverless function consists of a shared library (*.so) and a JSON configuration file that determines how the runtime should execute the serverless function. As an example, here is the configuration file for our sample fibonacci function:
{
"active": "yes",
"name": "fibonacci",
"path": "fibonacci_wasm.so",
"port": 10000,
"argsize": 1,
"http-req-headers": [],
"http-req-content-type": "text/plain",
"http-req-size": 1024,
"http-resp-headers": [],
"http-resp-size": 1024,
"http-resp-content-type": "text/plain"
}The port and name fields are used to determine the path where our serverless function will be served served.
In our case, we are running the SLEdge runtime on localhost, so our function is available at http://localhost:10000/fibonacci
Our fibonacci function will parse a single argument from the HTTP POST body that we send. The expected Content-Type is "text/plain" and the buffer is sized to 1024 bytes for both the request and response. This is sufficient for our simple Fibonacci function, but this must be changed and sized for other functions, such as image processing.
Now that we understand roughly how the SLEdge runtime interacts with serverless function, let's run Fibonacci!
From the root project directory of the host environment (not the Docker container!), navigate to the binary directory
cd runtime/bin/Now run the sledgert binary, passing the JSON file of the serverless function we want to serve. Because serverless functions are loaded by SLEdge as shared libraries, we want to add the runtime/tests/ directory to LD_LIBRARY_PATH.
LD_LIBRARY_PATH="$(pwd):$LD_LIBRARY_PATH" ./sledgert ../tests/test_fibonacci.jsonWhile you don't see any output to the console, the runtime is running in the foreground.
Let's now invoke our serverless function to compute the 10th fibonacci number. I'll use HTTPie to send a POST request with a body containing the parameter I want to pass to my serverless function. Feel free to use cURL or whatever network client you prefer!
Open a new terminal session and execute the following
echo "10" | http :10000You should receive the following in response. The serverless function says that the 10th fibonacci number is 55, which seems to be correct!
HTTP/1.1 200 OK
Content-length: 3
Content-type: text/plain
55When done, terminal the SLEdge runtime with Ctrl+c
Various synthetic and real-world tests can be found in runtime/experiments. Generally, each experiment can be run be executing the run.sh script.
If you are finished working with the SLEdge runtime and wish to remove it, run the following command to delete our Docker build and runtime images.
./devenv.sh rmaAnd then simply delete this repository.
If you encountered bugs or have feedback, please let us know in our issue tracker.