Serverlös databasberäkning med Azure Cosmos DB och Azure Functions

GÄLLER FÖR: NoSQL

Serverlös databehandling handlar om möjligheten att fokusera på enskilda delar av logiken som är repeterbara och tillståndslösa. Dessa delar kräver ingen infrastrukturhantering och de förbrukar bara resurser under de sekunder eller millisekunder som de körs för. Kärnan i den serverlösa databehandlingsflytten är funktioner som görs tillgängliga i Azure-ekosystemet av Azure Functions. Mer information om andra serverlösa körningsmiljöer i Azure finns på sidan Serverlös i Azure .

Med den interna integreringen mellan Azure Cosmos DB och Azure Functions kan du skapa databasutlösare, indatabindningar och utdatabindningar direkt från ditt Azure Cosmos DB-konto. Med hjälp av Azure Functions och Azure Cosmos DB kan du skapa och distribuera händelsedrivna serverlösa appar med låg latensåtkomst till omfattande data för en global användarbas.

Översikt

Med Azure Cosmos DB och Azure Functions kan du integrera dina databaser och serverlösa appar på följande sätt:

  • Skapa en händelsedriven Azure Functions utlösare för Azure Cosmos DB. Den här utlösaren förlitar sig på ändringsflödesströmmar för att övervaka din Azure Cosmos DB-container för ändringar. När ändringar görs i en container skickas ändringsflödesströmmen till utlösaren, som anropar Azure-funktionen.
  • Du kan också binda en Azure-funktion till en Azure Cosmos DB-container med hjälp av en indatabindning. Indatabindningar läser data från en container när en funktion körs.
  • Binda en funktion till en Azure Cosmos DB-container med hjälp av en utdatabindning. Utdatabindningar skriver data till en container när en funktion slutförs.

Anteckning

För närvarande stöds Azure Functions utlösare, indatabindningar och utdatabindningar för Azure Cosmos DB endast för användning med API:et för NoSQL. För alla andra Azure Cosmos DB-API:er bör du komma åt databasen från din funktion med hjälp av den statiska klienten för ditt API.

Följande diagram illustrerar var och en av dessa tre integreringar:

Så integrerar Azure Cosmos DB och Azure Functions

Den Azure Functions utlösare, indatabindning och utdatabindning för Azure Cosmos DB kan användas i följande kombinationer:

  • En Azure Functions utlösare för Azure Cosmos DB kan användas med en utdatabindning till en annan Azure Cosmos DB-container. När en funktion utför en åtgärd på ett objekt i ändringsflödet kan du skriva den till en annan container (om du skriver den till samma container som den kom från skulle det effektivt skapa en rekursiv loop). Du kan också använda en Azure Functions utlösare för Azure Cosmos DB för att effektivt migrera alla ändrade objekt från en container till en annan container, med hjälp av en utdatabindning.
  • Indatabindningar och utdatabindningar för Azure Cosmos DB kan användas i samma Azure-funktion. Detta fungerar bra om du vill hitta vissa data med indatabindningen, ändra dem i Azure-funktionen och sedan spara dem i samma container eller en annan container efter ändringen.
  • En indatabindning till en Azure Cosmos DB-container kan användas i samma funktion som en Azure Functions utlösare för Azure Cosmos DB och kan även användas med eller utan en utdatabindning. Du kan använda den här kombinationen för att tillämpa uppdaterad valutaväxlingsinformation (hämtad med en indatabindning till en exchangecontainer) i ändringsflödet för nya beställningar i din kundvagnstjänst. Den uppdaterade kundvagnssumman, med den aktuella valutaomvandlingen tillämpad, kan skrivas till en tredje container med hjälp av en utdatabindning.

Användningsfall

Följande användningsfall visar några sätt att få ut mesta möjliga av dina Azure Cosmos DB-data – genom att ansluta dina data till händelsedrivna Azure Functions.

IoT-användningsfall – Azure Functions utlösare och utdatabindning för Azure Cosmos DB

I IoT-implementeringar kan du anropa en funktion när kontrollmotorlampan visas i en ansluten bil.

Genomförandet: Använda en Azure Functions utlösare och utdatabindning för Azure Cosmos DB

  1. En Azure Functions utlösare för Azure Cosmos DB används för att utlösa händelser relaterade till bilaviseringar, till exempel att kontrollmotorlampan tänds i en ansluten bil.
  2. När kontrollmotorlampan tänds skickas sensordata till Azure Cosmos DB.
  3. Azure Cosmos DB skapar eller uppdaterar nya sensordatadokument. Ändringarna strömmas sedan till Azure Functions utlösare för Azure Cosmos DB.
  4. Utlösaren anropas vid varje dataändring till sensordatainsamlingen, eftersom alla ändringar strömmas via ändringsflödet.
  5. Ett tröskelvärde används i funktionen för att skicka sensordata till garantiavdelningen.
  6. Om temperaturen också är över ett visst värde skickas även en avisering till ägaren.
  7. Utdatabindningen för funktionen uppdaterar bilposten i en annan Azure Cosmos DB-container för att lagra information om kontrollmotorhändelsen.

Följande bild visar koden som skrivits i Azure Portal för den här utlösaren.

Skapa en Azure Functions utlösare för Azure Cosmos DB i Azure Portal

Ekonomiskt användningsfall – Timerutlösare och indatabindning

I finansiella implementeringar kan du anropa en funktion när ett bankkontosaldo understiger ett visst belopp.

Genomförandet: En timerutlösare med en Azure Cosmos DB-indatabindning

  1. Med hjälp av en timerutlösare kan du hämta bankkontobalansinformationen som lagras i en Azure Cosmos DB-container vid tidsintervall med hjälp av en indatabindning.
  2. Om saldot ligger under tröskelvärdet för lågt saldo som angetts av användaren följer du upp med en åtgärd från Azure-funktionen.
  3. Utdatabindningen kan vara en SendGrid-integrering som skickar ett e-postmeddelande från ett tjänstkonto till de e-postadresser som identifierats för vart och ett av kontona med lågt saldo.

Följande bilder visar koden i Azure Portal för det här scenariot.

Index.js fil för en Timer-utlösare för ett ekonomiskt scenario

Run.csx-fil för en Timer-utlösare för ett ekonomiskt scenario

Användningsfall för spel – Azure Functions utlösare och utdatabindning för Azure Cosmos DB

När en ny användare skapas i spel kan du söka efter andra användare som kanske känner dem med hjälp av Azure Cosmos DB för Gremlin. Du kan sedan skriva resultaten till en Azure Cosmos DB- eller SQL-databas för enkel hämtning.

Genomförandet: Använda en Azure Functions utlösare och utdatabindning för Azure Cosmos DB

  1. Med hjälp av en Azure Cosmos DB-grafdatabas för att lagra alla användare kan du skapa en ny funktion med en Azure Functions utlösare för Azure Cosmos DB.
  2. När en ny användare infogas anropas funktionen och resultatet lagras med hjälp av en utdatabindning.
  3. Funktionen frågar grafdatabasen för att söka efter alla användare som är direkt relaterade till den nya användaren och returnerar datauppsättningen till funktionen.
  4. Dessa data lagras sedan i Azure Cosmos DB, som sedan enkelt kan hämtas av alla klientdelsprogram som visar den nya användaren sina anslutna vänner.

Användningsfall för detaljhandeln – flera funktioner

När en användare lägger till ett objekt i varukorgen i detaljhandelsimplementeringar har du nu flexibiliteten att skapa och anropa funktioner för valfria affärspipelinekomponenter.

Genomförandet: Flera Azure Functions utlösare för Azure Cosmos DB som lyssnar på en container

  1. Du kan skapa flera Azure Functions genom att lägga till Azure Functions utlösare för Azure Cosmos DB till var och en – som alla lyssnar på samma ändringsflöde för kundvagnsdata. När flera funktioner lyssnar på samma ändringsflöde krävs en ny lånesamling för varje funktion. Mer information om lånesamlingar finns i Förstå biblioteket för ändringsflödesprocessor.
  2. Varje gång ett nytt objekt läggs till i en kundvagn för användare anropas varje funktion oberoende av ändringsflödet från kundvagnscontainern.
    • En funktion kan använda innehållet i den aktuella korgen för att ändra visningen av andra objekt som användaren kan vara intresserad av.

    • En annan funktion kan uppdatera inventeringssummorna.

    • En annan funktion kan skicka kundinformation för vissa produkter till marknadsföringsavdelningen, som skickar dem ett kampanjmeddelande.

      Alla avdelningar kan skapa en Azure Functions för Azure Cosmos DB genom att lyssna på ändringsflödet och se till att de inte fördröjer kritiska orderbearbetningshändelser i processen.

I alla dessa användningsfall, eftersom funktionen har frikopplat själva appen, behöver du inte starta nya appinstanser hela tiden. I stället snurrar Azure Functions upp enskilda funktioner för att slutföra diskreta processer efter behov.

Verktyg

Intern integrering mellan Azure Cosmos DB och Azure Functions är tillgänglig i Azure Portal och i Visual Studio.

Varför välja Azure Functions integrering för serverlös databehandling?

Azure Functions ger möjlighet att skapa skalbara arbetsenheter eller koncisa delar av logik som kan köras på begäran, utan etablering eller hantering av infrastruktur. Med hjälp av Azure Functions behöver du inte skapa en fullständig app för att svara på ändringar i Azure Cosmos DB-databasen. Du kan skapa små återanvändbara funktioner för specifika uppgifter. Dessutom kan du också använda Azure Cosmos DB-data som indata eller utdata till en Azure-funktion som svar på händelser som http-begäranden eller en tidsinlös utlösare.

Azure Cosmos DB är den rekommenderade databasen för din serverlösa databehandlingsarkitektur av följande skäl:

  • Omedelbar åtkomst till alla dina data: Du har detaljerad åtkomst till varje värde som lagras eftersom Azure Cosmos DB automatiskt indexerar alla data som standard och gör dessa index omedelbart tillgängliga. Det innebär att du ständigt kan fråga, uppdatera och lägga till nya objekt i databasen och få omedelbar åtkomst via Azure Functions.

  • Schemalös. Azure Cosmos DB är schemalöst , så det är unikt att kunna hantera datautdata från en Azure-funktion. Den här metoden "hantera vad som helst" gör det enkelt att skapa olika funktioner som alla utdata till Azure Cosmos DB.

  • Skalbart dataflöde. Dataflödet kan skalas upp och ned direkt i Azure Cosmos DB. Om du har hundratals eller tusentals Functions-frågor och skriver till samma container kan du skala upp dina RU/s för att hantera belastningen. Alla funktioner kan fungera parallellt med dina allokerade RU/s och dina data är garanterat konsekventa.

  • Global replikering. Du kan replikera Azure Cosmos DB-data över hela världen för att minska svarstiden och geo-lokalisera dina data närmast där användarna befinner sig. Precis som med alla Azure Cosmos DB-frågor läses data från händelsedrivna utlösare av data från Azure Cosmos DB närmast användaren.

Om du vill integrera med Azure Functions för att lagra data och inte behöver djup indexering eller om du behöver lagra bifogade filer och mediefiler kan Azure Blob Storage utlösaren vara ett bättre alternativ.

Fördelar med Azure Functions:

  • Händelsedriven. Azure Functions är händelsedriven och kan lyssna på ett ändringsflöde från Azure Cosmos DB. Det innebär att du inte behöver skapa lyssningslogik. Håll bara utkik efter de ändringar som du lyssnar efter.

  • Inga gränser. Funktionerna körs parallellt och tjänsten startar så många du behöver. Du anger parametrarna.

  • Bra för snabba uppgifter. Tjänsten startar nya instanser av funktioner när en händelse utlöses och stänger dem så snart funktionen har slutförts. Du betalar bara för den tid som dina funktioner körs.

Om du inte är säker på om Flow, Logic Apps, Azure Functions eller WebJobs passar bäst för implementeringen kan du läsa Välj mellan Flow, Logic Apps, Functions och WebJobs.

Nästa steg

Nu ska vi ansluta Azure Cosmos DB och Azure Functions på riktigt: