Function as s Service

nuclio: Ein Serverless Framework für Echtzeitdaten
Kommentare

Und noch ein Serverless Framework: nuclio betritt die Bühne. Der Fokus des Frameworks liegt auf der Echtzeitverarbeitung von Daten. Dafür kann es auf verschiedene Datenquellen zugreifen, auch mit ein und derselben Funktion. Außerdem sind die Datenquellen vom Funktionscode getrennt, damit der Code einfach wiederzuverwenden ist.

Das Serverless Framework entstand, weil seine Erfinder bei iguazio Echtzeit-Datenverarbeitung in ihre Plattform integrieren wollten. Keine der existierenden Serverless-Lösungen bot ihnen den gewünschten Funktionsumfang. Sie wollten Echtzeitverarbeitung mit einem möglichst geringen CPU- und I/O Overhead, aber trotzdem möglichst umfangreicher Parallelisierung. Außerdem sollten sich verschiedene Datenquellen nativ in das System einbinden lassen. Um den Code einfach wiederverwenden zu können, sollten sich die Datenquellen abstrahieren lassen und so vom Code getrennt sein. Außerdem war den Entwicklern wichtig, einfaches Debugging zur Verfügung zu haben, Regressionstests einfach durchführen zu können und mit verschiedenen CI/CD-Pipelines arbeiten zu können. Und zusätzlich sollte das Ganze auch auf schwächeren Geräten, Laptops und sowohl On-Premise als auch in der Cloud laufen. Dafür entwickelte das Team iguazio eine Function-as-a-Service-Ebene für ihre Datenplattform. Aus diesen Erfahrungen entstand die Open-Source-Serverless-Plattform nuclio.

So funktioniert nuclio

Die Kernkomponente von nuclio ist der so genannte Function Processor, der in Go geschrieben ist. Dieser Prozessor arbeitet mit abstrakten Interfaces und fungiert quasi als das Betriebssystem der Funktionen. Er ist für den Zugriff auf Events, Daten, Logs usw. zuständig. Dieselbe Funktion kann aus verschiedenen Eventquellen gefüttert werden. Zurzeit unterstützt das Framework HTTP, Kinesis, Kafka, RabbitMQ, MQTT, NATS, das hauseigene V3IO und Emulatoren.

Der Zugriff auf externe Daten (Objekte, Dateien, Datenbanken und Streams) erfolgt über ein Data Binding Interface, das alle Aspekte der Datenverbindungen, Security und des Caching übernimmt. Entwickler können Funktionen schreiben, die lokale Dateien verwenden, auf Remote-Daten über HTTP zugreifen oder einen schnellen Datenbank-Stream über TCP oder RDMA verwenden, ohne den Code zu ändern. Der Zugriff auf die Events und Daten des Prozessors erfolgt parallelisiert, mit intelligenter Memory/Thread-Wiederverwendung und nicht-blockierendem I/O. Das Schreiben eigenen Bare-Metal-Funktionen soll laut den Entwicklern langsamer sein als die Ausführung im nuclio-Prozessor. Ein einzelner nuclio-Prozessor kann mit einer einfachen Go-Funktion 400.000 Funktionsaufrufe pro Sekunde ausführen und mit einer Latenzzeit von 0,1 ms reagieren. Das sei hundertmal schneller als die meisten Serverless/FaaS-Lösungen. Der Zugriff zwischen dem Go-basierten Prozessor und anderen Laufzeitumgebungen erfolgt durch den Zugriff auf den gemeinsamen Speicher mit geringer Latenz, um Kontextwechsel oder häufige Prozessneustarts zu vermeiden. Nuclio unterstützt vier Anwendungsmodi: Sync, Async, Stream und Batch-Jobs und verteilt Events, Streams und Job-Tasks dynamisch zwischen Prozessoren.

nuclio konzentriert sich auf Portabilität und Wiederverwendbarkeit. Es läuft auch auf Geräten mit wenig CPU- oder Speicher-Power, in Docker, Kubernetes oder in einer IDE mit dem nuclio SDK.
Events und Datenquellen lassen sich auf Funktionen oder Versionen/Tags beim Deployment abbilden. Auch Protokolle und Statistiken lassen sich an mehrere Ziele oder an die IDE senden. Images werden in einem gemeinsam genutzten Repository gespeichert und lassen sich an mehrere Cluster oder Geräte weiterleiten. Diese Portabilität ermöglicht es Benutzern, Funktionen auf ihren Laptops mit dem SDK oder Docker zu testen und zu debuggen, sie auf Kubernetes-Clustern in verschiedenen Clouds laufen zu lassen oder sie auf IoT-Geräte zu schicken. Es vereinfacht auch Regressionstests und Diagnose: Funktionen arbeiten mit emulierten Ereignissen und schreiben die Ausgabe in ein strukturiertes Protokoll, das mit den erwarteten Ergebnissen verglichen wird.

Zurzeit unterstützt nuclio nur Go und Python, Java soll bald folgen. Der Code liegt auf GitHub und steht unter der Apache-Lizenz Version 2.0. Ein Getting Started Guide findet sich hier. Die Entwickler warnen, dass das Framework noch nicht stabil genug ist, um es in Produktion einzusetzen.

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -