Azure İşlevleri Eşzamanlılık

Bu makalede, Azure İşlevleri olay temelli tetikleyicilerin eşzamanlılık davranışları açıklanmaktadır. Ayrıca eşzamanlılık davranışlarını iyileştirmek için yeni bir dinamik model açıklar.

İşlevler için barındırma modeli, birden çok işlev çağrısının tek bir işlem örneğinde eşzamanlı olarak çalışmasını sağlar. Örneğin, işlev uygulamanızda ölçeği genişletilen ve birden çok örnekte çalışan üç farklı işlevinizin olduğu bir durum düşünün. Bu senaryoda, her işlev, işlev uygulamanızın üzerinde çalıştığı her VM örneğinde çağrıları işler. Tek bir örnekteki işlev çağrıları bellek, CPU ve bağlantılar gibi aynı VM işlem kaynaklarını paylaşır. Uygulamanız dinamik bir planda barındırıldığında (Tüketim veya Premium), platform, gelen olayların 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ırdığınızda, örneklerinizi el ile yapılandırmış veya otomatik ölçeklendirme şeması ayarlamış olursunuz.

Her örnekte aynı anda birden çok işlev çağrısı çalıştırabildiğinden, her işlevin herhangi bir anda kaç eşzamanlı çağrıyı işlediğinden kısıtlamak için bir yolu olması gerekir.

Statik eşzamanlılık

Tetikleyicilerin çoğu, bu tetikleyici türü için örnek başına eşzamanlılık belirtmek için kullanılan konak düzeyinde statik yapılandırma modelini destekler. Ö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, işlev uygulamanızın host.json dosyasında geçersiz kılmayı seçebileceğiniz varsayılan bir davranış vardır. Tüm çalışan örnekler için geçerli olan bu ayarlar, her örnekteki işlevleriniz için en yüksek eşzamanlılığı denetlemenize olanak tanır. Örneğin, işleviniz CPU veya yoğun kaynak kullanımlı olduğunda örneklerin sağlıklı kalmasını sağlamak için eşzamanlılığı sınırlamayı seçebilirsiniz. Benzer şekilde, işleviniz kısıtlanan bir aşağı akış hizmetine istekte bulunurken eşzamanlılığı sınırlamayı da göz önünde bulundurmanız gerekir.

Bu tür 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. Genel olarak, bir yük testi deneme ve hata işlemi aracılığıyla kabul edilebilir değerlere ulaşmanız gerekir. Belirli bir yük profili için çalışan bir değer kümesi belirleseniz 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 eşzamanlılık, varsayılan yapılandırma değerlerinin ötesindeki değerlere yükseltilebilir ve bu da daha yüksek aktarım hızı sağlar.

Dinamik eşzamanlılık yapılandırması

Dinamik eşzamanlılık, host.json dosyasındaki konak düzeyinde etkinleştirilebilir. Ne zaman, dinamik eşzamanlılığı destekleyen işlev uygulamanız tarafından kullanılan bağlama uzantıları gerektiğinde eşzamanlılığı dinamik olarak ayarlar. Dinamik eşzamanlılık ayarları, dinamik eşzamanlılığı destekleyen tetikleyiciler için 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 
        } 
    } 

truevarsayı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.

Azure Kuyrukları

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.

Kuyruklar için dinamik eşzamanlılık kullanmak için depolama uzantısının 5.x sürümünü kullanmanız gerekir.

Azure Blobları

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.

Bloblar için dinamik eşzamanlılık kullanmak için depolama uzantısının 5.x sürümünü kullanmanız gerekir.

Service Bus

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 kullanmadığınızda, 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.

Service Bus tetikleyicinizin dinamik eşzamanlılık kullanmasını sağlamak için Service Bus uzantısının 5.x sürümünü kullanmanız gerekir.

Sonraki adımlar

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