  In Function as a Service (FaaS), a serverless computing variant, customers
deploy functions instead of complete virtual machines or Linux containers. It
is the cloud provider who maintains the runtime environment for these
functions. FaaS products are offered by all major cloud providers (e.g. Amazon
Lambda, Google Cloud Functions, Azure Functions); as well as standalone
open-source software (e.g. Apache OpenWhisk) with their commercial variants
(e.g. Adobe I/O Runtime or IBM Cloud Functions). We take the bottom-up
perspective of a single node in a FaaS cluster. We assume that all the
execution environments for a set of functions assigned to this node have been
already installed. Our goal is to schedule individual invocations of functions,
passed by a load balancer, to minimize performance metrics related to response
time. Deployed functions are usually executed repeatedly in response to
multiple invocations made by end-users. Thus, our scheduling decisions are
based on the information gathered locally: the recorded call frequencies and
execution times. We propose a number of heuristics, and we also adapt some
theoretically-grounded ones like SEPT or SERPT. Our simulations use a
recently-published Azure Functions Trace. We show that, compared to the
baseline FIFO or round-robin, our data-driven scheduling decisions
significantly improve the performance.
