Wat zijn Duurzame Functies?

0
13

Oh nee! Niet meer jargon! Wat doet de term Duurzaam Functies betekenen? Duurzame functies hebben te maken met Serverloze architecturen. Het is een verlengstuk van het Azure Functies die u toelaten om te schrijven stateful executies in een serverloze omgeving.

Denk aan het op deze manier. Er zijn een paar grote voordelen die mensen hebben de neiging om zich te concentreren op wanneer ze praten over de Serverloze Functies:

  • Ze zijn goedkoop
  • Zij schaal met uw wensen (niet noodzakelijk, maar dat is de standaard voor vele diensten)
  • Ze stellen u in te schrijven event-driven code

Laten we praten over dat voor een minuut. Als u kunt schrijven event-driven code, kunt u uw operationele behoeften in kleinere functies die in wezen zeggen: wanneer dit verzoek wordt in deze code uitvoert. Je hoeft niet knoeien met de infrastructuur, dat is voor u geregeld. Het is een behoorlijk overtuigende concept.

In dit model kunt u uw workflow afgebroken in kleinere, herbruikbare stukken die, op hun beurt, kunnen ze makkelijker te onderhouden. Hierdoor kunt u zich concentreren op uw business logica, want je kookt alles om de eenvoudigste code die je moet uitvoeren op de server.

Dus, hier is waar Duurzame Functies. Je kunt wel raden dat u ze nodig hebben, meer dan één functie uitvoeren als uw aanvraag groeit in omvang en heeft te handhaven meerdere lidstaten. En, in veel gevallen, je nodig hebt om te coördineren en de volgorde opgeven waarin ze moeten worden uitgevoerd om hen effectief te zijn. Het is het vermelden waard op dit punt dat Duurzaam Functies zijn een patroon alleen beschikbaar in Azure. Andere services zijn variaties op dit thema. Bijvoorbeeld, de AWS versie heet Stap Functies. Dus, terwijl we praten over iets specifieks van Azure, het geldt meer in het algemeen als goed.

Duurzaam in actie, enkele voorbeelden

Laten we zeggen dat je de verkoop van vliegtickets. Je kunt je voorstellen dat als een persoon koopt een ticket, moeten wij:

  1. controleer voor de beschikbaarheid van het ticket
  2. een verzoek om de zitting kaart
  3. hun aantal kilometers punten als ze een trouw lid
  4. geef ze een mobiele melding als de betaling gaat door en ze hebben een app geïnstalleerd heeft/hebben aangevraagd meldingen

(Er is meestal meer, maar we gebruiken dit als een basis voorbeeld)

Soms zullen deze draaien allemaal gelijktijdig kan worden uitgevoerd, soms niet. Bijvoorbeeld, laten we zeggen dat ze willen om het ticket te kopen met hun kilometers beloningen. Dan zou je eerst controleren de prijzen en de beschikbaarheid van het ticket. En dan doen wat donkere magie om te zorgen dat geen klanten, zelfs gegevens wetenschappers, kan eigenlijk juist het algoritme achter uw beloningsprogramma.

Orchestrator functies

Of u nu met deze functies op hetzelfde moment, draait ze om, of lopen ze naar het wel of niet aan een voorwaarde wordt voldaan, wilt u waarschijnlijk wat heet een orchestrator-functie. Dit is een speciaal type van de functie die bepaalt uw workflows, doen, zoals je zou verwachten, het orkestreren van de andere functies. Zij automatisch checkpoint hun vooruitgang op het moment dat een functie wacht, die is zeer nuttig voor het managen van complexe asynchrone code.

Zonder Duurzame Functies, loopt u tegen een probleem van desorganisatie. Laten we zeggen dat een functie afhankelijk is van een andere brand. Je zou kunnen noemen de andere functie rechtstreeks van de eerste, maar wie is het handhaven van de code zou hebben om de stap naar elke individuele functie en houden in hun gedachten, hoe het wordt genoemd, terwijl het handhaven van hen afzonderlijk als ze het nodig hebben verandert. Het is vrij eenvoudig te krijgen in iets dat lijkt op callback de hel, en het opsporen van fouten kan echt lastig zijn.

Orchestrator functies, aan de andere kant, het beheer van de staat en de timing van alle andere functies. De orchestrator-functie zal worden afgetrapt door een orkestratie trigger en ondersteunt beide ingangen en uitgangen. U kunt zien hoe dit zou heel handig! U bent het beheren van de staat in een uitgebreide manier alles op één plek. Plus, de serverloze functies zelf hun baan kunnen houden beperkt tot wat ze nodig hebben om uit te voeren, waardoor ze meer hergebruik en minder broos is.

Laten we gaan over een aantal mogelijke patronen. Wij gaan verder dan alleen het koppelen van en praten over andere mogelijkheden.

Patroon 1: Functie-chaining

Dit is de meest eenvoudige uitvoering van alle patronen. Het is letterlijk een orchestrator het beheersen van een aantal verschillende stappen. De orchestrator activeert een functie, de functie is voltooid, de orchestrator registers, en dan vervolgens de volgende branden, enzovoort. Hier is een visualisatie van die in actie:

Zie de Pen Duurzame Functies: Patroon #1 – het Koppelen van door Sarah Drasner (@sdras) op CodePen.

Hier is een eenvoudig voorbeeld van dat patroon met een generator.

const df = require(“duurzaam-functies”)

de module.export = df(functie*(ctx) {
const x = rendement ctx.df.callActivityAsync(‘fn1’)
const y = opbrengst ctx.df.callActivityAsync(‘fn2’, x)
const z = rendement ctx.df.callActivityAsync(‘fn3’, y)
rendement rendement ctx.df.callActivityAsync(‘fn3’, z)
})

Ik hou van generatoren! Als u niet bekend bent met hen, check out deze geweldige praten door Bodil op het onderwerp).

Patroon 2: Fan-out/ventilator-in

Als u voor het uitvoeren van meerdere functies in parallel en moet te vuur een functie meer gebaseerd op de resultaten van een fan-out/ventilator-in patroon kan je vast. We verzamelen de resultaten van de functies van de eerste groep van functies die kunnen worden gebruikt in de laatste functie.

Zie de Pen Duurzame Functies: Patroon #2, Ventilator, Ventilator door Sarah Drasner (@sdras) op CodePen.

const df = (‘duurzaam-functies’)

de module.export = df(functie*(ctx) {
const taken = []

// de artikelen te verwerken gelijktijdig, toegevoegd aan een array
const taskItems = rendement ctx.df.callActivityAsync(‘fn1’)
taskItems.forEach(item => taken.push(ctx.df.callActivityAsync(‘fn2’, item))
de opbrengst ctx.df.taak.alle(taken)

// stuur de resultaten naar de laatste functie voor het verwerken van
de opbrengst ctx.df.callActivityAsync(‘fn3’, taken)
})

Patroon 3: Async HTTP-Api ‘ s

Het is ook vrij gebruikelijk dat je nodig hebt om een aanvraag voor een API voor een onbekende tijd. Veel dingen, zoals de afstand en het bedrag van de aanvragen verwerkt kunnen maken van de hoeveelheid tijd die onkenbaar is. Er zijn situaties die vereisen dat een aantal van deze werken eerst worden gedaan, asynchroon, maar in tandem, en vervolgens een andere functie om te worden gestart wanneer de eerste paar API-aanroepen zijn ingevuld. Async/wachten is perfect voor deze taak.

Zie de Pen Duurzame Functies: Patroon #3, Async HTTP-Api ‘ s van Sarah Drasner (@sdras) op CodePen.

const df = (‘duurzaam-functies’)

de module.export = df(async ctx => {
const fn1 = ctx.df.callActivityAsync(‘fn1’)
const fn2 = ctx.df.callActivityAsync(‘fn2’)

// de antwoorden komen en wachten voor beide worden opgelost
wachten fn1
wachten fn2

// dan is dit deze heet
wachten ctx.df.callActivityAsync(‘fn3’)
})

Kan je nog meer patronen hier! (Minus animaties. 😉)

Aan de slag

Als u wilt spelen met Duurzame Functies en meer, er is een goede tutorial hier, met de bijbehorende repo ‘ s tot op het bord en werk. Ik ben ook samen met een collega op een andere post dat zal een duik nemen in een van deze patronen, die binnenkort!

Alternatieve patronen

Azure biedt een vrij unieke zaak in de Logica Apps, waarmee u de mogelijkheid om ontwerpen van workflows visueel. Ik ben meestal een code-alleen-geen-WYSIWYG-lieve-vrouw zelf, maar één van de boeiende dingen over Logica Apps is dat ze kant-en-klare connectoren met diensten zoals Twilio en SendGrid, zodat u niet hoeft te schrijven dat een beetje irritant, vooral boilerplate code. Het kan ook worden geïntegreerd met uw bestaande functies, zodat u kunt abstract weg gewoon de onderdelen aansluiten op middle-tier systemen en schrijf de rest met de hand, die echt kan helpen met de productiviteit.