for example a supply chain management system).
This position paper calls out two approaches:
Container-based computing (state of the art)
Server-less computing (new kid on the block)
The currently predominantly used container-
based computing infrastructure is Kubernetes
(Kubernetes, 2018). Kubernetes is a container
management system mainly – but not exclusively –
used in conjunction with Docker (Docker, 2018).
Kubernetes can create clusters consisting of sets of
Docker containers (realized as Kubernetes pods).
Possibly cooperating Kubernetes pods implement
the application service functionality.
Cloud providers support in general two
approaches for tenants to use Kubernetes. One is for
a tenant to install the Kubernetes runtime software
on virtual machines into a cloud. The other is for a
tenant to use Kubernetes as a service. The former
requires a tenant to install Kubernetes itself on IaaS
resources, whereas the latter supports launching a
Kubernetes cluster as a PaaS service without having
to install the Kubernetes runtime software itself first.
Docker containers are launched from Docker
images via the Kubernetes concept of Kubernetes
services and Kubernetes pods and are constantly
running (except when being recovered in case of
failures or deleted when scaling down).
To efficiently utilize these constantly running
containers within the Kubernetes pods they in
general execute functionality for several tenants
concurrently and thereby implement a multi-tenant
software architecture.
This container-based approach requires tenant
management in order to know which tenants exist,
requires the ability to create log statements or log
files separated by tenant identifiers, requires an
engineering approach that ensures that the execution
threads in a container are isolated to avoid cross-
tenant contamination, requires the ability to move
tenants between clusters for capacity and load
adjustments, requires container scaling strategies
that take tenant-specific load into consideration –
just to name specific multi-tenant functionalities.
The new kid on the block is server-less
computing. Server-less computing is an approach
that abstracts away the computing and middleware
infrastructure (aka, IaaS and PaaS). Server-less
computing provides the ability to register/upload
code and dependencies without any reference to
infrastructure. Example systems are AWS Lambda
(AWS Lambda, 2018), Azure Functions (Azure
Functions, 2018), Google (Google Cloud Functions,
2018), or Oracle Functions (Oracle Fn, 2018).
In such an approach the application service logic
is implemented and registered as functions that
possibly trigger other functions or events, and they
themselves are triggered by invocations or events.
For example, a function can enqueue a message into
a queue and that message when dequeued can trigger
another function (implementing an event-based
pattern).
Implementing an application service is therefore
(on a high level) a set of functions and triggers
interacting with various cloud components that do
not require installation or management of
Kubernetes services or Docker containers. Installing
an application service means only to upload the
functions and triggers of functions.
The server-less approach does not create and run
containers (that are potentially underutilized or
idling) that a software engineer has to try to optimize
and a customer has to pay for if used or not. To the
contrary, the tenant only pays for function
executions and not for the infrastructure use as the
underlying cloud execution environment is
independent of the tenant’s execution needs.
Every tenant in a cloud can install the required
application services by uploading the functions and
triggers that make up the service. Every tenant
executes these in the context of their cloud account
and that is by default isolated from other cloud
accounts of other tenants (complete partitioning).
The implementation of a function or trigger does
not have to be aware of multi-tenancy: it can safely
assume that is being executed for exactly one tenant
only based on the separation of cloud accounts. The
server-less cloud environment ensures partitioning.
1.2 Context: 3
rd
Party Software
Provider
The discussion in this paper is from the viewpoint of
a 3
rd
party software provider (for example, a start-up,
an software vendor, a consulting company or a
customer building application services itself) that
builds software, like a supply chain management
software, for its customers. This software is going to
be deployed into the cloud of a cloud provider (and
thereby becoming an application service). Once
deployed, customers can licence the service from the
3
rd
party software provider and use it.
Note, a customer of a 3
rd
party software provider
might or might not be a cloud tenant. If the 3
rd
party
software provider implements a service in the cloud,
it is the tenant. If the 3
rd
party provider asks its
customer to install software into a cloud, then the
customers become tenants as they interact with the
Multi-Tenancy: A Concept Whose Time Has Come and (Almost) Gone
317