Sdílet prostřednictvím


Vytvoření několika triggerů Azure Functions pro službu Azure Cosmos DB

PLATÍ PRO: NoSQL

Tento článek popisuje, jak nakonfigurovat více triggerů Azure Functions pro službu Azure Cosmos DB tak, aby fungovalo paralelně a nezávisle na sobě reagovalo na změny.

Bezserverové funkce založené na událostech pracující s triggerem Azure Functions pro službu Azure Cosmos DB a sdílení kontejneru zapůjčení

Požadavky na architekturu založenou na událostech

Při vytváření bezserverových architektur pomocí Azure Functions se doporučuje vytvořit malé sady funkcí, které spolupracují místo velkých dlouhotrvajících funkcí.

Při vytváření bezserverových toků založených na událostech pomocí triggeru Azure Functions pro službu Azure Cosmos DB narazíte na scénář, ve kterém chcete provést více věcí, kdykoli v konkrétním kontejneru Azure Cosmos DB dojde k nové události. Pokud jsou akce, které chcete aktivovat, nezávislé na sobě, je ideálním řešením vytvoření jednoho triggeru Azure Functions pro službu Azure Cosmos DB pro každou akci , kterou chcete provést, a to vše, co naslouchá změnám ve stejném kontejneru Azure Cosmos DB.

Optimalizace kontejnerů pro více triggerů

Vzhledem k požadavkům triggeru Azure Functions pro službu Azure Cosmos DB potřebujeme druhý kontejner pro uložení stavu, který se označuje také jako kontejner zapůjčení. Znamená to, že pro každou funkci Azure Functions potřebujete samostatný kontejner zapůjčení?

Tady máte dvě možnosti:

  • Vytvořit jeden kontejner zapůjčení na funkci: Tento přístup se může převést na další náklady, pokud nepoužíváte databázi se sdílenou propustností. Mějte na paměti, že minimální propustnost na úrovni kontejneru je 400 jednotek žádostí a v případě kontejneru zapůjčení se používá pouze ke kontrole průběhu a udržování stavu.
  • Mít jeden kontejner zapůjčení a sdílet ho pro všechny vaše funkce: Tato druhá možnost zlepšuje využití zřízených jednotek žádostí v kontejneru, protože umožňuje více funkcím Azure Functions sdílet a používat stejnou zřízenou propustnost.

Cílem tohoto článku je provést druhou možnost.

Konfigurace kontejneru sdílených zapůjčení

Pokud chcete nakonfigurovat kontejner sdílených zapůjčení, jedinou další konfigurací, kterou musíte provést u triggerů, je přidat LeaseContainerPrefix atribut , pokud používáte jazyk C# nebo leaseContainerPrefix atribut , pokud používáte JavaScript. Hodnota atributu by měla být logický popisovač toho, co konkrétní aktivační událost.

Pokud máte například tři triggery: jeden, který odesílá e-maily, jeden, který provede agregaci pro vytvoření materializovaného zobrazení, a ten, který odesílá změny do jiného úložiště pro pozdější analýzu, můžete přiřadit LeaseContainerPrefix "e-maily" prvnímu, materializovanému" druhému zobrazení a "analýze" třetí.

Důležitou součástí je, že všechny tři triggery můžou používat stejnou konfiguraci kontejneru zapůjčení (účet, databáze a název kontejneru).

Velmi jednoduché ukázky kódu používající LeaseContainerPrefix atribut v jazyce C# by vypadaly takto:

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)
{
    ...
}

A pro JavaScript můžete použít konfiguraci v function.json souboru s atributem leaseContainerPrefix :

{
    "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"
}

Poznámka:

Vždy monitorujte jednotky žádostí zřízené v kontejneru sdílených zapůjčení. Každý trigger, který ho sdílí, zvýší průměrnou spotřebu propustnosti, takže možná budete muset zvýšit zřízenou propustnost při zvýšení počtu funkcí Azure Functions, které ji používají.

Další kroky