Function as a Service is a new cloud computing service type that makes it
possible for the user to run his/her code without having to build a physical or virtual
infrastructure as well as paying only for the time and resources actually used. This is
achieved by the provider only starting an isolated environment for the user when it is
needed and as such having minimal useless idle time and as such it is beneficial for both
parties to use this cloud model.
The other technology I’m working with is unikernels (sometimes referred to as
library OSes) which means bundling a piece of code (written by the user) with only the
necessary libraries of the given programming language and a very minimalistic kernel
so it can be used either with a hypervisor or on bare-metal.
My job was to combine a unikernel implementation and a Function as a Service
implementation best suited for working together. Choosing the Function as a Service
implementation proved to be the harder choice. In the beginning I had two ideas,
OpenWhisk and Fn, because neither of those two necessarily rely on Kubernetes, which
would have complicated my work a lot. I tried to use OpenWhisk by Apache because of
its maturity and better documentation, but after trying for weeks I decided to abandon it
in favour of Fn, because of its relative simplicity.
Selecting a particular unikernel was straightforward, since IncludeOS is the only
one that both uses IBM’s solo5 project (which was a requirement that I decided on) and
also support the C and C++ languages that I am familiar with. The other alternative was
MirageOS, but that can only build and run unikernels that have the service’s code
written in OCaml, which I did not have any experience before with. Solo5 is a new
hypervisor that is much more lightweight than most others.
In the end I managed to finish my task in the given time using a combination of
Fn and IncludeOS, I also made it possible to use the command line interface of Fn to
build as well as run IncludeOS unikernels. I also measured the startup times and CPU
performance of the solution. There is also a significant portion in this document about
the solo5 project itself and its modularity as well as the inner workings and speed of the
unchanged versions of Fn and OpenWhisk.