Share via


Hedef tabanlı ölçeklendirme

Hedef tabanlı ölçeklendirme, müşteriler için hızlı ve sezgisel bir ölçeklendirme modeli sağlar ve şu anda aşağıdaki uzantılar için desteklenmektedir:

Hedef tabanlı ölçeklendirme, bu uzantı türleri için varsayılan olarak önceki Azure İşlevleri artımlı ölçeklendirme modelinin yerini alır. Artımlı ölçeklendirme, her yeni örnek hızında en fazla bir çalışan eklendi veya kaldırıldı ve ne zaman ölçeklendirilecekleri konusunda karmaşık kararlar alındı. Buna karşılık, hedef tabanlı ölçeklendirme aynı anda dört örneğin ölçeğini artırmaya olanak tanır ve ölçeklendirme kararı basit bir hedef tabanlı denklemi temel alır:

Illustration of the equation: desired instances = event source length / target executions per instance.

Örnek başına varsayılan hedef yürütme değerleri, Azure İşlevleri uzantıları tarafından kullanılan SDK'lardan gelir. Hedef tabanlı ölçeklendirmenin çalışması için herhangi bir değişiklik yapmanız gerekmez.

Dikkat edilmesi gereken noktalar

Hedef tabanlı ölçeklendirme kullanılırken aşağıdaki noktalar geçerlidir:

  • Hedef tabanlı ölçeklendirme, Tüketim planındaki işlev uygulamaları veya Premium planları için varsayılan olarak etkindir, ancak geri çevirebilirsiniz. Ayrılmış (App Service) planlarında çalışırken olay odaklı ölçeklendirme desteklenmez.
  • Hedef Tabanlı Ölçeklendirme, işlev uygulaması çalışma zamanı 4.19.0 veya sonraki bir sürümde varsayılan olarak etkindir.
  • Hedef tabanlı ölçeklendirme kullanılırken, functionAppScaleLimit site ayarı yine de kabul edilir. Daha fazla bilgi için bkz . Ölçeği genişletmeyi sınırlama.
  • Ölçümlere göre en doğru ölçeklendirmeyi elde etmek için işlev uygulaması başına yalnızca bir hedef tabanlı tetiklenen işlev kullanın.
  • Aynı işlev uygulamasındaki birden çok işlevin tümü aynı anda ölçeği genişletmeyi istediğinde, istenen örneklerdeki değişikliği belirlemek için bu işlevler arasında bir toplam kullanılır. Ölçeği genişletmeyi isteyen işlevler, ölçeği daraltmak isteyen geçersiz kılma işlevleri.
  • Ölçeği genişletme isteği olmayan ölçek daraltma istekleri olduğunda, maksimum ölçek değeri kullanılır.

Geri çevirme

Hedef tabanlı ölçeklendirme, Tüketim planında veya Premium planlarda barındırılan işlev uygulamaları için varsayılan olarak etkindir. Hedef tabanlı ölçeklendirmeyi devre dışı bırakmak ve artımlı ölçeklendirmeye geri dönmek için işlev uygulamanıza aşağıdaki uygulama ayarını ekleyin:

Uygulama Ayarı Değer
TARGET_BASED_SCALING_ENABLED 0

Hedef tabanlı ölçeklendirmeyi özelleştirme

Örnek başına hedef yürütmeleri ayarlayarak uygulamanızın iş yüküne göre ölçeklendirme davranışını daha fazla veya daha az agresif hale getirebilirsiniz. Her uzantının örnek başına hedef yürütmeleri ayarlamak için kullanabileceğiniz farklı ayarları vardır.

Bu tablo, örnek başına hedef yürütmeler için kullanılan değerleri ve varsayılanları özetlerhost.json:

Dahili host.json değerleri Varsayılan Değer
Event Hubs (Uzantı v5.x+) extensions.eventHubs.maxEventBatchSize 100*
Event Hubs (Uzantı v3.x+) extensions.eventHubs.eventProcessorOptions.maxBatchSize 10
Event Hubs (tanımlıysa) extensions.eventHubs.targetUnprocessedEventThreshold yok
Service Bus (Uzantı v5.x+, Tek Gönderim) extensions.serviceBus.maxConcurrentCalls 16
Service Bus (Uzantı v5.x+, Tek Dağıtım Oturumları Tabanlı) extensions.serviceBus.maxConcurrentSessions 8
Service Bus (Uzantı v5.x+, Toplu İşlem) extensions.serviceBus.maxMessageBatchSize 1000
Service Bus (İşlevler v2.x+, Tek Gönderim) extensions.serviceBus.messageHandlerOptions.maxConcurrentCalls 16
Service Bus (İşlevler v2.x+, Tek Dağıtım Oturumları Tabanlı) extensions.serviceBus.sessionHandlerOptions.maxConcurrentSessions Kategori 2000
Service Bus (İşlevler v2.x+, Toplu İşlem) extensions.serviceBus.batchOptions.maxMessageCount 1000
Depolama Kuyruğu extensions.queues.batchSize 16

* Varsayılan değer maxEventBatchSize paketin v6.0.0'ındaMicrosoft.Azure.WebJobs.Extensions.EventHubs değiştirildi. Önceki sürümlerde bu değer 10'du.

Bazı bağlama uzantıları için örnek başına hedef yürütmeler bir işlev özniteliği kullanılarak ayarlanır:

Dahili İşlev tetikleyici ayarı Varsayılan Değer
Apache Kafka lagThreshold 1000
Azure Cosmos DB maxItemsPerInvocation 100

Daha fazla bilgi edinmek için desteklenen uzantıların örnek yapılandırmalarına bakın.

Çalışma zamanı ölçeği izleme etkinleştirilmiş premium plan

Çalışma zamanı ölçek izleme etkinleştirildiğinde, uzantılar dinamik ölçeklendirmeyi kendileri işler. Bunun nedeni ölçek denetleyicisinin sanal ağ tarafından güvenliği sağlanan hizmetlere erişimi olmamasıdır. Çalışma zamanı ölçeği izlemeyi etkinleştirdikten sonra, ek hedef tabanlı ölçeklendirme işlevinin kilidini açmak için uzantı paketlerinizi şu en düşük sürümlere yükseltmeniz gerekir:

Uzantı Adı Gereken En Düşük Sürüm
Apache Kafka 3.9.0
Azure Cosmos DB 4.1.0
Event Hubs 5.2.0
Service Bus 5.9.0
Depolama Kuyruğu 5.1.0

Dinamik eşzamanlılık desteği

Hedef tabanlı ölçeklendirme daha hızlı ölçeklendirme sağlar ve örnek başına hedef yürütmeler için varsayılanları kullanır. Service Bus, Depolama kuyrukları veya Kafka kullanırken dinamik eşzamanlılığı da etkinleştirebilirsiniz. Bu yapılandırmada örnek başına hedef yürütme değeri, dinamik eşzamanlılık özelliği tarafından otomatik olarak belirlenir. Sınırlı eşzamanlılık ile başlar ve zaman içinde en iyi ayarı tanımlar.

Desteklenen uzantılar

host.json dosyanızda hedef tabanlı ölçeklendirmeyi yapılandırma yönteminiz, belirli uzantı türüne bağlıdır. Bu bölümde, şu anda hedef tabanlı ölçeklendirmeyi destekleyen uzantılar için yapılandırma ayrıntıları sağlanır.

Service Bus kuyrukları ve konuları

Service Bus uzantısı, Service Bus tetikleyicinizin ve IsSessionsEnabled öznitelikleri tarafından IsBatched belirlenen üç yürütme modeli destekler. ve IsSessionsEnabled için IsBatched varsayılan değerdirfalse.

Yürütme Modeli IsBatched IsSessionsEnabled Örnek başına hedef yürütmeler için kullanılan ayar
Tek gönderim işleme yanlış yanlış Maxconcurrentcalls
Tek gönderim işleme (oturum tabanlı) yanlış true Maxconcurrentsessions
Toplu işleme true yanlış maxMessageBatchSize veya maxMessageCount

Not

Ölçek verimliliği: Service Bus uzantısı için en verimli ölçeklendirme için Kaynaklarda hakları yönetme'yi kullanın. Kuyruk veya konu uzunluğu ölçeklendirme kararlarını bilgilendirmek için kullanılamadığından, Dinleme hakları ölçeklendirmesi artımlı ölçeklendirmeye geri döner. Service Bus erişim ilkelerindeki hakları ayarlama hakkında daha fazla bilgi edinmek için bkz . Paylaşılan Erişim Yetkilendirme İlkesi.

Tek gönderim işleme

Bu modelde işlevinizin her çağrısı tek bir iletiyi işler. AyarmaxConcurrentCalls, örnek başına hedef yürütmeleri yönetir. Belirli ayar Service Bus uzantısının sürümüne bağlıdır.

host.json aşağıdaki örnekte olduğu gibi ayarını maxConcurrentCallsdeğiştirin:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentCalls": 16
        }
    }
}

Tek gönderim işleme (oturum tabanlı)

Bu modelde işlevinizin her çağrısı tek bir iletiyi işler. Ancak, Service Bus konunuzun veya kuyruğunuzun etkin oturum sayısına bağlı olarak, her örnek bir veya daha fazla oturum kiralar. Belirli ayar Service Bus uzantısının sürümüne bağlıdır.

Aşağıdaki örnekte olduğu host.json gibi, örnek başına hedef yürütmeleri ayarlamak için ayarı maxConcurrentSessions değiştirin:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxConcurrentSessions": 8
        }
    }
}

Toplu işleme

Bu modelde, işlevinizin her çağrısı bir dizi iletiyi işler. Belirli ayar Service Bus uzantısının sürümüne bağlıdır.

Aşağıdaki örnekte olduğu host.json gibi, örnek başına hedef yürütmeleri ayarlamak için ayarı maxMessageBatchSize değiştirin:

{
    "version": "2.0",
    "extensions": {
        "serviceBus": {
            "maxMessageBatchSize": 1000
        }
    }
}

Event Hubs

Azure Event Hubs için Azure İşlevleri olay hub'ında tüm bölümlere dağıtılan işlenmemiş olayların sayısına göre ölçeklendirilir. Varsayılan olarak, host.json örnek başına hedef yürütmeler için kullanılan öznitelikler ve maxBatchSizeşeklindedirmaxEventBatchSize. Ancak, hedef tabanlı ölçeklendirmede ince ayar yapmayı seçerseniz, toplu iş ayarlarını değiştirmeden örnek başına hedef yürütmeleri ayarlamak için geçersiz kılan ayrı bir parametre targetUnprocessedEventThreshold tanımlayabilirsiniz. Ayarlanırsa targetUnprocessedEventThreshold , toplam işlenmemiş olay sayısı, örnek sayısını belirlemek için bu değere bölünür ve bu değer dengeli bir bölüm dağılımı oluşturan bir çalışan örneği sayısına yuvarlanırsa.

Not

Event Hubs bölümlenmiş bir iş yükü olduğundan Event Hubs için hedef örnek sayısı, olay hub'ınızdaki bölüm sayısıyla eşlenir.

Belirli ayar Event Hubs uzantısının sürümüne bağlıdır.

Aşağıdaki örnekte olduğu host.json gibi, örnek başına hedef yürütmeleri ayarlamak için ayarı maxEventBatchSize değiştirin:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "maxEventBatchSize" : 100
        }
    }
}

içinde host.jsontargetUnprocessedEventThreshold tanımlandığında, aşağıdaki örnekte olduğu gibi örneği yerine her örnek için maxEventBatchSizehedef yürütme olarak kullanılır:

{
    "version": "2.0",
    "extensions": {
        "eventHubs": {
            "targetUnprocessedEventThreshold": 153
        }
    }
}

Depolama Kuyrukları

Depolama uzantısının v2.x+ için, örnek başına hedef yürütmeleri ayarlamak için ayarı batchSize değiştirinhost.json:

{
    "version": "2.0",
    "extensions": {
        "queues": {
            "batchSize": 16
        }
    }
}

Not

Ölçek verimliliği: Depolama kuyruğu uzantısı için visibilityTimeout olan iletiler, Depolama Kuyruk API'leri tarafından olay kaynağı uzunluğunda sayılır. Bu, işlev uygulamanızın fazla ölçeklendirmesine neden olabilir. Service Bus kuyruklarını zamanlanmış iletileri sorgulamayı, ölçeği genişletmeyi sınırlamayı veya çözümünüz için visibilityTimeout kullanmamayı göz önünde bulundurun.

Azure Cosmos DB

Azure Cosmos DB, işlev düzeyi özniteliğini MaxItemsPerInvocationkullanır. Bu işlev düzeyi özniteliğini ayarlama yönteminiz işlev dilinize bağlıdır.

Derlenmiş bir C# işlevi için, işlem içi C# işlevi için aşağıdaki örneklerde gösterildiği gibi tetikleyici tanımınızda ayarlayın MaxItemsPerInvocation :

namespace CosmosDBSamplesV2
{
    public static class CosmosTrigger
    {
        [FunctionName("CosmosTrigger")]
        public static void Run([CosmosDBTrigger(
            databaseName: "ToDoItems",
            collectionName: "Items",
            MaxItemsPerInvocation: 100,
            ConnectionStringSetting = "CosmosDBConnection",
            LeaseCollectionName = "leases",
            CreateLeaseCollectionIfNotExists = true)]IReadOnlyList<Document> documents,
            ILogger log)
        {
            if (documents != null && documents.Count > 0)
            {
                log.LogInformation($"Documents modified: {documents.Count}");
                log.LogInformation($"First document Id: {documents[0].Id}");
            }
        }
    }
}

Not

Azure Cosmos DB bölümlenmiş bir iş yükü olduğundan, veritabanı için hedef örnek sayısı kapsayıcınızdaki fiziksel bölüm sayısıyla eşlenir. Azure Cosmos DB ölçeklendirmesi hakkında daha fazla bilgi edinmek için bkz . fiziksel bölümler ve kira sahipliği.

Apache Kafka

Apache Kafka uzantısı işlev düzeyi özniteliğini kullanır. LagThreshold Kafka için istenen örnek sayısı, toplam tüketici gecikmesinin ayara bölünmesi LagThreshold temelinde hesaplanır. Belirli bir gecikme için gecikme eşiğinin azaltılması istenen örneklerin sayısını artırır.

Bu işlev düzeyi özniteliğini ayarlama yönteminiz işlev dilinize bağlıdır. Bu örnek eşiği olarak 100ayarlar.

Kafka Event Hubs tetikleyicisi için işlem içi C# işlevine yönelik aşağıdaki örneklerde gösterildiği gibi, derlenmiş bir C# işlevi için tetikleyici tanımınızda ayarlayın LagThreshold :

[FunctionName("KafkaTrigger")]
public static void Run(
    [KafkaTrigger("BrokerList",
                  "topic",
                  Username = "$ConnectionString",
                  Password = "%EventHubConnectionString%",
                  Protocol = BrokerProtocol.SaslSsl,
                  AuthenticationMode = BrokerAuthenticationMode.Plain,
                  ConsumerGroup = "$Default",
                  LagThreshold = 100)] KafkaEventData<string> kevent, ILogger log)
{            
    log.LogInformation($"C# Kafka trigger function processed a message: {kevent.Value}");
}

Sonraki adımlar

Daha fazla bilgi için aşağıdaki makalelere bakın: