Aracılığıyla paylaş


Azure İşlevleri Eşzamanlılık

Azure İşlevleri'nde tek bir işlev uygulaması örneği, birden çok olayın eşzamanlı olarak işlenmesini sağlar. Bunlar aynı işlem örneğinde çalıştığından bellek, CPU ve bağlantı kaynaklarını paylaşır. Belirli barındırma planlarında, belirli bir örneğe yönelik yüksek talep, İşlevler ana bilgisayarının artan yükü işlemek için otomatik olarak yeni örnekler oluşturmasına neden olur. Bu dinamik ölçek planlarında eşzamanlılık ve ölçeklendirme davranışları arasında bir denge vardır. İşlevler, uygulamanızın çalışma şekli üzerinde daha fazla denetim sağlamak için eş zamanlı yürütme sayısını yönetmenize yönelik bir yol sağlar.

İşlevler eşzamanlılığı yönetmenin iki ana yolunu sağlar:

  • Sabit örnek eşzamanlılık: Belirli tetikleyicilere özgü eşzamanlılık için konak düzeyinde sınırlar yapılandırabilirsiniz. Bu model, İşlevler için varsayılan eşzamanlılık davranışıdır.
  • Dinamik eşzamanlılık: İşlevler ana bilgisayarı, belirli tetikleyici türleri için işlev 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.

Bu makalede İşlevler'deki olay temelli tetikleyicilerin eşzamanlılık davranışları ve bu davranışların dinamik planlardaki ölçeklendirmeyi nasıl etkilediği açıklanmaktadır. Ayrıca örnek başına sabit ve dinamik eşzamanlılık modellerini karşılaştırır.

Ölçeklendirme ve eşzamanlılık karşılaştırması

Olay tabanlı tetikleyiciler kullanan veya HTTP isteklerine yanıt veren işlevler için, talebin yüksek olduğu dönemlerde eşzamanlı yürütme sınırlarına hızla ulaşabilirsiniz. Bu tür dönemlerde, gelen isteklerin işlenmesinde birikme oluşmasını önlemek için örnekler ekleyerek işlev uygulaması ölçeklendirilmelidir. Uygulamanızı ölçeklendirme şeklimiz barındırma planınıza bağlıdır:

Ölçek türü Barındırma planları Açıklama
Dinamik (olay odaklı) ölçeklendirme Tüketim
Esnek Tüketim
Premium
Dinamik ölçek planında konak, gelen olayların sayısına göre işlev uygulaması örneklerinin sayısını büyütür veya küçültür. Daha fazla bilgi için bkz. Azure İşlevleri'nde olay temelli ölçeklendirme.
El ile ölçeklendirme Özel (App Service) planları İşlev uygulamanızı Ayrılmış planda barındırırken, daha yüksek yük dönemlerinde örneklerinizi el ile yapılandırmanız veya otomatik ölçeklendirme düzeni ayarlamanız gerekir.

Herhangi bir ölçeklendirme gerçekleşmeden önce işlev uygulamanız tek bir örnekte aynı türdeki birden çok çağrıyı işleyerek yük artışlarını işlemeye çalışır. Sonuç olarak, belirli bir örnekteki bu eşzamanlı yürütmeler ölçek kararlarını doğrudan etkiler. Örneğin, 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.

Uygulamanızda elde etmeye çalıştığınız ölçek ve eşzamanlılık dengesi, performans sorunlarının nerede ortaya çıkabileceğine bağlıdır: işlemede (YOĞUN CPU kullanan işlem sınırlamaları) veya aşağı akış hizmetinde (G/Ç tabanlı sınırlamalar).

Örnek başına eşzamanlılık sorunları düzeltildi

Çoğu tetikleyici varsayılan olarak hedef tabanlı ölçeklendirme yoluyla örnek başına sabit eşzamanlılık 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.

Bu tetikleyici türü için belirli bir örnek başına eşzamanlılık ayarlayarak çoğu tetikleyici için eşzamanlılık varsayılan değerlerini geçersiz kılabilirsiniz. Birçok tetikleyici için ,host.json dosyasında eşzamanlılık ayarlarını yapılandırabilirsiniz. Örneğin Azure Service Bus tetikleyicisi, MaxConcurrentCalls içinde hem bir MaxConcurrentSessions hem de bir ayar sağlar. Bu ayarlar birlikte çalışarak her işlev uygulamasının her örnekte eşzamanlı olarak işlediği en fazla ileti sayısını denetler.

Apache Kafka veya Azure Cosmos DB tetikleyicisi kullandığınızda olduğu gibi bazı hedef tabanlı ölçeklendirme senaryolarında eşzamanlılık yapılandırması host.json dosyasında değil işlev bildirimindedir. Diğer tetikleyici türleri, örnekler arasında çağrıların yük dengelemesini sağlamak için yerleşik mekanizmalara sahiptir. Örneğin, Azure 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 eşzamanlılık ayarları çalışan tüm örneklere uygulanır. Bu şekilde, her örnekteki işlevleriniz için en yüksek eşzamanlılığı denetleyebilirsiniz. Örneğin, işleviniz YOĞUN CPU veya kaynak yoğunluklu olduğunda örneklerin iyi durumda kalmasını sağlamak için eşzamanlılığı sınırlamayı seçebilirsiniz. Bu durumda, artan yükleri işlemek için ölçeklendirmeye güvenebilirsiniz. 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ı için geçerlidir

HTTP tetikleyici eşzamanlılığı, örnek başına sabit eşzamanlılığın özel bir türüdür. HTTP tetikleyici eşzamanlılığında varsayılan eşzamanlılık da örnek boyutuna bağlıdır.

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*
512 4
2,048 16
4,096 32

*Python uygulamalarında, tüm örnek boyutları varsayılan olarak bir HTTP tetikleyici eşzamanlılık düzeyi kullanır.

Bu varsayılan değerler çoğu durumda düzgün çalışmalıdır ve bunlarla başlayabilirsiniz. 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 Azure CLI'yı kullanarak bunu 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 uygulanır. 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.

Örnek başına en uygun sabit eşzamanlılığı belirleme

Her bir örnek için eşzamanlılık yapılandırmaları, işlevlerinizi kısıtlama gibi belirli tetikleyici davranışlarını denetlemenizi sağlar. Ancak 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 en iyi olmayan değerlerle çalışmasına neden olabilir. Örneğin, işlev uygulamanız 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 hafif olabilir, bu da haftanın geri kalanında daha yüksek bir eşzamanlılık düzeyi kullanabileceğiniz anlamına gelir.

İdeal olarak, sistem örneklerin sağlıklı kalmasını sağlarken ve gecikmeleri düşük tutarken mümkün olduğunca çok işi işlemelerine izin vermelidir. Dinamik eşzamanlılık bu amaç için tasarlanmıştır.

Dinamik eşzamanlılık

İşlevler, aynı planda çalışan tüm işlev uygulamaları için eşzamanlılık yapılandırmayı basitleştiren dinamik bir eşzamanlılık modeli sağlar.

Not

Dinamik eşzamanlılık şu anda yalnızca Azure Blob Depolama, Azure Kuyruk Depolama ve Service Bus tetikleyicileri için desteklenmektedir. Ayrıca, bu makalenin devamında Uzantı desteği bölümünde listelenen uzantı sürümlerini kullanmanız gerekir.

Sosyal haklar

Dinamik eşzamanlılık 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 sınırlar, olması gerekenden daha fazla iş yaparak uygulamanın kendisini aşırı yüklemesini engeller.
  • Geliştirilmiş throughput: Bireysel örnekler hızlı bir şekilde işleyebileceklerinden daha fazla çalışma yükü çekmediği için genel throughput artırılır. Sonuç olarak, çalışma örnekler arasında daha etkili bir şekilde yük dengelemesi yapılır. 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ığı host.json dosyasındaki konak düzeyinde açabilirsiniz. Bu özellik açıldığında, bu özelliği destekleyen 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 kapalıdır. Dinamik eşzamanlılığı açtığınızda, her işlev için eşzamanlılık bir seviyede başlar. Eşzamanlılık düzeyi, konağın belirlediği en uygun değere ayarlanır.

host.json dosyanıza aşağıdaki ayarları ekleyerek işlev uygulamanızda dinamik eşzamanlılığı açabilirsiniz:

    { 
        "version": "2.0", 
        "concurrency": { 
            "dynamicConcurrencyEnabled": true, 
            "snapshotPersistenceEnabled": true 
        } 
    } 

snapshotPersistenceEnabled varsayılan true değeri olduğunda, öğrenilen eşzamanlılık değerleri düzenli aralıklarla depolamada kalıcı hale getirilir. Yeni örnekler, bir düzeyden 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 bir eşzamanlılık yöneticisi işlemi çalıştırılı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 kısıtlama etkinleştirildiğinde, sunucu tekrar sağlıklı duruma gelene kadar işlev eşzamanlılığı azaltılır. Hız sınırlamaları kapatıldığında eşzamanlılık artabilir. 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. En uygun eşzamanlılık değerini belirlemek zaman alabileceğinden, dinamik eşzamanlılığı yalnızca optimum olmayan bir değer çözümünüz için başlangıçta veya belirli bir süre hareketsizlikten sonra kabul edilebilir ise kullanın.

Eşzamanlılık düzeyleri her işlev için yönetilir. Özellikle, 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 açık olduğunda, günlüklerinizde dinamik eşzamanlılık kararları bulursunuz. Örneğin, çeşitli kısıtlamalar açıldığında ve her işlev için eşzamanlı işlem artırıldığında veya azaltıldığında, günlük girdileri eklenir. Bu günlükler Host.Concurrency günlük kategorisinde traces tablosuna 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ı) Kuyruk Depolama tetikleyicisinin kendi ileti yoklama döngüsü vardır. Örnek başına sabit bir yapılandırma kullandığınızda, BatchSize ve NewBatchThreshold yapılandırma seçenekleri eşzamanlılığı yönetir. Dinamik eşzamanlılık kullandığınızda, bu yapılandırma değerleri yoksayılır. Dinamik eşzamanlılık ileti döngüsüyle tümleştirilir, bu nedenle yineleme başına alınan ileti sayısı dinamik olarak ayarlanır. Kısıtlamalar etkinleştirildiğinde, sunucu aşırı yüklenir. kısıtlamalar devre dışı bırakılana kadar ileti işleme duraklatılır. Kısıtlamalar devre dışı bırakıldığında eşzamanlılık artar.
Blob Depolama Sürüm 5.x (Depolama uzantısı) Blob Depolama tetikleyicisi dahili olarak Kuyruk Depolama tetikleyicisinin kullandığı altyapıyı kullanır. Yeni veya güncelleştirilmiş blobların işlenmesi gerektiğinde, iletiler platform tarafından yönetilen bir denetim kuyruğuna yazılır. Bu kuyruk, Kuyruk Depolama tetikleyicisi için kullanılan mantık kullanılarak işlenir. Dinamik eşzamanlılık açık olduğunda, bu denetim kuyruğunun işlenmesi için eşzamanlılık dinamik olarak yönetilir.
Servis Veri Yolu 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 yollarla etkiler:
  • Tek dağıtım konusu/kuyruk işleme: İşlevinizin her çağrısı tek bir iletiyi işler. Örnek başına sabit bir yapılandırma kullandığınızda, MaxConcurrentCalls yapılandırma seçeneği eşzamanlılığı yönetir. Dinamik eşzamanlılık kullandığınızda, 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 veya kuyruğunuzun etkin oturum sayısına bağlı olarak, her örneklem 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 kullanmadığınızda, MaxConcurrentSessions ayar eşzamanlılığı yönetir. Dinamik eşzamanlılık etkinleştirildiğinde, MaxConcurrentSessions değeri göz ardı edilir ve her örneğin işlediği 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ğrılar seri olduğundan, toplu olarak tetiklenen işlevinizin eşzamanlılığı her zaman bir olur 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: