Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
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 Yazılım Geliştirme Setleri'nden (SDK) 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, örnekhost.jsonkullanılan değerleri ve varsayılanları özetler:
| 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ütme yapılandırması 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, ölçek denetleyicisinin sanal ağ tarafından güvenliği sağlanan hizmetlere erişimi olmadığından uzantılar dinamik ölçeklendirmeyi kendileri işler. Ç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 _target 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 IsBatched öznitelikleri tarafından IsSessionsEnabled belirlenen üç yürütme modeli destekler. ve IsBatched için IsSessionsEnabled 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. Dinleme haklarıyla, kuyruk veya konu uzunluğu ölçeklendirme kararlarını bilgilendirmek için kullanılamadığından ölçeklendirme 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, örnekmaxConcurrentSessionsiçin ayarı 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, örnekmaxMessageBatchSizeiçin ayarı değiştirin:
{
"version": "2.0",
"extensions": {
"serviceBus": {
"maxMessageBatchSize": 1000
}
}
}
Event Hubs
Azure Event Hubs için Azure İşlevleri, olay hub'ında geçerli örnek sayıları listesinde yer alan 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 maxEventBatchSizeşeklindedirmaxBatchSize. Ancak, hedef tabanlı ölçeklendirmede ince ayar yapmayı seçerseniz, toplu iş ayarlarını değiştirmeden örnektargetUnprocessedEventThresholdiçin geçersiz kılan ayrı bir parametre 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.
Uyarı
batchCheckpointFrequency tarafından desteklenen barındırma planları için 1'in üzerinde ayarlanması yanlış ölçeklendirme davranışına neden olabilir. Platform, işlenmemiş olayları "geçerli konum - denetim noktasılı konum" olarak hesaplar. Bu, toplu işler işlendiğinde ancak henüz denetlenmediğinde hatalı olarak işlenmemiş iletileri gösterebilir ve ileti kalmadığında uygun ölçeklendirmeyi önler.
Ölçeklendirme Davranışı ve Kararlılığı
Event Hubs için sık sık ölçeği daraltma ve ölçeği genişletme işlemleri bölüm yeniden dengelemeyi tetikleyebilir, bu da işlem gecikmelerine ve gecikme süresinin artmasına neden olur. Bunu azaltmak için:
- Platform, ölçeklendirme kararlarına yol göstermek için önceden tanımlanmış bir geçerli çalışan sayısı listesi kullanır.
- Platform, ölçeklendirmenin kararlı ve kasıtlı olmasını sağlayarak bölüm atamalarında kesintiye neden olan değişiklikleri önler.
- İstenen çalışan sayısı geçerli listede yoksa (örneğin, 17), sistem otomatik olarak bir sonraki en büyük geçerli sayıyı seçer ve bu durumda 32 olur. Ayrıca, hızlı yinelenen ölçeklendirmeyi önlemek için, ölçek genişletme istekleri son ölçeklendirmeden sonra 3 dakika boyunca kısıtlanmıştır. Bu gecikme, gereksiz yeniden dengelemeyi azaltmaya yardımcı olur ve aktarım hızı verimliliğinin korunmasına katkıda bulunur.
Event Hubs için Geçerli Örnek Sayıları
Her Event Hubs bölüm sayısı için, en iyi dağıtımı ve verimli ölçeklendirmeyi sağlamak için ilgili geçerli örnek sayıları listesini hesaplarız. Bu sayımlar bölümleme ve eşzamanlılık gereksinimleriyle uyumlu olacak şekilde seçilir:
| Partisyon Sayısı | Geçerli Örnek Sayısı |
|---|---|
| 1 | [1] |
| 2 | [1, 2] |
| 4 | [1, 2, 4] |
| 8 | [1, 2, 3, 4, 8] |
| 10 | [1, 2, 3, 4, 5, 10] |
| 16 | [1, 2, 3, 4, 5, 6, 8, 16] |
| 32 | [1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 16, 32] |
Bu önceden tanımlanmış sayılar, örneklerin bölümler arasında mümkün olduğunca eşit dağıtılmasını sağlamaya yardımcı olur ve boşta veya aşırı yüklenmiş çalışanları en aza indirir.
Not
Not: Premium ve Özel olay hub'ı katmanları için 32'yi aşan bölüm sayısı, daha büyük geçerli örnek kümeleri sağlayabilir. Bu katmanlar daha yüksek aktarım hızını ve ölçeklenebilirliği destekler ve olay hub'ı bölümlerini örnekler arasında eşit olarak dağıtmak için geçerli çalışan sayısı listesi buna göre genişletilir. Ayrıca Event Hubs bölümlenmiş bir iş yükü olduğundan, olay hub'ınızdaki bölüm sayısı maksimum hedef örnek sayısı sınırıdır.
Event Hubs ayarları
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, örnekmaxEventBatchSizeiçin ayarı 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 örnekkullanılır:
{
"version": "2.0",
"extensions": {
"eventHubs": {
"targetUnprocessedEventThreshold": 153
}
}
}
Depolama Kuyrukları
Depolama uzantısının v2.x+ için, örnekhost.jsoniçin ayarı batchSize değiştirin:
{
"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 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 kapsayıcınızdaki fiziksel bölüm sayısı hedef örnek sayısı sınırıdır. 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: