Serverloze databasecomputing met behulp van Azure Cosmos DB en Azure Functions

VAN TOEPASSING OP: NoSQL

Serverloze computing draait allemaal om de mogelijkheid om te focussen op afzonderlijke logica die herhaalbaar en staatloos zijn. Deze onderdelen vereisen geen infrastructuurbeheer en ze verbruiken resources alleen voor de seconden of milliseconden waarvoor ze worden uitgevoerd. De kern van de serverloze computingverplaatsing zijn functies, die door Azure Functions beschikbaar worden gesteld in het Azure-ecosysteem. Zie de pagina Serverloos in Azure voor meer informatie over andere serverloze uitvoeringsomgevingen in Azure.

Met de systeemeigen integratie tussen Azure Cosmos DB en Azure Functions kunt u rechtstreeks vanuit uw Azure Cosmos DB-account databasetriggers, invoerbindingen en uitvoerbindingen maken. Met behulp van Azure Functions en Azure Cosmos DB kunt u gebeurtenisgestuurde serverloze apps maken en implementeren met toegang tot uitgebreide gegevens voor een globale gebruikersgroep.

Overzicht

Met Azure Cosmos DB en Azure Functions kunt u uw databases en serverloze apps op de volgende manieren integreren:

  • Maak een gebeurtenisgestuurde Azure Functions-trigger voor Azure Cosmos DB. Deze trigger is afhankelijk van wijzigingenfeedstromen om uw Azure Cosmos DB-container te controleren op wijzigingen. Wanneer er wijzigingen worden aangebracht in een container, wordt de wijzigingenfeedstroom verzonden naar de trigger, die de Azure-functie aanroept.
  • U kunt ook een Azure-functie binden aan een Azure Cosmos DB-container met behulp van een invoerbinding. Invoerbindingen lezen gegevens uit een container wanneer een functie wordt uitgevoerd.
  • Een functie binden aan een Azure Cosmos DB-container met behulp van een uitvoerbinding. Uitvoerbindingen schrijven gegevens naar een container wanneer een functie is voltooid.

Notitie

Op dit moment worden Azure Functions triggers, invoerbindingen en uitvoerbindingen voor Azure Cosmos DB alleen ondersteund voor gebruik met de API voor NoSQL. Voor alle andere Azure Cosmos DB API's moet u toegang krijgen tot de database vanuit uw functie met behulp van de statische client voor uw API.

In het volgende diagram ziet u elk van deze drie integraties:

Hoe Azure Cosmos DB en Azure Functions integreren

De Azure Functions-trigger, invoerbinding en uitvoerbinding voor Azure Cosmos DB kunnen in de volgende combinaties worden gebruikt:

  • Een Azure Functions-trigger voor Azure Cosmos DB kan worden gebruikt met een uitvoerbinding voor een andere Azure Cosmos DB-container. Nadat een functie een actie heeft uitgevoerd op een item in de wijzigingenfeed, kunt u het naar een andere container schrijven (door de functie te schrijven naar dezelfde container waaruit het afkomstig is, wordt in feite een recursieve lus gemaakt). U kunt ook een Azure Functions-trigger voor Azure Cosmos DB gebruiken om alle gewijzigde items effectief van de ene container naar een andere container te migreren, met behulp van een uitvoerbinding.
  • Invoerbindingen en uitvoerbindingen voor Azure Cosmos DB kunnen worden gebruikt in dezelfde Azure-functie. Dit werkt goed als u bepaalde gegevens met de invoerbinding wilt zoeken, deze wilt wijzigen in de Azure-functie en deze na de wijziging wilt opslaan in dezelfde container of een andere container.
  • Een invoerbinding voor een Azure Cosmos DB-container kan worden gebruikt in dezelfde functie als een Azure Functions-trigger voor Azure Cosmos DB en kan ook met of zonder uitvoerbinding worden gebruikt. U kunt deze combinatie gebruiken om actuele informatie over valutawissels (opgehaald met een invoerbinding voor een wisselcontainer) toe te passen op de wijzigingenfeed van nieuwe bestellingen in uw winkelwagenservice. Het bijgewerkte winkelwagentotaal, waarbij de huidige valutaconversie is toegepast, kan worden geschreven naar een derde container met behulp van een uitvoerbinding.

Gebruiksvoorbeelden

De volgende use cases laten een aantal manieren zien waarop u uw Azure Cosmos DB-gegevens optimaal kunt benutten door uw gegevens te verbinden met gebeurtenisgestuurde Azure Functions.

IoT-use case: Azure Functions trigger en uitvoerbinding voor Azure Cosmos DB

In IoT-implementaties kunt u een functie aanroepen wanneer het controle-motorlampje wordt weergegeven in een verbonden auto.

Uitvoering: Een Azure Functions-trigger en uitvoerbinding gebruiken voor Azure Cosmos DB

  1. Een Azure Functions-trigger voor Azure Cosmos DB wordt gebruikt om gebeurtenissen met betrekking tot autowaarschuwingen te activeren, zoals het lampje van de controle-motor dat in een verbonden auto gaat branden.
  2. Wanneer het lampje van de controle-engine komt, worden de sensorgegevens verzonden naar Azure Cosmos DB.
  3. Azure Cosmos DB maakt of werkt nieuwe sensorgegevensdocumenten bij, waarna deze wijzigingen worden gestreamd naar de Azure Functions-trigger voor Azure Cosmos DB.
  4. De trigger wordt aangeroepen bij elke gegevenswijziging in de sensorgegevensverzameling, omdat alle wijzigingen worden gestreamd via de wijzigingenfeed.
  5. In de functie wordt een drempelwaardevoorwaarde gebruikt om de sensorgegevens naar de garantieafdeling te verzenden.
  6. Als de temperatuur ook boven een bepaalde waarde ligt, wordt er ook een waarschuwing naar de eigenaar verzonden.
  7. Met de uitvoerbinding voor de functie wordt de autorecord in een andere Azure Cosmos DB-container bijgewerkt om informatie over de controle-engine-gebeurtenis op te slaan.

In de volgende afbeelding ziet u de code die is geschreven in de Azure Portal voor deze trigger.

Een Azure Functions-trigger maken voor Azure Cosmos DB in de Azure Portal

Financieel gebruiksvoorbeeld - Timertrigger en invoerbinding

In financiële implementaties kunt u een functie aanroepen wanneer een bankrekeningsaldo onder een bepaald bedrag valt.

Uitvoering: Een timertrigger met een Azure Cosmos DB-invoerbinding

  1. Met behulp van een timertrigger kunt u de bankrekeningsaldogegevens ophalen die zijn opgeslagen in een Azure Cosmos DB-container op tijdsintervallen met behulp van een invoerbinding.
  2. Als het saldo lager is dan de lage drempelwaarde voor saldo die door de gebruiker is ingesteld, volgt u een actie van de Azure-functie.
  3. De uitvoerbinding kan een SendGrid-integratie zijn die een e-mail van een serviceaccount verzendt naar de e-mailadressen die zijn geïdentificeerd voor elk van de accounts met een laag saldo.

In de volgende afbeeldingen ziet u de code in de Azure Portal voor dit scenario.

Index.js bestand voor een timertrigger voor een financieel scenario

Run.csx-bestand voor een timertrigger voor een financieel scenario

Gebruiksvoorbeeld voor gaming: Azure Functions trigger en uitvoerbinding voor Azure Cosmos DB

Wanneer er in gaming een nieuwe gebruiker wordt gemaakt, kunt u zoeken naar andere gebruikers die hen mogelijk kennen met behulp van De Azure Cosmos DB voor Gremlin. Vervolgens kunt u de resultaten schrijven naar een Azure Cosmos DB- of SQL-database voor eenvoudig ophalen.

Uitvoering: Een Azure Functions-trigger en uitvoerbinding gebruiken voor Azure Cosmos DB

  1. Als u een Azure Cosmos DB-grafiekdatabase gebruikt om alle gebruikers op te slaan, kunt u een nieuwe functie maken met een Azure Functions-trigger voor Azure Cosmos DB.
  2. Wanneer een nieuwe gebruiker wordt ingevoegd, wordt de functie aangeroepen en wordt het resultaat opgeslagen met behulp van een uitvoerbinding.
  3. De functie voert een query uit op de grafiekdatabase om te zoeken naar alle gebruikers die rechtstreeks zijn gerelateerd aan de nieuwe gebruiker en retourneert die gegevensset naar de functie.
  4. Deze gegevens worden vervolgens opgeslagen in Azure Cosmos DB, die vervolgens eenvoudig kunnen worden opgehaald door elke front-endtoepassing waarin de nieuwe gebruiker zijn verbonden vrienden laat zien.

Gebruiksvoorbeeld voor detailhandel - meerdere functies

Wanneer een gebruiker in retail-implementaties een item aan zijn winkelwagen toevoegt, hebt u nu de flexibiliteit om functies te maken en aan te roepen voor optionele onderdelen van de bedrijfspijplijn.

Uitvoering: Meerdere Azure Functions-triggers voor Azure Cosmos DB die luisteren naar één container

  1. U kunt meerdere Azure Functions maken door Azure Functions triggers voor Azure Cosmos DB aan elk toe te voegen, die allemaal luisteren naar dezelfde wijzigingenfeed met winkelwagengegevens. Wanneer meerdere functies naar dezelfde wijzigingenfeed luisteren, is een nieuwe leaseverzameling vereist voor elke functie. Zie Understanding the Change Feed Processor library (Informatie over de processorbibliotheek voor wijzigingenfeeds) voor meer informatie over leaseverzamelingen.
  2. Wanneer een nieuw item wordt toegevoegd aan een winkelwagen van gebruikers, wordt elke functie onafhankelijk aangeroepen door de wijzigingenfeed uit de winkelwagencontainer.
    • De ene functie kan de inhoud van het huidige winkelwagentje gebruiken om de weergave van andere items te wijzigen waarin de gebruiker mogelijk geïnteresseerd is.

    • Een andere functie kan inventaristotalen bijwerken.

    • Een andere functie kan klantinformatie voor bepaalde producten naar de marketingafdeling sturen, die ze een promotiemailer stuurt.

      Elke afdeling kan een Azure Functions maken voor Azure Cosmos DB door te luisteren naar de wijzigingenfeed en ervoor te zorgen dat ze kritieke orderverwerkingsevenementen in het proces niet vertragen.

In al deze gebruiksvoorbeelden hoeft u, omdat de functie de app zelf heeft losgekoppeld, niet de hele tijd nieuwe app-exemplaren te maken. In plaats daarvan Azure Functions afzonderlijke functies draaien om discrete processen naar behoefte te voltooien.

Hulpprogramma's

Systeemeigen integratie tussen Azure Cosmos DB en Azure Functions is beschikbaar in de Azure Portal en in Visual Studio.

Waarom kiezen voor Azure Functions-integratie voor serverloze computing?

Azure Functions biedt de mogelijkheid om schaalbare werkeenheden of beknopte stukjes logica te maken die op aanvraag kunnen worden uitgevoerd, zonder infrastructuur in te richten of te beheren. Met behulp van Azure Functions hoeft u geen volledige app te maken om te reageren op wijzigingen in uw Azure Cosmos DB-database. U kunt kleine herbruikbare functies maken voor specifieke taken. Daarnaast kunt u Azure Cosmos DB-gegevens ook gebruiken als invoer of uitvoer naar een Azure-functie als reactie op gebeurtenissen zoals een HTTP-aanvraag of een getimede trigger.

Azure Cosmos DB is om de volgende redenen de aanbevolen database voor uw serverloze computingarchitectuur:

  • Directe toegang tot al uw gegevens: u hebt gedetailleerde toegang tot elke waarde die is opgeslagen, omdat Azure Cosmos DB automatisch alle gegevens standaard indexeert en deze indexen onmiddellijk beschikbaar maakt. Dit betekent dat u voortdurend query's kunt uitvoeren, nieuwe items kunt bijwerken en toevoegen aan uw database en dat u direct toegang hebt via Azure Functions.

  • Schemaloos. Azure Cosmos DB is schemaloos, dus het is uniek in staat om alle gegevensuitvoer van een Azure-functie te verwerken. Met deze 'alles verwerken'-benadering kunt u eenvoudig verschillende functies maken die allemaal worden uitgevoerd naar Azure Cosmos DB.

  • Schaalbare doorvoer. Doorvoer kan direct omhoog en omlaag worden geschaald in Azure Cosmos DB. Als u honderden of duizenden functies hebt die query's uitvoeren en naar dezelfde container schrijven, kunt u uw RU/s omhoog schalen om de belasting te verwerken. Alle functies kunnen parallel werken met behulp van uw toegewezen RU/s en uw gegevens zijn gegarandeerd consistent.

  • Globale replicatie. U kunt Azure Cosmos DB-gegevens over de hele wereld repliceren om de latentie te verminderen, zodat uw gegevens zich het dichtst bij de locatie van uw gebruikers bevinden. Net als bij alle Azure Cosmos DB-query's worden gegevens van gebeurtenisgestuurde triggers gelezen uit de Azure Cosmos DB die zich het dichtst bij de gebruiker bevinden.

Als u wilt integreren met Azure Functions om gegevens op te slaan en geen grondige indexering nodig hebt of als u bijlagen en mediabestanden wilt opslaan, is de Azure Blob Storage-trigger mogelijk een betere optie.

Voordelen van Azure Functions:

  • Gebeurtenisgestuurd. Azure Functions is gebeurtenisgestuurd en kan luisteren naar een wijzigingenfeed van Azure Cosmos DB. Dit betekent dat u geen luisterlogica hoeft te maken, maar alleen op de hoogte bent van de wijzigingen waarnaar u luistert.

  • Geen limieten. Functies worden parallel uitgevoerd en de service draait net zoveel als u nodig hebt. U stelt de parameters in.

  • Geschikt voor snelle taken. De service draait nieuwe exemplaren van functies wanneer een gebeurtenis wordt geactiveerd en sluit deze zodra de functie is voltooid. U betaalt alleen voor de tijd dat uw functies worden uitgevoerd.

Als u niet zeker weet of Flow, Logic Apps, Azure Functions of WebJobs het meest geschikt zijn voor uw implementatie, raadpleegt u Kiezen tussen Flow, Logic Apps, Functions en WebJobs.

Volgende stappen

Nu gaan we Azure Cosmos DB echt verbinden met Azure Functions: