Azure İşlevleri Eşzamanlılık
Bu makalede, Azure İşlevleri olay temelli tetikleyicilerin eşzamanlılık davranışları açıklanmaktadır. Ayrıca statik ve dinamik eşzamanlılık modellerini karşılaştırır.
Önemli
Flex Consumption planı şu anda önizleme aşamasındadır.
İşlevler'de, belirli bir işlevin birden çok yürütme işleminin tek bir işlem örneğinde eşzamanlı olarak çalıştırılmasını sağlayabilirsiniz. Örneğin, işlev uygulamanızda artan yükü işlemek için ölçeği birden çok örneğe genişletilen üç farklı işlevinizin olduğu bir durum düşünün. Bu senaryoda, her işlev üç örnekte de tek tek çağrılara yanıt olarak yürütülür ve belirli bir örnek aynı türde birden çok çağrıyı işleyebilir. Tek bir örnekteki işlev yürütmelerinin aynı bellek, CPU ve bağlantı kaynaklarını paylaştığını unutmayın. Her örnekte eşzamanlı olarak birden çok işlev yürütmesi çalıştırabildiğinden, her işlevin eşzamanlı yürütme sayısını yönetmek için bir yolu olması gerekir.
Uygulamanız dinamik bir ölçek planında barındırıldığında (Tüketim, Esnek Tüketim veya Premium), konak, gelen olay sayısına göre işlev uygulaması örneklerinin sayısını artırır veya azaltır. Daha fazla bilgi edinmek için bkz . Olay Temelli Ölçeklendirme. İşlevlerinizi Ayrılmış (App Service) planında barındırırken, örneklerinizi el ile yapılandırmanız veya bir otomatik ölçeklendirme düzeni ayarlamanız gerekir.
Bu ölçek kararları, belirli bir örnekteki yürütmelerin eşzamanlılığından da doğrudan etkilenir. Dinamik ölçek planındaki bir uygulama eşzamanlılık sınırına ulaştığında, gelen talebe ayak uydurmak için ölçeklendirmesi gerekebilir.
İşlevler eşzamanlılığı yönetmenin iki ana yolunu sağlar:
Statik eşzamanlılık: Tek tek tetikleyicilere özgü eşzamanlılık için konak düzeyi sınırları yapılandırabilirsiniz. Bu, İşlevler için varsayılan eşzamanlılık davranışıdır.
Dinamik eşzamanlılık: Belirli tetikleyici türleri için İşlevler ana bilgisayarı, uygulamanızda bu tetikleyici için en iyi eşzamanlılık düzeyini otomatik olarak belirleyebilir. Bu eşzamanlılık modelini kabul etmeniz gerekir.
Statik eşzamanlılık
Çoğu tetikleyici varsayılan olarak konak düzeyinde statik yapılandırma modelini destekler. Bu modelde her tetikleyici türünün örnek başına eşzamanlılık sınırı vardır. Ancak çoğu tetikleyici için bu tetikleyici türü için belirli bir örnek başına eşzamanlılık da isteyebilirsiniz. Örneğin, Service Bus tetikleyicisi host.json dosyasında hem bir MaxConcurrentCalls
hem de bir MaxConcurrentSessions
ayar sağlar. Bu ayarlar birlikte her işlevin her örnekte eşzamanlı olarak işlediği ileti sayısı üst sınırını denetler. Diğer tetikleyici türleri, örnekler arasında çağrıları yük dengelemeye yönelik yerleşik mekanizmalara sahiptir. Örneğin, Event Hubs ve Azure Cosmos DB'nin her ikisi de bölüm tabanlı bir düzen kullanır.
Eşzamanlılık yapılandırmasını destekleyen tetikleyici türleri için, seçtiğiniz ayarlar çalışan tüm örneklere uygulanır. Bu, her örnekteki işlevleriniz için en yüksek eşzamanlılığı denetlemenize olanak tanır. Örneğin, işleviniz CPU veya kaynak yoğunluklu olduğunda, örneklerin iyi durumda kalmasını sağlamak için eşzamanlılığı sınırlamayı ve artan yükleri işlemek için ölçeklendirmeyi tercih edebilirsiniz. Benzer şekilde, işleviniz kısıtlanan bir aşağı akış hizmetine istekte bulunurken, aşağı akış hizmetinin aşırı yüklenmesini önlemek için eşzamanlılığı sınırlamayı da göz önünde bulundurmanız gerekir.
HTTP tetikleyici eşzamanlılığı
Yalnızca Flex Consumption planı (önizleme) için geçerlidir
Esnek Tüketim planı, tüm HTTP tetikleyici işlevlerini grup olarak birlikte ölçeklendirir. Daha fazla bilgi için bkz . İşlev başına ölçeklendirme. Aşağıdaki tablo, yapılandırılmış örnek bellek boyutuna göre belirli bir örnekteKI HTTP tetikleyicileri için varsayılan eşzamanlılık ayarını gösterir.
Örnek boyutu (MB) | Varsayılan eşzamanlılık* |
---|---|
2048 |
16 |
4096 |
32 |
*Python uygulamaları için, tüm örnek boyutları için varsayılan HTTP tetikleyici eşzamanlılığı şeklindedir 1
.
Bu varsayılanlar çoğu durumda düzgün çalışmalıdır ve bunlarla başlarsınız. Belirli sayıda HTTP isteğinde HTTP eşzamanlılık değerinin artırılmasının HTTP isteklerini işlemek için gereken örnek sayısını azalttığını düşünün. Benzer şekilde HTTP eşzamanlılık değerini azaltmak için aynı yükü işlemek için daha fazla örnek gerekir.
HTTP eşzamanlılığında ince ayar yapmanız gerekiyorsa, bunu Azure CLI'yı kullanarak yapabilirsiniz. Daha fazla bilgi için bkz . HTTP eşzamanlılık sınırlarını ayarlama.
Önceki tablodaki varsayılan eşzamanlılık değerleri yalnızca kendi HTTP eşzamanlılık ayarınızı ayarlamadığınızda geçerlidir. Açıkça bir HTTP eşzamanlılık ayarı ayarlamadığınızda, örnek boyutunu değiştirdiğinizde tabloda gösterildiği gibi varsayılan eşzamanlılık artar. Özel olarak bir HTTP eşzamanlılık değeri ayarladıktan sonra, örnek boyutundaki değişikliklere rağmen bu değer korunur.
En uygun statik eşzamanlılığı belirleme
Statik eşzamanlılık yapılandırmaları, işlevlerinizi azaltma gibi belirli tetikleyici davranışlarını denetlemenizi sağlarken, bu ayarlar için en uygun değerleri belirlemek zor olabilir. Genellikle, yük testi yinelemeli bir işlemle kabul edilebilir değerlere ulaşmanız gerekir. Belirli bir yük profili için çalışan bir değer kümesi belirledikten sonra bile, bağlı hizmetlerinizden gelen olayların sayısı günden güne değişebilir. Bu değişkenlik, uygulamanızın çoğu zaman en iyi olmayan değerlerle çalışabileceği anlamına gelir. Örneğin, işlev uygulamanız özellikle haftanın son gününde zorlu ileti yüklerini işleyerek eşzamanlılığı azaltmanızı gerektirebilir. Ancak, haftanın geri kalanında ileti yükleri daha basittir, bu da haftanın geri kalanında daha yüksek bir eşzamanlılık düzeyi kullanabileceğiniz anlamına gelir.
İdeal olarak, sistemin örneklerin her örneği iyi durumda ve gecikme sürelerini düşük tutarken olabildiğince çok işi işlemesine izin vermesini istiyoruz. Dinamik eşzamanlılık bunu yapmak için tasarlanmıştır.
Dinamik eşzamanlılık
İşlevler artık aynı planda çalışan tüm işlev uygulamaları için eşzamanlılık yapılandırmayı basitleştiren bir dinamik eşzamanlılık modeli sağlar.
Not
Dinamik eşzamanlılık şu anda yalnızca Azure Blob, Azure Kuyruğu ve Service Bus tetikleyicileri için desteklenir ve aşağıdaki uzantı desteği bölümünde listelenen sürümleri kullanmanızı gerektirir.
Sosyal haklar
Dinamik eşzamanlılığın kullanılması aşağıdaki avantajları sağlar:
- Basitleştirilmiş yapılandırma: Artık tetikleyici başına eşzamanlılık ayarlarını el ile belirlemeniz gerekmez. Sistem, zaman içinde iş yükünüz için en uygun değerleri öğrenir.
- Dinamik ayarlamalar: Eşzamanlılık, sistemin zaman içinde değişen yük desenlerine uyum sağlamasına olanak tanıyan gerçek zamanlı olarak dinamik olarak yukarı veya aşağı ayarlanır.
- Örnek sistem durumu koruması: Çalışma zamanı eşzamanlılığı bir işlev uygulaması örneğinin rahatça işleyebileceği düzeylere sınırlar. Bu, olması gerekenden daha fazla iş yaparak uygulamanın kendisini aşırı yüklemesini engeller.
- geliştirilmiş aktarım hızı: Tek tek örnekler hızlı bir şekilde işleyebileceğinden daha fazla iş çekmediğinden genel aktarım hızı geliştirildi. Bu, çalışmaların örnekler arasında daha etkili bir şekilde yük dengelemesini sağlar. Daha yüksek yükleri işleyebilen işlevler için, varsayılan yapılandırmanın üzerindeki değerlere eşzamanlılık artırılarak daha yüksek aktarım hızı elde edilebilir.
Dinamik eşzamanlılık yapılandırması
Dinamik eşzamanlılık, host.json dosyasındaki konak düzeyinde etkinleştirilebilir. Etkinleştirildiğinde, bu özelliği destekleyen tüm bağlama uzantılarının eşzamanlılık düzeyleri gerektiğinde otomatik olarak ayarlanır. Bu durumlarda, dinamik eşzamanlılık ayarları el ile yapılandırılmış eşzamanlılık ayarlarını geçersiz kılar.
Varsayılan olarak, dinamik eşzamanlılık devre dışıdır. Dinamik eşzamanlılık etkinleştirildiğinde, eşzamanlılık her işlev için 1'de başlar ve konak tarafından belirlenen en uygun değere ayarlanır.
host.json dosyanıza aşağıdaki ayarları ekleyerek işlev uygulamanızda dinamik eşzamanlılığı etkinleştirebilirsiniz:
{
"version": "2.0",
"concurrency": {
"dynamicConcurrencyEnabled": true,
"snapshotPersistenceEnabled": true
}
}
true
varsayılan SnapshotPersistenceEnabled
olan olduğunda, öğrenilen eşzamanlılık değerleri düzenli aralıklarla depolamada kalıcı hale geldiğinden, yeni örnekler 1'den başlayıp öğrenmeyi yeniden yapmak zorunda kalmak yerine bu değerlerden başlar.
Eşzamanlılık yöneticisi
Arka planda dinamik eşzamanlılık etkinleştirildiğinde arka planda çalışan bir eşzamanlılık yöneticisi işlemi vardır. Bu yönetici, CPU ve iş parçacığı kullanımı gibi örnek durumu ölçümlerini sürekli izler ve gerektiğinde azaltmaları değiştirir. Bir veya daha fazla azaltma etkinleştirildiğinde, konak yeniden iyi duruma gelene kadar işlev eşzamanlılığı azaltılır. Azaltmalar devre dışı bırakıldığında eşzamanlılığın artmasına izin verilir. Bu kısıtlamalara göre gerektiğinde eşzamanlılığı akıllı bir şekilde ayarlamak için çeşitli buluşsal yöntemler kullanılır. Zaman içinde, her işlev için eşzamanlılık belirli bir düzeye sabitlenir.
Eşzamanlılık düzeyleri her işlev için yönetilir. Bu nedenle sistem, düşük düzeyde eşzamanlılık gerektiren yoğun kaynak kullanan işlevler ile daha yüksek eşzamanlılığı işleyebilen daha basit işlevler arasında denge sağlar. Her işlev için eşzamanlılık dengesi, işlev uygulaması örneğinin genel durumunun korunmasına yardımcı olur.
Dinamik eşzamanlılık etkinleştirildiğinde, günlüklerinizde dinamik eşzamanlılık kararları görürsünüz. Örneğin, çeşitli azaltmalar etkinleştirildiğinde ve her işlev için eşzamanlılık ayarlandığında veya azaltıldığında günlükleri görürsünüz. Bu günlükler, izlemeler tablosundaki Host.Concurrency günlük kategorisine yazılır.
Uzantı desteği
Dinamik eşzamanlılık, konak düzeyinde bir işlev uygulaması için etkinleştirilir ve dinamik eşzamanlılığı destekleyen tüm uzantılar bu modda çalışır. Dinamik eşzamanlılık, konak ve tek tek tetikleyici uzantıları arasında işbirliği gerektirir. Yalnızca aşağıdaki uzantıların listelenen sürümleri dinamik eşzamanlılığı destekler.
Dahili | Sürüm | Açıklama |
---|---|---|
Kuyruk depolama | sürüm 5.x (Depolama uzantısı) | Azure Kuyruk depolama tetikleyicisinin kendi ileti yoklama döngüsü vardır. Statik yapılandırma kullanılırken eşzamanlılık yapılandırma seçeneklerine BatchSize /NewBatchThreshold tabidir. Dinamik eşzamanlılık kullanılırken, bu yapılandırma değerleri yoksayılır. Dinamik eşzamanlılık ileti döngüsüyle tümleştirildiğinden, yineleme başına getirilen ileti sayısı dinamik olarak ayarlanır. Azaltmalar etkinleştirildiğinde (konak aşırı yüklendiğinde), azaltmalar devre dışı bırakılana kadar ileti işleme duraklatılır. Azaltmalar devre dışı bırakıldığında eşzamanlılık artar. |
Blob depolama | sürüm 5.x (Depolama uzantısı) | Dahili olarak Azure Blob depolama tetikleyicisi, Azure Kuyruk Tetikleyicisi'nin kullandığı altyapıyı kullanır. Yeni/güncelleştirilmiş blobların işlenmesi gerektiğinde, iletiler platform tarafından yönetilen bir denetim kuyruğuna yazılır ve bu kuyruk QueueTrigger için kullanılan mantık kullanılarak işlenir. Dinamik eşzamanlılık etkinleştirildiğinde, bu denetim kuyruğunun işlenmesi için eşzamanlılık dinamik olarak yönetilir. |
Service Bus | sürüm 5.x | Service Bus tetikleyicisi şu anda üç yürütme modeli destekler. Dinamik eşzamanlılık bu yürütme modellerini aşağıdaki gibi etkiler: • Tek dağıtım konusu/kuyruk işleme: İşlevinizin her çağrısı tek bir iletiyi işler. Statik yapılandırma kullanılırken eşzamanlılık yapılandırma seçeneği tarafından MaxConcurrentCalls yönetilir. Dinamik eşzamanlılık kullanılırken, bu yapılandırma değeri yoksayılır ve eşzamanlılık dinamik olarak ayarlanır.• Oturum tabanlı tek dağıtım konusu/kuyruk işleme: İşlevinizin her çağrısı tek bir iletiyi işler. Konunuzun/kuyruğunuzun etkin oturum sayısına bağlı olarak, her örnek bir veya daha fazla oturum kiralar. Her oturumdaki iletiler, bir oturumda sıralamayı garanti etmek için seri olarak işlenir. Dinamik eşzamanlılık kullanılmadığında, eşzamanlılık ayarına MaxConcurrentSessions tabidir. Dinamik eşzamanlılık etkinleştirildiğinde yoksayılır MaxConcurrentSessions ve her örneğin işlemekte olduğu oturum sayısı dinamik olarak ayarlanır.• Toplu işleme: İşlevinizin her çağrısı, ayara MaxMessageCount göre yönetilen bir dizi iletiyi işler. Toplu çağırmalar seri olduğundan, toplu olarak tetiklenen işlevinizin eşzamanlılığı her zaman birdir ve dinamik eşzamanlılık geçerli değildir. |
Sonraki adımlar
Daha fazla bilgi edinmek için aşağıdaki kaynaklara bakın: