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 şu bağlama uzantıları için desteklenmektedir:
- Apache Kafka
- Azure Cosmos DB
- Azure Event Hubs
- Azure Kuyruk Depolama
- Azure Service Bus (kuyruk ve konular)
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:
Bu denklemde, olay kaynağı uzunluğu işlenmesi gereken olay sayısını ifade eder. Ö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ı, Esnek Tüketim planı ve Elastik Premium planlarında işlev uygulamaları için varsayılan olarak etkindir. Ayrılmış (App Service) planlarında çalışırken olay odaklı ölçeklendirme desteklenmez.
- Hedef tabanlı ölçeklendirme, İşlevler çalışma zamanının 4.19.0 sürümünden başlayarak varsayılan olarak etkinleştirilir.
- Hedef tabanlı ölçeklendirmeyi kullandığınızda, ölçek sınırları 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. Ayrıca işlev başına ölçeklendirme sunan bir Flex Consumption planında da çalışmanız gerekir.
- 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'ında Microsoft.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ı maxConcurrentCalls
değ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.json
targetUnprocessedEventThreshold
tanımlandığında, aşağıdaki örnekte olduğu gibi örneği yerine her örnek için maxEventBatchSize
hedef 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 Kuyruğu API'leri tarafından olay kaynağı uzunluğu olarak 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 MaxItemsPerInvocation
kullanı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 100
ayarlar.
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: