Share via


Azure Cosmos DB için birden çok Azure İşlevleri tetikleyicisi oluşturma

UYGULANANLAR: NOSQL

Bu makalede, Azure Cosmos DB'nin paralel olarak çalışması ve değişikliklere bağımsız olarak tepki vermesi için birden çok Azure İşlevleri tetikleyicisini nasıl yapılandırabileceğiniz açıklanır.

Azure Cosmos DB için Azure İşlevleri tetikleyicisiyle çalışan ve kira kapsayıcısını paylaşan sunucusuz olay tabanlı İşlevler

Olay tabanlı mimari gereksinimleri

Azure İşlevleri ile sunucusuz mimariler oluştururken, uzun süre çalışan büyük işlevler yerine birlikte çalışan küçük işlev kümeleri oluşturmanız önerilir.

Azure Cosmos DB için Azure İşlevleri tetikleyicisini kullanarak olay tabanlı sunucusuz akışlar oluştururken, belirli bir Azure Cosmos DB kapsayıcısında yeni bir olay olduğunda birden çok şey yapmak istediğiniz senaryoyla karşılaşırsınız. Tetiklemek istediğiniz eylemler birbirinden bağımsızsa ideal çözüm, yapmak istediğiniz eylem başına Azure Cosmos DB için tek bir Azure İşlevleri tetikleyicisi oluşturmak ve bunların tümünün aynı Azure Cosmos DB kapsayıcısı üzerindeki değişiklikleri dinlemesi olabilir.

Birden çok Tetikleyici için kapsayıcıları iyileştirme

Azure Cosmos DB için Azure İşlevleri tetikleyicisinin gereksinimleri göz önüne alındığında, durumu depolamak için kira kapsayıcısı olarak da adlandırılan ikinci bir kapsayıcıya ihtiyacımız vardır. Bu, her Azure İşlevi için ayrı bir kira kapsayıcısı gerektiği anlamına mı geliyor?

Burada iki seçeneğiniz vardır:

  • İşlev başına bir kira kapsayıcısı oluşturun: Paylaşılan aktarım hızı veritabanı kullanmadığınız sürece bu yaklaşım ek maliyetlere dönüşebilir. Kapsayıcı düzeyinde en düşük aktarım hızının 400 İstek Birimi olduğunu ve kira kapsayıcısı söz konusu olduğunda yalnızca ilerleme durumunu denetlemek ve durumu korumak için kullanıldığını unutmayın.
  • Tek bir kira kapsayıcısı edinin ve tüm İşlevleriniz için paylaşın: Bu ikinci seçenek, birden çok Azure İşlevleri aynı sağlanan aktarım hızını paylaşmasını ve kullanmasını sağladığından kapsayıcıda sağlanan İstek Birimlerini daha iyi kullanır.

Bu makalenin amacı, ikinci seçeneği gerçekleştirmeniz için size yol göstermektir.

Paylaşılan kira kapsayıcısını yapılandırma

Paylaşılan kiralar kapsayıcısını yapılandırmak için tetikleyicilerinizde yapmanız gereken tek ek yapılandırma, C# kullanıyorsanız özniteliğini veya leaseContainerPrefix JavaScript kullanıyorsanız özniteliğini eklemektirLeaseContainerPrefix. özniteliğinin değeri, bu tetikleyicinin mantıksal tanımlayıcısı olmalıdır.

Örneğin, üç Tetikleyiciniz varsa: biri e-posta gönderen, biri gerçekleştirilmiş görünüm oluşturmak için bir toplama yapar ve diğeri değişiklikleri başka bir depolama alanına gönderir, daha sonra analiz için ilkine "e-postalar", ikincisine "gerçekleştirilmiş" ve üçüncüsine "analiz" atayabilirsiniz LeaseContainerPrefix .

Önemli olan üç Tetikleyicinin de aynı kira kapsayıcı yapılandırmasını (hesap, veritabanı ve kapsayıcı adı) kullanabilmesidir.

C# dilinde özniteliğini LeaseContainerPrefix kullanan çok basit bir kod örneği şöyle görünür:

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 için yapılandırmayı dosyaya function.json şu öznitelikle leaseContainerPrefix uygulayabilirsiniz:

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

Not

Paylaşılan kiralar kapsayıcınızda sağlanan İstek Birimlerini her zaman izleyin. Bunu paylaşan her Tetikleyici, aktarım hızı ortalama tüketimini artırır, bu nedenle bunu kullanan Azure İşlevleri sayısını artırdıkça sağlanan aktarım hızını artırmanız gerekebilir.

Sonraki adımlar