Megosztás a következőn keresztül:


Több Azure Functions-eseményindító létrehozása az Azure Cosmos DB-hez

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Ez a cikk azt ismerteti, hogyan konfigurálhat több Azure Functions-eseményindítót az Azure Cosmos DB-hez, hogy párhuzamosan és egymástól függetlenül reagáljon a változásokra.

Az Azure Cosmos DB-hez készült Azure Functions-eseményindítóval és egy bérlettároló megosztásával dolgozó kiszolgáló nélküli eseményalapú függvények

Eseményalapú architektúrakövetelmények

Amikor kiszolgáló nélküli architektúrákat hoz létre az Azure Functions használatával, javasoljuk, hogy nagy, hosszú ideig futó függvények helyett olyan kis függvénykészleteket hozzon létre, amelyek együttműködnek.

Amikor eseményalapú kiszolgáló nélküli folyamatokat hoz létre az Azure Cosmos DB-hez készült Azure Functions-eseményindító használatával, olyan forgatókönyvbe fog belefutni, amelyben több dolgot is el szeretne végezni, amikor egy adott Azure Cosmos DB-tárolóban új esemény van. Ha a aktiválni kívánt műveletek függetlenek egymástól, az ideális megoldás az lenne, ha egy Azure Functions-eseményindítót hozna létre az Azure Cosmos DB-hez a kívánt műveletenként , és mindegyik figyeli a módosításokat ugyanazon az Azure Cosmos DB-tárolón.

Tárolók optimalizálása több eseményindítóhoz

Az Azure Cosmos DB-hez készült Azure Functions-eseményindító követelményeit figyelembe véve egy második tárolóra van szükségünk az állapot tárolásához, más néven a bérlettárolóhoz. Ez azt jelenti, hogy minden Azure-függvényhez külön bérlettárolóra van szüksége?

Az alábbiakban két lehetőség közül választhat:

  • Függvényenként hozzon létre egy bérlettárolót: Ez a megközelítés további költségekkel jár, kivéve, ha megosztott átviteli sebességű adatbázist használ. Ne feledje, hogy a tároló szintjén a minimális átviteli sebesség 400 kérelemegység, és a bérlettároló esetében csak az állapot ellenőrzésére és az állapot fenntartására szolgál.
  • Rendelkezik egy bérlettárolóval, és megoszthatja az összes függvényhez: Ez a második lehetőség jobban kihasználja a tárolón kiosztott kérelemegységeket, mivel lehetővé teszi, hogy több Azure Functions is ugyanazt a kiosztott átviteli sebességet ossza meg és használja.

A cikk célja, hogy útmutatást nyújtsunk a második lehetőség eléréséhez.

Megosztott bérlettároló konfigurálása

A megosztott bérlettároló konfigurálásához az egyetlen további konfiguráció, amelyet az eseményindítókon kell elvégeznie, az attribútum hozzáadása LeaseContainerPrefix , ha C# vagy leaseContainerPrefix attribútumot használ JavaScript használata esetén. Az attribútum értékének az adott eseményindító logikai leírójának kell lennie.

Ha például három eseményindítóval rendelkezik: az egyik e-maileket küld, egyet, amely összesítést végez egy materializált nézet létrehozásához, és egyet, amely elküldi a módosításokat egy másik tárolóba, a későbbi elemzéshez hozzárendelheti az LeaseContainerPrefix "e-maileket" az elsőhöz, a "materialized" a másodikhoz, az "elemzést" pedig a harmadikhoz.

A fontos rész az, hogy mindhárom eseményindító ugyanazt a bérletes tárolókonfigurációt használhatja (fiók, adatbázis és tároló neve).

A C# attribútumot használó LeaseContainerPrefix nagyon egyszerű kódminták a következőképpen néznek ki:

using Microsoft.Azure.WebJobs;
using Microsoft.Azure.WebJobs.Host;
using System.Collections.Generic;
using Microsoft.Extensions.Logging;

[FunctionName("SendEmails")]
public static void SendEmails([CosmosDBTrigger(
    databaseName: "ToDoItems",
    containerName: "Items",
    Connection = "CosmosDBConnection",
    LeaseContainerName = "leases",
    LeaseContainerPrefix = "emails")]IReadOnlyList<MyItem> items,
    ILogger log)
{
    ...
}

[FunctionName("MaterializedViews")]
public static void MaterializedViews([CosmosDBTrigger(
    databaseName: "ToDoItems",
    containerName: "Items",
    Connection = "CosmosDBConnection",
    LeaseContainerName = "leases",
    LeaseContainerPrefix = "materialized")]IReadOnlyList<MyItem> items,
    ILogger log)
{
    ...
}

JavaScript esetén pedig alkalmazhatja a konfigurációt a function.json fájlra a leaseContainerPrefix következő attribútummal:

{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseContainerName": "leases",
    "connection": "CosmosDBConnection",
    "databaseName": "ToDoItems",
    "containerName": "Items",
    "leaseContainerPrefix": "emails"
},
{
    "type": "cosmosDBTrigger",
    "name": "documents",
    "direction": "in",
    "leaseContainerName": "leases",
    "connection": "CosmosDBConnection",
    "databaseName": "ToDoItems",
    "containerName": "Items",
    "leaseContainerPrefix": "materialized"
}

Feljegyzés

Mindig figyelje a megosztott bérlettárolón kiosztott kérelemegységeket. Az azt megosztó egyes triggerek növelik az átviteli sebesség átlagos fogyasztását, ezért előfordulhat, hogy növelnie kell a kiosztott átviteli sebességet az azt használó Azure Functions számának növelése során.

Következő lépések