Was sind Langlebig Funktioniert?

0
40

Oh Nein! Nicht mehr jargon! Was genau bedeutet der Begriff Dauerhafte Funktionen bedeuten? Dauerhafte Funktionen zu tun haben, mit Serverlose Architekturen. Es ist eine Erweiterung der Azure-Funktionen, die es ermöglichen, Sie zu schreiben, stateful Ausführungen in einer serverlosen Umgebung.

Denken Sie an es auf diese Weise. Es gibt ein paar große Vorteile, dass die Menschen neigen dazu, zu konzentrieren auf, wenn Sie reden über die Serverlose Funktionen:

  • Sie sind Billig
  • Sie skalieren mit Ihren Anforderungen (nicht unbedingt, aber das ist der Standard für viele Dienstleistungen)
  • Sie ermöglichen es, zu schreiben, event-driven-code

Lassen Sie uns darüber reden, dass die Letzte minute. Wenn Sie schreiben können, die event-driven-code, können Sie brechen Ihre betrieblichen Anforderungen in kleinere Funktionen, die im wesentlichen sagen: wenn diese Anfrage kommt, diesen code ausführen. Sie nicht Durcheinander herum mit Infrastruktur, ist gesorgt für Sie. Es ist ein ziemlich überzeugendes Konzept.

In diesem Paradigma brechen Sie Ihren workflow nach unten in kleinere, wiederverwendbare Teile, die in der turn, können Sie machen Sie leichter zu pflegen. Dies erlaubt Ihnen auch, um den Fokus auf Ihre business-Logik, weil Sie gerade Kochen, Dinge auf die einfachste code, den Sie brauchen auf dem server ausführen.

So, hier ist, wo Dauerhafte Funktionen kommen. Sie können sich wahrscheinlich vorstellen, dass Sie gehen zu müssen, um mehr als eine Funktion ausführen, als Ihre Anwendung die Größe wächst und immer mehr Staaten. Und in vielen Fällen werden Sie brauchen, um zu koordinieren und die Reihenfolge festlegen, in der Sie ausgeführt werden sollte, für Sie wirksam zu sein. Es ist erwähnenswert an dieser Stelle, dass Dauerhafte Funktionen sind Muster, die nur in Azure. Andere Dienste haben Variationen dieses Themas. Zum Beispiel, die AWS-version heißt “Step” – Funktionen. So, während wir reden hier über etwas bestimmtes zu Azure, und es gilt allgemein als gut.

Langlebig in Aktion, einige Beispiele

Nehmen wir an, Sie verkaufen Flugtickets. Sie können sich vorstellen, dass jemand, der ein ticket kauft, müssen wir:

  1. prüfen Sie die Verfügbarkeit der Tickets
  2. stellen Sie eine Anfrage, um die Sitzplatz-Karte
  3. Holen Sie sich Ihre Laufleistung Punkte, wenn Sie ein treue Mitglied
  4. geben Sie Ihnen eine mobile Benachrichtigung, wenn die Zahlung kommt durch und Sie haben eine app installiert/Benachrichtigungen angefordert haben

(Es gibt in der Regel mehr, aber wir nutzen diese als Basis Beispiel)

Manchmal sind diese werden alle gleichzeitig ausgeführt werden, manchmal nicht. Zum Beispiel lassen Sie uns sagen, Sie wollen erwerben das ticket mit Ihrer Laufleistung belohnt. Dann müsste man zuerst überprüfen Sie die Preise, und dann die Verfügbarkeit des Tickets. Und dann tun einige der dunklen Magie, um sicherzustellen, dass keine Kunden-auch die Wissenschaftler, kann wirklich verstehen, die der Algorithmus hinter Ihr Prämien-Programm.

Orchestrator-Funktionen

Egal, ob Sie die Ausführung dieser Funktionen im gleichen moment, läuft Sie um, oder laufen Sie nach, ob eine Bedingung erfüllt ist, werden Sie wahrscheinlich wollen, zu verwenden, was heißt ein orchestrator-Funktion. Dies ist eine spezielle Art von Funktion, die definiert, Ihre workflows zu tun, wie man erwarten könnte, orchestriert die anderen Funktionen. Sie checkpoint automatisch Ihre Fortschritte an, wenn eine Funktion erwartet, die äußerst hilfreich für die Verwaltung von komplexen asynchronen code.

Ohne Dauerhafte Funktionen, die Sie laufen in ein problem der Desorganisation. Lassen Sie uns sagen, eine Funktion stützt sich auf ein anderes das Feuer. Sie könnten rufen die andere Funktion, die direkt aus dem ersten, aber wer ist die Aufrechterhaltung der würde der code haben, den Schritt in jede einzelne Funktion und halten Sie in Ihrem Geist, wie es genannt wird, während die Aufrechterhaltung Sie separat, wenn Sie brauchen Veränderungen. Es ist ziemlich leicht zu bekommen in etwas, das ähnelt callback-Hölle, und das Debuggen sehr schwierig.

Orchestrator-Funktionen, auf der anderen Seite zu verwalten den Zustand und die Zeitplanung aller anderen Funktionen. Die orchestrator-Funktion wird der Startschuss für die von einer Orchestrierung trigger und unterstützt sowohl Eingänge und Ausgänge. Sie können sehen, wie dies wäre ziemlich praktisch! Sie verwalten den Zustand, in umfassender Weise alle an einem Ort. Plus, die serverlose Funktionen selbst können Ihren Job behalten das beschränkt, was Sie ausführen müssen, so dass Sie nicht mehr wiederverwendbar und weniger spröde.

Wir gehen über ein paar mögliche Muster. Wir werden weiter gehen, als nur die Verkettung und sprechen über einige andere Möglichkeiten.

Muster 1: – Funktion der Verkettung

Dies ist die einfachste Umsetzung der Muster. Es ist buchstäblich ein orchestrator-controlling-ein paar verschiedene Schritte. Der orchestrator löst eine Funktion, die Funktion beendet ist, wird der orchestrator registriert es, und dann dann nächste feuert, und so weiter. Hier ist eine Visualisierung, in Aktion:

Finden Sie den Stift, Langlebig Funktionen: Muster #1 – Verkettung von Sarah Drasner (@sdras) auf CodePen.

Hier ist ein einfaches Beispiel, das Muster mit einem generator.

const df = require(“robust-Funktionen”)

– Modul.Exporte = df (- Funktion*(ctx) {
const x = Ertrag ctx.df.callActivityAsync(‘fn1’)
const y = Ausbeute ctx.df.callActivityAsync(‘fn2’, x)
const z = Ertrag ctx.df.callActivityAsync(‘fn3’, y)
Rendite Ertrag ctx.df.callActivityAsync(‘fn3’, z)
})

Ich Liebe Generatoren! Wenn Sie nicht vertraut sind mit Ihnen, schauen Sie sich dieses tolle reden von Bodil auf das Thema).

Muster 2: Fan-out/fan-in

Wenn Sie führen Sie mehrere Funktionen parallel und müssen die Feuer eine weitere Funktion, die basierend auf den Ergebnissen einer fan-out/fan-in-Muster sein könnte, Ihre Marmelade. Wir werden ansammeln, die Ergebnisse der Funktionen aus der ersten Gruppe von Funktionen verwendet werden, in der letzten Funktion.

Finden Sie den Stift, Langlebig Funktionen: Muster #2, Fan-Out, Fan-In von Sarah Drasner (@sdras) auf CodePen.

const df = require(‘robust-Funktionen”)

– Modul.Exporte = df (- Funktion*(ctx) {
const tasks = []

// Elemente zu verarbeiten und gleichzeitig in ein array eingefügt
const taskItems = Ertrag ctx.df.callActivityAsync(‘fn1’)
taskItems.forEach(item = > “Aufgaben”.push(ctx.df.callActivityAsync(‘fn2’, Element))
Ausbeute ctx.df.Aufgabe.alle(Aufgaben)

// senden Sie die Ergebnisse zur letzten Funktion für die Verarbeitung
Ausbeute ctx.df.callActivityAsync(‘fn3’, Aufgaben)
})

Muster 3: Async-HTTP-APIs

Es ist auch ziemlich verbreitet, dass Sie brauchen, um eine Anfrage zu einer API für eine unbekannte Menge an Zeit. Viele Dinge wie die Entfernung und die Menge der verarbeiteten Anforderungen machen können, die Zeit unerkennbar. Es gibt Situationen, die erfordern, dass einige der diese Arbeit zuerst gemacht werden, asynchron, aber im tandem, und dann eine andere Funktion, die ausgelöst werden, wenn die ersten paar API-Aufrufe abgeschlossen sind. Async/await ist perfekt für diese Aufgabe.

Finden Sie den Stift, Langlebig Funktionen: Muster #3, Async-HTTP-APIs von Sarah Drasner (@sdras) auf CodePen.

const df = require(‘robust-Funktionen”)

– Modul.Exporte = df(async ctx => {
const fn1 = ctx.df.callActivityAsync(‘fn1’)
const fn2 = ctx.df.callActivityAsync(‘fn2’)

// die Antworten kommen und warten Sie für beide gelöst werden
erwarten fn1
erwarten fn2

// dann wird dieser eine heißt
erwarten ctx.df.callActivityAsync(‘fn3’)
})

Sie können sich mehrere Muster hier! (Minus-Animationen. 😉)

Erste Schritte

Wenn Sie möchten, um zu spielen, um mit Dauerhaften Funktionen und erfahren Sie mehr, es gibt ein tolles tutorial hier mit den entsprechenden repos zu Gabel und arbeiten Sie mit. Ich arbeite auch mit einem Mitarbeiter auf einen anderen Beitrag, das wird Tauchen Sie ein in eines dieser Muster, wird bald da sein!

Alternative Muster

Azure bietet eine ziemlich einzigartige Sache in Logic Apps, die Ihnen erlaubt, die Fähigkeit zur Gestaltung von workflows visuell. Ich bin in der Regel ein code-nur-nicht-WYSIWYG-lady und mich, aber eine überzeugende Dinge über Logic-Anwendungen ist, dass Sie haben vorgefertigte Anschlüsse, die mit Dienstleistungen wie Twilio und SendGrid, so dass Sie nicht haben, um zu schreiben, dass etwas ärgerlich, meist boilerplate-code. Es kann auch integrieren mit vorhandenen Funktionen, so können Sie abstrahieren nur auf die Teile, die Verbindung zu middle-tier-Systeme und schreiben Sie den rest per hand, das kann wirklich helfen, mit der Produktivität.