iX 9/2018
S. 122
Praxis
Serverless
Aufmacherbild

OpenFaaS als leichtgewichtige Basis für eigene Functions as a Service

Gekapselter Aufruf

OpenFaaS steckt einzelne Funktionen in Docker-Container und exponiert sie über ein Gateway. So lassen sich Functions as a Service bereitstellen.

Mit Functions as a Service (FaaS) hat sich in den letzten Jahren eine neue Kategorie von Diensten etabliert. Auch unter dem Schlagwort „Serverless Computing“ propagiert, ermöglichen sie es, einzelne Funktionen in der Infrastruktur eines Dienstanbieters auszuführen. Neben zahlreichen öffentlichen Angeboten existieren einige leistungsfähige freie Softwarepakete zum Bau einer privaten FaaS-Infrastruktur. Dieser Artikel stellt OpenFaaS vor, das für viele Betreiber eine attraktive Option ist, und beschreibt dessen Architektur und Fähigkeiten.

Im Umfeld rund um Serverless Computing bildet FaaS eine zentrale Komponente [1]. Serverless-Applikationen verwenden stark abstrahierte Dienste und kombinieren diese zu komplexen Anwendungen. Beispielsweise könnte ein Aufruf einer URL anstoßen, dass eine Datei mit einem digitalen Wasserzeichen versehen und anschließend einem Nutzer zum Download angeboten wird. Das Einbinden des Wasserzeichens könnte eine Python-Funktion „as a Service“ übernehmen. Komplexere Szenarien können auch KI-Dienste beinhalten. Im Fall einer privaten Cloud ändert sich hinsichtlich der Administration nichts: Dienstanbieter und -konsument gehören zur gleichen Organisationseinheit.

FaaS ist eine Unterkategorie der Plattformdienste (PaaS). Diese ermöglichen es ihren Kunden, eigene Webanwendungen in der Infrastruktur des Anbieters zu betreiben. Konkret handelt es sich bei einer PaaS um eine skalierbare Laufzeitumgebung, die den Webanwendungen der Kunden Infrastrukturdienste wie Speicher und Kommunikationsschnittstellen über APIs zur Verfügung stellt. Auf welche Sprachen die Nutzer für ihre Applikationen zurückgreifen können, hängt von der verwendeten Plattform ab – sei es ein öffentliches Angebot wie Googles AppEngine, Microsofts Azure Platform, AWS Elastic Beanstalk [2] oder eine freie Lösung wie AppScale [3].

Plattform für eine einzige Funktion

Auf den ersten Blick erscheint FaaS wie eine reduzierte PaaS. Kunden betreiben nicht komplette Webanwendungen, sondern nur einzelne Funktionen. Diese werden durch Anfragen oder externe Ereignisse ausgelöst und führen daraufhin Aktionen aus. Bei den auslösenden Ereignissen kann es sich um eine HTTP-Anfrage oder den Eingang einer E-Mail handeln. Denkbar sind auch ein neuer Datensatz in einer bestimmten Tabelle in einem Datenbankdienst wie AWS DynamoDB oder das Erstellen, Ändern oder Entfernen eines Objekts in einem Speicherdienst wie Amazons Simple Storage Service (AWS S3) oder Google Cloud Storage.

Es verwundert nicht, dass gerade diejenigen Dienstanbieter, die etablierte PaaS-Angebote in ihrem Portfolio haben, zu den treibenden Kräften im FaaS-Trend gehören. Amazon war 2014 ein Pionier mit seinem Dienst AWS Lambda. Iron.io verwendete den Begriff allerdings bereits 2011. Weitere Angebote sind Microsoft Azure Functions, Google Cloud Functions und IBM Cloud Functions. Neben den öffentlichen Diensten existiert eine Reihe freier FaaS-Lösungen. Sie ermöglichen ein kurzfristiges Ausweichen auf eine selbst betriebene Infrastruktur, wenn ein zuvor gewählter Dienstanbieter sein Angebot ändert oder den Markt verlässt. Mit anderen Worten: Die freien Systeme haben das Potenzial, das Vendor-Lock-in zu verhindern.

Bei OpenFaaS handelt es sich um eine freie Software unter MIT-Lizenz zur skalierbaren Ausführung von Funktionen in Docker-Containern. Der Dienst soll Funktionsaufrufe nicht nur automatisch bedarfsgerecht skalieren, sondern auch Metriken über die Anzahl der Funktionsaufrufe und über die Ressourcennutzung sammeln. OpenFaaS erlaubt, Programmiersprachen wie C#, Node.js oder Python zu verwenden. Zwei aus Administratorensicht positive Designkriterien sind seine leichtgewichtige Struktur und die relativ einfache Bedienung. Das enthaltene Web-UI ermöglicht das komfortable Testen und Verwalten der eigenen Funktionen.

Unter OpenFaaS liegen mehrere Schichten. Zuunterst findet sich Docker. Die Function Watchdogs orchestrieren Kubernetes oder Docker Swarm (Abb. 1). Quelle: OpenFaaS
Ein Trigger für einen Funktionsaufruf wird immer in einen HTTP-Aufruf übersetzt, den OpenFaaS an die passende Funktion weitergibt. Auch die Antwort erfolgt per HTTP (Abb. 2). Quelle: OpenFaaS

Den Kern von OpenFaaS bilden das API-Gateway und der Function Watchdog (siehe Abbildung 1). Das API-Gateway erhält die eingehenden Anfragen (siehe Abbildung 2). Das Web-UI dient unter anderem zum Visualisieren und Auflisten der implementierten Funktionen. Der Function Watchdog verteilt die Funktionen über die Hosts. Jeder Funktionsaufruf ist eine HTTP-Anfrage, die der Function Watchdog an die jeweilige Funktion weiterreicht. An dieser Stelle findet die Skalierung statt. Rückgabewerte liefern die Funktionen als HTTP-Antworten.

Importierte Funktionen verpackt der OpenFaaS-Client in Container und kapselt sie auf diese Weise voneinander. Diese Kapselung erhöht nicht nur die Sicherheit, sondern ist auch Grundlage für die Skalierung der Funktionsaufrufe.