Serverless: Stateful Functions 3.2 fĂĽhrt ein neues JavaScript SDK ein

Der Cross-Platform-Stack zum Erstellen von Stateful-Serverless-Anwendungen präsentiert neue Konfigurationsoptionenen und ein offizielles JavaScript SDK.

vorlesen Druckansicht

(Bild: sdecoret/Shutterstock.com)

Lesezeit: 2 Min.

Die Apache-Flink-Community hat die Veröffentlichung von Stateful Functions 3.2 bekannt gegeben. Der Cross-Platform-Stack Stateful Functions (StateFun) soll das Erstellen verteilter Stateful-Anwendungen vereinfachen und dazu das Stream-Processing-Framework Apache Flink mit Function-as-a-Service-(FaaS)-Konzepten kombinieren. Er beinhaltet eine für Serverless-Architekturen konzipierte Runtime, die auf Apache Flink aufbaut, und lässt sich auf unterschiedlichen Architekturen wie Cloud-nativen Deployments oder FaaS-Plattformen wie AWS Lambda und KNative einsetzen.

Stateful Functions stammt ebenso wie Apache Flink aus dem Hause Ververica (ehemals data Artisans) und wurde im Oktober 2019 erstmals vorgestellt. Das neue Release bringt ein JavaScript SDK für Node.js mit und erlaubt erstmals das Erstellen maßgeschneiderter Metriken in Form benutzerdefinierter Zähler.

Videos by heise

Der Open-Source-Stack Stateful Functions soll ein einheitliches Modell bieten, um Stateful-Anwendungen zu erstellen – über verschiedene Programmiersprachen und Deployment-Umgebungen hinweg. Bislang waren SDKs für Python, Java und Go an Bord. Version 3.2 bringt zusätzlich ein JavaScript SDK für Node.js. Es lässt sich mittels npm installieren (npm install apache-flink-statefun@3.2.0) und enthält ebenso wie die übrigen SDKs eine vereinheitlichte, sprachübergreifende Weise, um Werte zu senden, zu empfangen und zu speichern.

Die Dokumentation des JavaScript SDK zeigt einen beispielhaften Anwendungsfall einer Stateful Function. Als Stateful Function gilt dabei eine beliebige Funktion mit einem context- und einem message-Parameter. Im Beispiel dient die Stateful Function dazu, einen Zähler für jeden User einer Anwendung zu verwalten und eine benutzerdefinierte Begrüßung auszugeben:

const {messageBuilder, StateFun, Context} = require("apache-flink-statefun");

let statefun = new StateFun();

statefun.bind({
    typename: "com.example.fns/greeter",
    fn(context, message) {
        const name = message.asString();
        let seen = context.storage.seen || 0;
        seen = seen + 1;
        context.storage.seen = seen;
        
        context.send(
            messageBuilder({typename: 'com.example.fns/inbox',
                            id: name,
                            value: `"Hello ${name} for the ${seen}th time!`})
        );
    },
    specs: [{
        name: "seen",
        type: StateFun.intType(),
    }
    ]
});

Zu den weiteren Änderungen in Stateful Functions 3.2 zählt die neue Konfigurationsoption statefun.remote.module-name, die den standardmäßigen Remote-Modul-Dateinamen module.yaml überschreiben kann. Um etwa den neuen Dateinamen prod.yaml zu vergeben, der unter /flink/usrlib/prod.yaml verortet ist, ist in der flink-conf.yaml Folgendes einzugeben:

statefun.remote.module-name: /flink/usrlib/prod.yaml

Zudem hat sich die Dependency auf Apache Flink 1.14.3 erhöht, ein kürzlich erschienenes Bugfix-Update für Version 1.14 des Stream-Processing-Frameworks. Um sich mit Stateful Functions vertraut zu machen, steht der Apache Flink Stateful Functions Playground mit Beispielen und Tutorials bereit.

Alle weiteren Informationen zu Stateful Functions 3.2 lassen sich der AnkĂĽndigung entnehmen.

(mai)