Batch havuzundaki işlem düğümlerini otomatik olarak ölçeklendirmek için formül oluşturma

Azure Batch, havuzları sizin tanımladığınız parametrelere göre otomatik olarak ölçeklendirerek size zaman ve para tasarrufu sağlayabilir. Otomatik ölçeklendirme ile Batch, görev talebi arttıkça havuza dinamik olarak düğümler ekler ve görev talepleri azaldıkça işlem düğümlerini kaldırır.

İşlem düğümleri havuzunda otomatik ölçeklendirmeyi etkinleştirmek için, havuzu tanımladığınız bir otomatik ölçeklendirme formülüyle ilişkilendirirsiniz. Batch hizmeti, iş yükünüzü yürütmek için kaç düğüm gerektiğini belirlemek için otomatik ölçeklendirme formülünü kullanır. Bu düğümler ayrılmış düğümler veya Azure Spot düğümleri olabilir. Batch, hizmet ölçümleri verilerini düzenli aralıklarla inceler ve formülünüzü temel alarak ve tanımladığınız bir aralıkta havuzdaki düğüm sayısını ayarlamak için kullanır.

Havuz oluştururken otomatik ölçeklendirmeyi etkinleştirebilir veya mevcut bir havuza uygulayabilirsiniz. Batch, formüllerinizi havuzlara atamadan önce değerlendirmenize ve otomatik ölçeklendirme çalıştırmalarının durumunu izlemenize olanak tanır. Otomatik ölçeklendirme ile bir havuzu yapılandırdıktan sonra formülde daha sonra değişiklik yapabilirsiniz.

Önemli

Batch hesabı oluşturduğunuzda havuzların Batch hizmeti aboneliğinde mi (varsayılan) yoksa kullanıcı aboneliğinizde mi ayrıldığını belirleyen havuz ayırma modunu belirtebilirsiniz. Batch hesabınızı varsayılan Batch hizmeti yapılandırmasıyla oluşturduysanız, hesabınız işlem için kullanılabilecek maksimum çekirdek sayısıyla sınırlıdır. Batch hizmeti işlem düğümlerini yalnızca bu çekirdek sınırına kadar ölçeklendirir. Bu nedenle, Batch hizmeti otomatik ölçeklendirme formülü tarafından belirtilen hedef işlem düğümü sayısına ulaşamayabilir. Hesap kotalarınızı görüntülemeyi ve artırmayı öğrenmek için bkz . Azure Batch hizmeti için kotalar ve sınırlar.

Hesabınızı kullanıcı aboneliği moduyla oluşturduysanız, hesabınız aboneliğin çekirdek kotasını paylaşır. Daha fazla bilgi için Azure aboneliği ve hizmet limitleri, kotalar ve kısıtlamalar sayfasındaki Sanal Makine limitleri bölümüne bakın.

Formülleri otomatik ölçeklendirme

Otomatik ölçeklendirme formülü, bir veya daha fazla deyim içeren, tanımladığınız bir dize değeridir. Otomatik ölçeklendirme formülü, havuzun autoScaleFormula öğesine (Batch REST) veya CloudPool.AutoScaleFormula özelliğine (Batch .NET) atanır. Batch hizmeti, bir sonraki işleme aralığı için havuzdaki işlem düğümlerinin hedef sayısını belirlemek için formülünüzü kullanır. Formül dizesi 8 KB'yi aşamaz, noktalı virgülle ayrılmış en çok 100 deyim içerebilir ve satır sonları ile açıklamaları içerebilir.

Otomatik ölçeklendirme formüllerini Batch otomatik ölçeklendirme "dili" olarak düşünebilirsiniz. Formül deyimleri, hem Batch hizmeti tarafından tanımlanan hizmet tanımlı değişkenleri hem de kullanıcı tanımlı değişkenleri içerebilen serbest biçimli ifadelerdir. Formüller yerleşik türler, işleçler ve işlevler kullanarak bu değerler üzerinde çeşitli işlemler gerçekleştirebilir. Örneğin, bir deyim aşağıdaki formu alabilir:

$myNewVariable = function($ServiceDefinedVariable, $myCustomVariable);

Formüller genellikle önceki deyimlerde elde edilen değerler üzerinde işlem gerçekleştiren birden çok deyim içerir. Örneğin, önce için variable1bir değer alırsınız, ardından doldurmak için bir işleve variable2geçirirsiniz:

$variable1 = function1($ServiceDefinedVariable);
$variable2 = function2($OtherServiceDefinedVariable, $variable1);

Hedef sayıda işlem düğümüne ulaşmak için bu deyimleri otomatik ölçeklendirme formülünüzü ekleyin. Ayrılmış düğümlerin ve Spot düğümlerin her birinin kendi hedef ayarları vardır. Otomatik ölçeklendirme formülü ayrılmış düğümler için bir hedef değer, Spot düğümler için hedef değer veya her ikisini de içerebilir.

Hedef düğüm sayısı daha yüksek, daha düşük veya havuzdaki bu türdeki geçerli düğüm sayısıyla aynı olabilir. Batch, belirli otomatik ölçeklendirme aralıklarında havuzun otomatik ölçeklendirme formülünü değerlendirir. Batch, havuzdaki her düğüm türünün hedef sayısını, değerlendirme sırasında otomatik ölçeklendirme formülünüzün belirttiği sayıya ayarlar.

Örnek otomatik ölçeklendirme formülleri

Aşağıdaki örneklerde, çoğu senaryoda çalışacak şekilde ayarlanabilen iki otomatik ölçeklendirme formülü gösterilmektedir. startingNumberOfVMs Değişkenler ve maxNumberofVMs örnek formüller gereksinimlerinize göre ayarlanabilir.

Bekleyen görevler

Bu otomatik ölçeklendirme formülüyle havuz başlangıçta tek bir VM ile oluşturulur. Ölçüm, $PendingTasks çalışan veya kuyruğa alınan görev sayısını tanımlar. Formül, son 180 saniye içinde bekleyen görevlerin ortalama sayısını bulur ve değişkeni buna göre ayarlar $TargetDedicatedNodes . Formül, hedef ayrılmış düğüm sayısının 25 VM'yi asla aşmamasını sağlar. Yeni görevler gönderildikçe havuz otomatik olarak büyür. Görevler tamamlandıktan sonra VM'ler serbest kalır ve otomatik ölçeklendirme formülü havuzu küçültür.

Bu formül ayrılmış düğümleri ölçeklendirir, ancak Spot düğümlerini ölçeklendirmek için de değiştirilebilir.

startingNumberOfVMs = 1;
maxNumberofVMs = 25;
pendingTaskSamplePercent = $PendingTasks.GetSamplePercent(180 * TimeInterval_Second);
pendingTaskSamples = pendingTaskSamplePercent < 70 ? startingNumberOfVMs : avg($PendingTasks.GetSample(180 * TimeInterval_Second));
$TargetDedicatedNodes=min(maxNumberofVMs, pendingTaskSamples);
$NodeDeallocationOption = taskcompletion;

Önemli

Şu anda Batch Hizmeti'nin bekleyen görevlerin çözümüyle ilgili sınırlamaları vardır. Göreve bir görev eklendiğinde, batch hizmeti tarafından zamanlama için kullanılan bir iç kuyruğa da eklenir. Görev zamanlanabilir olmadan önce silinirse, görev kuyrukta kalıcı olarak kalabilir ve bu da içinde $PendingTaskssayılmaya devam eder. Batch, Batch havuzundaki boş düğümlerle zamanlamak üzere kuyruktan görev çekme şansına sahip olduğunda, bu silinen görev sonunda kuyruktan temizlenir.

Önceden damgalanmış düğümler

Bu örnek, 25 Spot düğümüyle başlayan bir havuz oluşturur. Spot düğüm her ön başlatıldığında, bunun yerine ayrılmış bir düğüm eklenir. İlk örnekte olduğu gibi değişkeni havuzun maxNumberofVMs 25 VM'yi aşmasını engeller. Bu örnek, Spot VM'lerden yararlanırken havuzun ömrü boyunca yalnızca sabit sayıda önalım oluşmasını sağlamak için yararlıdır.

maxNumberofVMs = 25;
$TargetDedicatedNodes = min(maxNumberofVMs, $PreemptedNodeCount.GetSample(180 * TimeInterval_Second));
$TargetLowPriorityNodes = min(maxNumberofVMs , maxNumberofVMs - $TargetDedicatedNodes);
$NodeDeallocationOption = taskcompletion;

Otomatik ölçeklendirme formülleri oluşturma hakkında daha fazla bilgi edinecek ve bu makalenin devamında daha fazla örnek otomatik ölçeklendirme formülü göreceksiniz.

Değişkenler

Otomatik ölçeklendirme formüllerinizde hem hizmet tanımlı hem de kullanıcı tanımlı değişkenleri kullanabilirsiniz.

Hizmet tanımlı değişkenler Batch hizmetinde yerleşik olarak bulunur. Hizmet tanımlı değişkenlerin bazıları okuma-yazma, bazıları ise salt okunur.

Kullanıcı tanımlı değişkenler, tanımladığınız değişkenlerdir. Önceki örnekte $TargetDedicatedNodes ve $PendingTasks hizmet tanımlı değişkenlerken startingNumberOfVMs ve maxNumberofVMs kullanıcı tanımlı değişkenlerdir.

Not

Hizmet tanımlı değişkenlerin önünde her zaman dolar işareti ($) bulunur. Kullanıcı tanımlı değişkenler için dolar işareti isteğe bağlıdır.

Aşağıdaki tablolarda, Batch hizmeti tarafından tanımlanan okuma-yazma ve salt okunur değişkenler gösterilmektedir.

Okuma-yazma hizmeti tanımlı değişkenler

Bir havuzdaki işlem düğümlerinin sayısını yönetmek için bu hizmet tanımlı değişkenlerin değerlerini alabilir ve ayarlayabilirsiniz.

Değişken Açıklama
$TargetDedicatedNodes Havuz için ayrılmış işlem düğümlerinin hedef sayısı. Bir havuz her zaman istenen sayıda düğüme ulaşamadığından hedef olarak belirtilir. Örneğin, havuz ilk hedefe ulaşmadan önce ayrılmış düğümlerin hedef sayısı otomatik ölçeklendirme değerlendirmesiyle değiştirilirse havuz hedefe ulaşamayabilir.

Batch hizmet modunda oluşturulan bir hesaptaki havuz, hedef bir Batch hesabı düğümünü veya çekirdek kotasını aşarsa hedefine ulaşamayabilir. Kullanıcı aboneliği modunda oluşturulan bir hesaptaki havuz, hedef abonelik için paylaşılan çekirdek kotasını aşarsa hedefine ulaşamayabilir.
$TargetLowPriorityNodes Havuz için hedef Spot işlem düğümü sayısı. Bir havuz her zaman istenen sayıda düğüme ulaşamadığından hedef olarak belirtilir. Örneğin, havuz ilk hedefe ulaşmadan önce spot düğümlerin hedef sayısı otomatik ölçeklendirme değerlendirmesiyle değiştirilirse havuz hedefe ulaşamayabilir. Hedef bir Batch hesabı düğümünü veya çekirdek kotasını aşarsa havuz da hedefine ulaşamayabilir.

Spot işlem düğümleri hakkında daha fazla bilgi için bkz . Batch ile Spot VM'leri kullanma.
$NodeDeallocationOption İşlem düğümleri havuzdan kaldırıldığında gerçekleşen eylem. Olası değerler şunlardır:
- requeue: Varsayılan değer. Görevleri hemen sona erdirip yeniden zamanlanmış olmaları için iş kuyruğuna geri yerleştirir. Bu eylem, hedef düğüm sayısına mümkün olan en kısa sürede ulaşılmasını sağlar. Ancak, çalışan görevlerin kesintiye uğraması ve ardından yeniden başlatılması gerektiğinden daha az verimli olabilir.
- terminate: Görevleri hemen sona erdirip iş kuyruğundan kaldırır.
- taskcompletion: Çalışmakta olan görevlerin tamamlanmasını bekler ve ardından düğümü havuzdan kaldırır. Görevlerin kesintiye uğramasını ve yeniden sorgulanmasını önlemek, görevin yaptığı tüm işleri boşa harcamak için bu seçeneği kullanın.
- retaineddata: Düğümü havuzdan kaldırmadan önce düğümdeki tüm yerel görev tarafından tutulan verilerin temizlenmesini bekler.

Not

Değişkeni $TargetDedicatedNodes diğer adı $TargetDedicatedkullanılarak da belirtilebilir. Benzer şekilde, $TargetLowPriorityNodes değişkeni diğer adı $TargetLowPrioritykullanılarak belirtilebilir. Hem tam adlandırılmış değişken hem de diğer adı formül tarafından ayarlanırsa, tam adlandırılmış değişkene atanan değer önceliklidir.

Salt okunur hizmet tanımlı değişkenler

Batch hizmetindeki ölçümleri temel alan ayarlamalar yapmak için bu hizmet tanımlı değişkenlerin değerini alabilirsiniz.

Önemli

İş sürümü görevleri şu anda ve $PendingTasksgibi $ActiveTasks görev sayıları sağlayan değişkenlere dahil değildir. Otomatik ölçeklendirme formülünüzü bağlı olarak, bu durum iş yayın görevlerini çalıştırmak için kullanılabilir düğüm olmadan düğümlerin kaldırılmasına neden olabilir.

İpucu

Salt okunur hizmet tanımlı bu değişkenler, her biriyle ilişkili verilere erişmek için çeşitli yöntemler sağlayan nesnelerdir. Daha fazla bilgi için bu makalenin devamında yer alan Örnek verileri alma bölümüne bakın.

Değişken Açıklama
$CPUPercent CPU kullanımının ortalama yüzdesi.
$WallClockSeconds Tüketilen saniye sayısı. 2024-Mar-31'de emekliye.
$MemoryBytes Kullanılan ortalama megabayt sayısı. 2024-Mar-31'de emekliye.
$DiskBytes Yerel disklerde kullanılan ortalama gigabayt sayısı. 2024-Mar-31'de emekliye.
$DiskReadBytes Okunan bayt sayısı. 2024-Mar-31'de emekliye.
$DiskWriteBytes Yazılan bayt sayısı. 2024-Mar-31'de emekliye.
$DiskReadOps Gerçekleştirilen okuma diski işlemlerinin sayısı. 2024-Mar-31'de emekliye.
$DiskWriteOps Gerçekleştirilen yazma diski işlemlerinin sayısı. 2024-Mar-31'de emekliye.
$NetworkInBytes Gelen bayt sayısı. 2024-Mar-31'de emekliye.
$NetworkOutBytes Giden bayt sayısı. 2024-Mar-31'de emekliye.
$SampleNodeCount İşlem düğümlerinin sayısı. 2024-Mar-31'de emekliye.
$ActiveTasks Yürütülmeye hazır olan ancak henüz yürütülmeyen görev sayısı. Bu, etkin durumda olan ve bağımlılıkları karşılanmış olan tüm görevleri içerir. Etkin durumda olan ancak bağımlılıkları karşılanmamış tüm görevler sayılanların $ActiveTasks dışında tutulur. Çok örnekli bir görev için, $ActiveTasks görevde ayarlanan örnek sayısını içerir.
$RunningTasks Çalışan durumdaki görevlerin sayısı.
$PendingTasks ve $RunningTaskstoplamını $ActiveTasks gösterir.
$SucceededTasks Başarıyla tamamlanan görev sayısı.
$FailedTasks Başarısız olan görev sayısı.
$TaskSlotsPerNode Havuzdaki tek bir işlem düğümünde eşzamanlı görevleri çalıştırmak için kullanılabilecek görev yuvalarının sayısı.
$CurrentDedicatedNodes Ayrılmış işlem düğümlerinin geçerli sayısı.
$CurrentLowPriorityNodes Önceden yüklenmiş düğümler de dahil olmak üzere geçerli Spot işlem düğümü sayısı.
$UsableNodeCount Kullanılabilir işlem düğümlerinin sayısı.
$PreemptedNodeCount Havuzdaki önceden damgalanmış durumdaki düğümlerin sayısı.

Uyarı

Hizmet tanımlı değişkenlerin seçilmesi, yukarıdaki tabloda belirtildiği gibi 31 Mart 2024'te kullanımdan kaldırılacaktır. Kullanımdan kaldırma tarihinden sonra bu hizmet tanımlı değişkenler artık örnek verilerle doldurulmayacak. Lütfen bu değişkenlerin kullanımını bu tarihten önce sonlandırın.

Not

Belirli bir noktada çalışan görev sayısına göre ölçeklendirme yaparken ve $ActiveTasks çalıştırılacak kuyruğa alınan görev sayısına göre ölçeklendirme yaparken kullanın$RunningTasks.

Türler

Otomatik ölçeklendirme formülleri aşağıdaki türleri destekler:

  • çift
  • doubleVec
  • doubleVecList
  • Dize
  • zaman damgası--aşağıdaki üyeleri içeren bileşik bir yapı:
    • yıl
    • ay (1-12)
    • gün (1-31)
    • hafta içi (sayı biçiminde; örneğin, Pazartesi için 1)
    • saat (24 saatlik sayı biçiminde; örneğin, 13, 1 PM anlamına gelir)
    • dakika (00-59)
    • saniye (00-59)
  • timeinterval
    • TimeInterval_Zero
    • TimeInterval_100ns
    • TimeInterval_Microsecond
    • TimeInterval_Millisecond
    • TimeInterval_Second
    • TimeInterval_Minute
    • TimeInterval_Hour
    • TimeInterval_Day
    • TimeInterval_Week
    • TimeInterval_Year

Operations

Bu işlemlere, önceki bölümde listelenen türlerde izin verilir.

İşlem Desteklenen işleçler Sonuç türü
çift işleç çift +, -, *, / çift
çift işleç timeinterval * timeinterval
doubleVec işleci çift +, -, *, / doubleVec
doubleVec işleci doubleVec +, -, *, / doubleVec
timeinterval işleci çift *, / timeinterval
timeinterval işleci timeinterval +, - timeinterval
timeinterval işleci zaman damgası + timestamp
zaman damgası işleci timeinterval + timestamp
zaman damgası işleci zaman damgası - timeinterval
işleç çift -, ! çift
işleç timeinterval - timeinterval
çift işleç çift <, <=, ==, >=, >, != çift
dize işleç dizesi <, <=, ==, >=, >, != çift
zaman damgası işleci zaman damgası <, <=, ==, >=, >, != çift
timeinterval işleci timeinterval <, <=, ==, >=, >, != çift
çift işleç çift &&, || çift

Bir çifti üçüncül işleç ()double ? statement1 : statement2 ile test ederek sıfır olmayan değeri true, sıfır ise false olarak sonuçlanır.

İşlevler

Otomatik ölçeklendirme formülü tanımlarken bu önceden tanımlanmış işlevleri kullanabilirsiniz.

İşlev Dönüş türü Açıklama
avg(doubleVecList) çift doubleVecList içindeki tüm değerlerin ortalama değerini döndürür.
ceil(çift) çift Çiftten küçük olmayan en küçük tamsayı değerini döndürür.
ceil(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından ceil değerini döndürür.
floor(double) çift Çiftten büyük olmayan en büyük tamsayı değerini döndürür.
floor(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından floor değerini döndürür.
len(doubleVecList) çift doubleVecList'ten oluşturulan vektör uzunluğunu döndürür.
lg(çift) çift Çiftin günlük tabanı 2'sini döndürür.
lg(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından lg değerini döndürür.
ln(çift) çift Çiftin doğal günlüğünü döndürür.
ln(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından ln değerini döndürür.
log(çift) çift Çiftin 10 günlük tabanını döndürür.
log(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından log değerini döndürür.
max(doubleVecList) çift doubleVecList içindeki en büyük değeri döndürür.
min(doubleVecList) çift doubleVecList içindeki en düşük değeri döndürür.
norm(doubleVecList) çift doubleVecList'ten oluşturulan vektörünün iki normunu döndürür.
yüzdebirlik(doubleVec v, çift p) çift v vektörünün yüzdebirlik öğesini döndürür.
rand() çift 0,0 ile 1,0 arasında rastgele bir değer döndürür.
range(doubleVecList) çift doubleVecList içindeki min ve max değerleri arasındaki farkı döndürür.
round(çift) çift En yakın tamsayı değerini çifte döndürür (kayan nokta biçiminde), yarım durumları sıfırdan uzağa yuvarlar.
round(doubleVecList) doubleVec doubleVecList öğesinin bileşen açısından round değerini döndürür.
std(doubleVecList) çift doubleVecList içindeki değerlerin örnek standart sapması döndürür.
stop() Otomatik ölçeklendirme ifadesinin değerlendirilmesini durdurur.
sum(doubleVecList) çift doubleVecList öğesinin tüm bileşenlerinin toplamını döndürür.
time(string dateTime="") timestamp Parametre geçirilmediyse geçerli saatin zaman damgasını veya geçirilirse dateTime dizesinin zaman damgasını döndürür. Desteklenen dateTime biçimleri W3C-DTF ve RFC 1123'lerdir.
val(doubleVec v, double i) çift Başlangıç dizini sıfır olan v vektörünün i konumundaki öğesinin değerini döndürür.

Önceki tabloda açıklanan işlevlerden bazıları bir listeyi bağımsız değişken olarak kabul edebilir. Virgülle ayrılmış liste, double ve doubleVec'in herhangi bir bileşimidir. Örneğin:

doubleVecList := ( (double | doubleVec)+(, (double | doubleVec) )* )?

doubleVecList değeri, değerlendirmeden önce tek bir doubleVec'e dönüştürülür. Örneğin, ise v = [1,2,3], çağrısı çağrısı avg(v) ile avg(1,2,3)eşdeğerdir. Çağırma avg(v, 7) , çağrısıyla avg(1,2,3,7)eşdeğerdir.

Ölçümler

Formül tanımlarken hem kaynak hem de görev ölçümlerini kullanabilirsiniz. Aldığınız ve değerlendirdiğiniz ölçüm verilerine göre havuzdaki ayrılmış düğümlerin hedef sayısını ayarlarsınız. Her ölçüm hakkında daha fazla bilgi için Değişkenler bölümüne bakın.

Metrik Sistem Açıklama
Kaynak Kaynak ölçümleri CPU'ya, bant genişliğine, işlem düğümlerinin bellek kullanımına ve düğüm sayısına bağlıdır.

Bu hizmet tanımlı değişkenler, düğüm sayısına göre ayarlamalar yapmak için kullanışlıdır:
- $TargetDedicatedNodes
- $TargetLowPriorityNodes
- $CurrentDedicatedNodes
- $CurrentLowPriorityNodes
- $PreemptedNodeCount
- $UsableNodeCount

Bu hizmet tanımlı değişkenler, düğüm kaynak kullanımına göre ayarlamalar yapmak için kullanışlıdır:
- $CPUPercent
- $WallClockSeconds
- $MemoryBytes
- $DiskBytes
- $DiskReadBytes
- $DiskWriteBytes
- $DiskReadOps
- $DiskWriteOps
- $NetworkInBytes
- $NetworkOutBytes
Görev Görev ölçümleri Etkin, Beklemede ve Tamamlandı gibi görevlerin durumunu temel alır. Aşağıdaki hizmet tanımlı değişkenler, görev ölçümlerini temel alan havuz boyutu ayarlamaları yapmak için kullanışlıdır:
- $ActiveTasks
- $RunningTasks
- $PendingTasks
- $SucceededTasks
- $FailedTasks

Örnek verileri alma

Otomatik ölçeklendirme formülünün temel işlemi, görev ve kaynak ölçümleri verilerini (örnekler) almak ve ardından havuz boyutunu bu verilere göre ayarlamaktır. Bu nedenle, otomatik ölçeklendirme formüllerinin örneklerle nasıl etkileşime geçtiğini net bir şekilde anlamak önemlidir.

Yöntemler

Otomatik ölçeklendirme formülleri Batch hizmeti tarafından sağlanan ölçüm verilerinin örneklerine göre hareket eder. Formül, havuz işlem düğümlerini elde ettiği değerlere göre büyütür veya küçültür. Hizmet tanımlı değişkenler, bu nesneyle ilişkili verilere erişmek için yöntemler sağlayan nesnelerdir. Örneğin, aşağıdaki ifade cpu kullanımının son beş dakikasını alma isteğini gösterir:

$CPUPercent.GetSample(TimeInterval_Minute * 5)

Hizmet tanımlı değişkenler hakkında örnek veriler almak için aşağıdaki yöntemler kullanılabilir.

Metot Açıklama
GetSample() yöntemi, GetSample() veri örneklerinin vektörlerini döndürür.

Örnek 30 saniyelik ölçüm verileridir. Başka bir deyişle örnekler 30 saniyede bir elde edilir. Ancak aşağıda belirtildiği gibi, bir örneğin toplandığı zaman ile bir formül için kullanılabilir olması arasında bir gecikme vardır. Bu nedenle, belirli bir zaman aralığına ait tüm örnekler bir formül tarafından değerlendirilmek üzere kullanılamayabilir.

- doubleVec GetSample(double count): Toplanan en son örneklerden elde edilen örnek sayısını belirtir. GetSample(1) kullanılabilir son örneği döndürür. Ancak GetSample(1) gibi $CPUPercentölçümler kullanılmamalıdır çünkü örneğin ne zaman toplandığını bilmek mümkün değildir. Yeni olabilir veya sistem sorunları nedeniyle çok daha eski olabilir. Böyle durumlarda, aşağıda gösterildiği gibi bir zaman aralığı kullanmak daha iyidir.

- doubleVec GetSample((timestamp or timeinterval) startTime [, double samplePercent]): Örnek verileri toplamak için bir zaman çerçevesi belirtir. İsteğe bağlı olarak, istenen zaman çerçevesinde kullanılabilir olması gereken örneklerin yüzdesini de belirtir. Örneğin, $CPUPercent.GetSample(TimeInterval_Minute * 10) son 10 dakikadaki tüm örnekler geçmişte mevcutsa CPUPercent 20 örnek döndürür. Geçmişin son dakikası kullanılamıyorsa yalnızca 18 örnek döndürülür. Örneklerin yalnızca yüzde 90'ı kullanılabilir $CPUPercent.GetSample(TimeInterval_Minute * 10, 80) ancak başarılı olacağından bu durumda $CPUPercent.GetSample(TimeInterval_Minute * 10, 95) başarısız olur.

- doubleVec GetSample((timestamp or timeinterval) startTime, (timestamp or timeinterval) endTime [, double samplePercent]): Hem başlangıç saati hem de bitiş saati ile veri toplamak için bir zaman dilimi belirtir. Yukarıda belirtildiği gibi, bir örneğin toplandığı zaman ile bir formül için kullanılabilir duruma gelmesi arasında bir gecikme vardır. yöntemini kullanırken bu gecikmeyi GetSample göz önünde bulundurun. Aşağıya bakın GetSamplePercent .
GetSamplePeriod() Geçmiş örnek veri kümesinde alınan örneklerin süresini döndürür.
Count() Ölçüm geçmişindeki örneklerin toplam sayısını döndürür.
HistoryBeginTime() Ölçüm için en eski kullanılabilir veri örneğinin zaman damgasını döndürür.
GetSamplePercent() Belirli bir zaman aralığı için kullanılabilen örneklerin yüzdesini döndürür. Örneğin, doubleVec GetSamplePercent( (timestamp or timeinterval) startTime [, (timestamp or timeinterval) endTime] ). Döndürülen örneklerin GetSample yüzdesi belirtilenden samplePercent azsa yöntemi başarısız olduğundan, önce denetlemek için yöntemini kullanabilirsiniz GetSamplePercent . Ardından, otomatik ölçeklendirme değerlendirmesini durdurmadan, yeterli örnek yoksa alternatif bir eylem gerçekleştirebilirsiniz.

Örnekler

Batch hizmeti düzenli aralıklarla görev ve kaynak ölçümleri örnekleri alır ve bunları otomatik ölçeklendirme formülleriniz için kullanılabilir hale getirir. Bu örnekler Batch hizmeti tarafından 30 saniyede bir kaydedilir. Ancak genellikle bu örneklerin ne zaman kaydedildiği ve otomatik ölçeklendirme formüllerinizin kullanımına sunulması (ve okuması) arasında bir gecikme olur. Ayrıca, ağ veya diğer altyapı sorunları gibi faktörler nedeniyle örnekler belirli bir aralık için kaydedilemeyebilir.

Örnek yüzde

Yöntemine geçirildiğinde samplePercent veya GetSamplePercent() yöntem çağrıldığında, yüzde, Batch hizmeti tarafından kaydedilen toplam olası örnek sayısı ile otomatik ölçeklendirme formülünüzün kullanabileceği örnek sayısı arasındaki karşılaştırmayı ifade GetSample() eder.

Örnek olarak 10 dakikalık bir zaman aralığına bakalım. Örnekler bu 10 dakikalık süre içinde her 30 saniyede bir kaydedildiğinden, Batch tarafından kaydedilen örnek sayısı üst sınırı 20 örnek (dakikada 2) olacaktır. Ancak, raporlama mekanizmasının doğal gecikme süresi ve Azure'daki diğer sorunlar nedeniyle, okuma için otomatik ölçeklendirme formülünüzün kullanabileceği yalnızca 15 örnek olabilir. Bu nedenle, örneğin bu 10 dakikalık süre için, kaydedilen toplam örnek sayısının yalnızca yüzde 75'i formülünüzün kullanımına sunulmuş olabilir.

GetSample() ve örnek aralıklar

Otomatik ölçeklendirme formülleriniz düğüm ekleyerek veya kaldırarak havuzlarınızı büyütüp küçültür. Düğümler size pahalıya mal olduğundan formüllerinizin yeterli verileri temel alan akıllı bir analiz yöntemi kullandığından emin olun. Formüllerinizde eğilim türü çözümlemesi kullanmanız önerilir. Bu tür, toplanan örneklere göre havuzlarınızı büyütür ve küçültür.

Bunu yapmak için bir örnek vektörünü döndürmek için kullanın GetSample(interval look-back start, interval look-back end) :

$runningTasksSample = $RunningTasks.GetSample(1 * TimeInterval_Minute, 6 * TimeInterval_Minute);

Batch yukarıdaki satırı değerlendirdiğinde, değerlerin vektöru olarak bir örnek aralığı döndürür. Örneğin:

$runningTasksSample=[1,1,1,1,1,1,1,1,1,1];

Örneklerin vektörlerini topladıktan sonra, toplanan aralıktan anlamlı değerler türetmek için , max()ve avg() gibi min()işlevleri kullanabilirsiniz.

Daha fazla dikkatli olmak için, belirli bir süre için belirli bir örnek yüzdesinden daha az kullanılabilirse formül değerlendirmesinin başarısız olmasına zorlayabilirsiniz. Bir formül değerlendirmesinin başarısız olmasına zorladığınızda, belirtilen örnek yüzdesi kullanılamıyorsa Batch'e formülün daha fazla değerlendirilmesini durdurmasını emredmiş olursunuz. Bu durumda havuz boyutunda değişiklik yapılmaz. Değerlendirmenin başarılı olması için gerekli örnek yüzdesini belirtmek için, öğesinin üçüncü parametresi GetSample()olarak belirtin. Burada örneklerin yüzde 75'inin gereksinimi belirtilmiştir:

$runningTasksSample = $RunningTasks.GetSample(60 * TimeInterval_Second, 120 * TimeInterval_Second, 75);

Örnek kullanılabilirliği gecikmesi olabileceğinden, her zaman bir dakikadan eski bir geriye bakma başlangıç zamanına sahip bir zaman aralığı belirtmeniz gerekir. Örneklerin sisteme yayılması yaklaşık bir dakika sürer, bu nedenle aralıktaki (0 * TimeInterval_Second, 60 * TimeInterval_Second) örnekler kullanılamayabilir. Yine, belirli bir örnek yüzdesi gereksinimini GetSample() zorlamak için yüzde parametresini kullanabilirsiniz.

Önemli

Yalnızca GetSample(1) otomatik ölçeklendirme formüllerinizde güvenmekten kaçınmanızı kesinlikle öneririz. Bunun nedeni GetSample(1) temelde Batch hizmetine "Ne kadar süre önce aldığınıza bakılmaksızın, sahip olduğunuz son örneği verin" dediğinden kaynaklanır. Yalnızca tek bir örnek olduğundan ve daha eski bir örnek olabileceğinden, son görevin veya kaynak durumunun daha büyük resminin temsili olmayabilir. kullanıyorsanız GetSample(1), formülünüzün kullandığı tek veri noktasının değil daha büyük bir deyimin parçası olduğundan emin olun.

Otomatik ölçeklendirme formülü yazma

Yukarıdaki bileşenleri kullanan deyimler oluşturup bu deyimleri eksiksiz bir formülde birleştirerek bir otomatik ölçeklendirme formülü oluşturursunuz. Bu bölümde, gerçek dünya ölçeklendirme kararları gerçekleştirebilen ve ayarlamalar yapabilen örnek bir otomatik ölçeklendirme formülü oluşturacaksınız.

İlk olarak, yeni otomatik ölçeklendirme formülümüzün gereksinimlerini tanımlayalım. Formül şu şekilde olmalıdır:

  • CPU kullanımı yüksekse bir havuzdaki ayrılmış işlem düğümlerinin hedef sayısını artırın.
  • CPU kullanımı düşük olduğunda bir havuzdaki ayrılmış işlem düğümlerinin hedef sayısını azaltın.
  • Ayrılmış düğüm sayısı üst sınırını her zaman 400 ile kısıtlayın.
  • Düğüm sayısını azaltırken, görevleri çalıştıran düğümleri kaldırmayın; gerekirse, düğümleri kaldırmadan önce görevler tamamlanana kadar bekleyin.

Formüldeki ilk deyim, yüksek CPU kullanımı sırasında düğüm sayısını artırır. Yalnızca son 10 dakika içinde en düşük ortalama CPU kullanımının yüzde 70'in üzerinde olması durumunda, kullanıcı tanımlı bir değişkeni ($totalDedicatedNodes) geçerli hedef düğüm sayısının yüzde 110'unu oluşturan bir değerle dolduran bir deyim tanımlarsınız. Aksi takdirde, geçerli ayrılmış düğüm sayısı için değerini kullanır.

$totalDedicatedNodes =
    (min($CPUPercent.GetSample(TimeInterval_Minute * 10)) > 0.7) ?
    ($CurrentDedicatedNodes * 1.1) : $CurrentDedicatedNodes;

Düşük CPU kullanımı sırasında ayrılmış düğüm sayısını azaltmak için formüldeki bir sonraki deyim, son 60 dakikadaki ortalama CPU kullanımı yüzde 20'nin altındaysa, aynı $totalDedicatedNodes değişkeni geçerli hedef ayrılmış düğüm sayısının yüzde 90'ını ayarlar. Aksi takdirde, yukarıdaki deyimde doldurulan geçerli değerini $totalDedicatedNodes kullanır.

$totalDedicatedNodes =
    (avg($CPUPercent.GetSample(TimeInterval_Minute * 60)) < 0.2) ?
    ($CurrentDedicatedNodes * 0.9) : $totalDedicatedNodes;

Şimdi, ayrılmış işlem düğümlerinin hedef sayısını en fazla 400 ile sınırlayın.

$TargetDedicatedNodes = min(400, $totalDedicatedNodes);

Son olarak, görevleri tamamlanana kadar düğümlerin kaldırılmadığından emin olun.

$NodeDeallocationOption = taskcompletion;

Formülün tamamı aşağıdadır:

$totalDedicatedNodes =
    (min($CPUPercent.GetSample(TimeInterval_Minute * 10)) > 0.7) ?
    ($CurrentDedicatedNodes * 1.1) : $CurrentDedicatedNodes;
$totalDedicatedNodes =
    (avg($CPUPercent.GetSample(TimeInterval_Minute * 60)) < 0.2) ?
    ($CurrentDedicatedNodes * 0.9) : $totalDedicatedNodes;
$TargetDedicatedNodes = min(400, $totalDedicatedNodes);
$NodeDeallocationOption = taskcompletion;

Not

İsterseniz, formül dizelerine hem açıklamaları hem de satır sonlarını ekleyebilirsiniz. Ayrıca eksik noktalı virgüllerin değerlendirme hatalarına neden olabileceğini unutmayın.

Otomatik ölçeklendirme aralığı

Varsayılan olarak Batch hizmeti, havuzun boyutunu otomatik ölçeklendirme formülüne göre her 15 dakikada bir ayarlar. Bu aralık, aşağıdaki havuz özellikleri kullanılarak yapılandırılabilir:

En düşük aralık beş dakika ve en fazla 168 saattir. Bu aralığın dışında bir aralık belirtilirse, Batch hizmeti Hatalı İstek (400) hatası döndürür.

Not

Otomatik ölçeklendirme şu anda değişikliklere bir dakikadan kısa sürede yanıt vermek için tasarlanmamıştır, bunun yerine bir iş yükünü çalıştırırken havuzunuzun boyutunu aşamalı olarak ayarlamaya yöneliktir.

Batch SDK'ları ile otomatik ölçeklendirme özellikli havuz oluşturma

Havuz otomatik ölçeklendirmesi Batch SDK'larından herhangi biri, Batch REST APIBatch PowerShell cmdlet'leri ve Batch CLI kullanılarak yapılandırılabilir. Bu bölümde hem .NET hem de Python örneklerini görebilirsiniz.

.NET

.NET'te otomatik ölçeklendirmenin etkinleştirildiği bir havuz oluşturmak için şu adımları izleyin:

  1. BatchClient.PoolOperations.CreatePool ile havuzu oluşturun.
  2. CloudPool.AutoScaleEnabled özelliğini true olarak ayarlayın.
  3. CloudPool.AutoScaleFormula özelliğini otomatik ölçeklendirme formülünüzü kullanarak ayarlayın.
  4. (İsteğe bağlı) CloudPool.AutoScaleEvaluationInterval özelliğini ayarlayın (varsayılan değer 15 dakikadır).
  5. CloudPool.Commit veya CommitAsync ile havuzu işleyin.

Aşağıdaki örnek, .NET'te otomatik ölçeklendirme özellikli bir havuz oluşturur. Havuzun otomatik ölçeklendirme formülü, hedef ayrılmış düğüm sayısını Pazartesi günleri 5, haftanın her günü 1 olarak ayarlar. Otomatik ölçeklendirme aralığı 30 dakika olarak ayarlanır. Bu makalede ve bu makaledeki diğer C# kod parçacıklarında BatchClient myBatchClient sınıfının düzgün başlatılmış bir örneği yer alır.

CloudPool pool = myBatchClient.PoolOperations.CreatePool(
                    poolId: "mypool",
                    virtualMachineSize: "standard_d1_v2",
                    VirtualMachineConfiguration: new VirtualMachineConfiguration(
                        imageReference: new ImageReference(
                                            publisher: "MicrosoftWindowsServer",
                                            offer: "WindowsServer",
                                            sku: "2019-datacenter-core",
                                            version: "latest"),
                        nodeAgentSkuId: "batch.node.windows amd64");
pool.AutoScaleEnabled = true;
pool.AutoScaleFormula = "$TargetDedicatedNodes = (time().weekday == 1 ? 5:1);";
pool.AutoScaleEvaluationInterval = TimeSpan.FromMinutes(30);
await pool.CommitAsync();

Önemli

Otomatik ölçeklendirme özellikli bir havuz oluşturduğunuzda, çağrısında CreatePooltargetDedicatedNodes parametresini veya targetLowPriorityNodes parametresini belirtmeyin. Bunun yerine havuzdaki AutoScaleEnabled ve AutoScaleFormula özelliklerini belirtin. Bu özelliklerin değerleri her düğüm türünün hedef sayısını belirler.

Otomatik ölçeklendirme özellikli bir havuzu el ile yeniden boyutlandırmak için (örneğin, BatchClient.PoolOperations.ResizePoolAsync ile), önce havuz üzerinde otomatik ölçeklendirmeyi devre dışı bırakmanız ve sonra yeniden boyutlandırmanız gerekir.

İpucu

.NET SDK'sını kullanma hakkında daha fazla örnek için GitHub'daki Batch .NET Hızlı Başlangıç deposuna bakın.

Python

Python SDK ile otomatik ölçeklendirme özellikli bir havuz oluşturmak için:

  1. Bir havuz oluşturun ve yapılandırmasını belirtin.
  2. Havuzu hizmet istemcisine ekleyin.
  3. Yazdığınız formülle havuzda otomatik ölçeklendirmeyi etkinleştirin.

Aşağıdaki örnekte bu adımlar gösterilmektedir.

# Create a pool; specify configuration
new_pool = batch.models.PoolAddParameter(
    id="autoscale-enabled-pool",
    virtual_machine_configuration=batchmodels.VirtualMachineConfiguration(
        image_reference=batchmodels.ImageReference(
          publisher="Canonical",
          offer="UbuntuServer",
          sku="20.04-LTS",
          version="latest"
            ),
        node_agent_sku_id="batch.node.ubuntu 20.04"),
    vm_size="STANDARD_D1_v2",
    target_dedicated_nodes=0,
    target_low_priority_nodes=0
)
batch_service_client.pool.add(new_pool) # Add the pool to the service client

formula = """$curTime = time();
             $workHours = $curTime.hour >= 8 && $curTime.hour < 18;
             $isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
             $isWorkingWeekdayHour = $workHours && $isWeekday;
             $TargetDedicated = $isWorkingWeekdayHour ? 20:10;""";

# Enable autoscale; specify the formula
response = batch_service_client.pool.enable_auto_scale(pool_id, auto_scale_formula=formula,
                                            auto_scale_evaluation_interval=datetime.timedelta(minutes=10),
                                            pool_enable_auto_scale_options=None,
                                            custom_headers=None, raw=False)

İpucu

Python SDK'sını kullanma hakkında daha fazla örnek için GitHub'daki Batch Python Hızlı Başlangıç deposuna bakın.

Mevcut bir havuzda otomatik ölçeklendirmeyi etkinleştirme

Her Batch SDK'sı otomatik ölçeklendirmeyi etkinleştirmek için bir yol sağlar. Örneğin:

Mevcut bir havuzda otomatik ölçeklendirmeyi etkinleştirdiğinizde şunları aklınızda bulundurun:

  • Havuzda otomatik ölçeklendirme şu anda devre dışıysa, isteği gönderdiğinizde geçerli bir otomatik ölçeklendirme formülü belirtmeniz gerekir. İsteğe bağlı olarak otomatik ölçeklendirme aralığı belirtebilirsiniz. Aralık belirtmezseniz, varsayılan değer olan 15 dakika kullanılır.
  • Otomatik ölçeklendirme şu anda havuzda etkinse, yeni bir formül, yeni bir aralık veya her ikisini de belirtebilirsiniz. Bu özelliklerden en az birini belirtmeniz gerekir.
    • Yeni bir otomatik ölçeklendirme aralığı belirtirseniz, mevcut zamanlama durdurulur ve yeni bir zamanlama başlatılır. Yeni zamanlamanın başlangıç saati, otomatik ölçeklendirmeyi etkinleştirme isteğinin verildiği zamandır.
    • Otomatik ölçeklendirme formülünü veya aralığını atlarsanız, Batch hizmeti bu ayarın geçerli değerini kullanmaya devam eder.

Not

.NET'te havuzu oluştururken yöntemin targetDedicatedNodes veya targetLowPriorityNodes parametreleri CreatePool için veya başka bir dildeki karşılaştırılabilir parametreler için değerler belirttiyseniz, otomatik ölçeklendirme formülü değerlendirildiğinde bu değerler yoksayılır.

Bu C# örneği, mevcut bir havuzda otomatik ölçeklendirmeyi etkinleştirmek için Batch .NET kitaplığını kullanır.

// Define the autoscaling formula. This formula sets the target number of nodes
// to 5 on Mondays, and 1 on every other day of the week
string myAutoScaleFormula = "$TargetDedicatedNodes = (time().weekday == 1 ? 5:1);";

// Set the autoscale formula on the existing pool
await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleFormula: myAutoScaleFormula);

Otomatik ölçeklendirme formülünü güncelleştirme

Mevcut otomatik ölçeklendirme özellikli bir havuzdaki formülü güncelleştirmek için işlemi çağırarak yeni formülle otomatik ölçeklendirmeyi yeniden etkinleştirin. Örneğin, aşağıdaki .NET kodu yürütürken otomatik ölçeklendirme zaten etkinse myexistingpool , otomatik ölçeklendirme formülü içeriğiyle myNewFormuladeğiştirilir.

await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleFormula: myNewFormula);

Otomatik ölçeklendirme aralığını güncelleştirme

Mevcut otomatik ölçeklendirme özellikli havuzun otomatik ölçeklendirme değerlendirme aralığını güncelleştirmek için işlemi çağırarak otomatik ölçeklendirmeyi yeni aralıkla yeniden etkinleştirin. Örneğin, .NET'te zaten otomatik ölçeklendirme özelliği etkinleştirilmiş bir havuz için otomatik ölçeklendirme değerlendirme aralığını 60 dakika olarak ayarlamak için:

await myBatchClient.PoolOperations.EnableAutoScaleAsync(
    "myexistingpool",
    autoscaleEvaluationInterval: TimeSpan.FromMinutes(60));

Otomatik ölçeklendirme formülünü değerlendirme

Bir formülü havuza uygulamadan önce değerlendirebilirsiniz. Bu, formülü üretime almadan önce sonuçları test etmenizi sağlar.

Otomatik ölçeklendirme formülünü değerlendirebilmeniz için önce havuzda otomatik ölçeklendirmeyi tek satırlı formül gibi geçerli bir formülle $TargetDedicatedNodes = 0etkinleştirmeniz gerekir. Ardından, test etmek istediğiniz formülü değerlendirmek için aşağıdakilerden birini kullanın:

Aşağıdaki Batch .NET örneği bir otomatik ölçeklendirme formülünü değerlendirir. Havuz zaten otomatik ölçeklendirme kullanmıyorsa, önce bunu etkinleştirin.

// First obtain a reference to an existing pool
CloudPool pool = await batchClient.PoolOperations.GetPoolAsync("myExistingPool");

// If autoscaling isn't already enabled on the pool, enable it.
// You can't evaluate an autoscale formula on a non-autoscale-enabled pool.
if (pool.AutoScaleEnabled == false)
{
    // You need a valid autoscale formula to enable autoscaling on the
    // pool. This formula is valid, but won't resize the pool:
    await pool.EnableAutoScaleAsync(
        autoscaleFormula: "$TargetDedicatedNodes = $CurrentDedicatedNodes;",
        autoscaleEvaluationInterval: TimeSpan.FromMinutes(5));

    // Batch limits EnableAutoScaleAsync calls to once every 30 seconds.
    // Because you want to apply our new autoscale formula below if it
    // evaluates successfully, and you *just* enabled autoscaling on
    // this pool, pause here to ensure you pass that threshold.
    Thread.Sleep(TimeSpan.FromSeconds(31));

    // Refresh the properties of the pool so that we've got the
    // latest value for AutoScaleEnabled
    await pool.RefreshAsync();
}

// You must ensure that autoscaling is enabled on the pool prior to
// evaluating a formula
if (pool.AutoScaleEnabled == true)
{
    // The formula to evaluate - adjusts target number of nodes based on
    // day of week and time of day
    string myFormula = @"
        $curTime = time();
        $workHours = $curTime.hour >= 8 && $curTime.hour < 18;
        $isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
        $isWorkingWeekdayHour = $workHours && $isWeekday;
        $TargetDedicatedNodes = $isWorkingWeekdayHour ? 20:10;
    ";

    // Perform the autoscale formula evaluation. Note that this code does not
    // actually apply the formula to the pool.
    AutoScaleRun eval =
        await batchClient.PoolOperations.EvaluateAutoScaleAsync(pool.Id, myFormula);

    if (eval.Error == null)
    {
        // Evaluation success - print the results of the AutoScaleRun.
        // This will display the values of each variable as evaluated by the
        // autoscale formula.
        Console.WriteLine("AutoScaleRun.Results: " +
            eval.Results.Replace("$", "\n    $"));

        // Apply the formula to the pool since it evaluated successfully
        await batchClient.PoolOperations.EnableAutoScaleAsync(pool.Id, myFormula);
    }
    else
    {
        // Evaluation failed, output the message associated with the error
        Console.WriteLine("AutoScaleRun.Error.Message: " +
            eval.Error.Message);
    }
}

Bu kod parçacığında gösterilen formülün başarılı bir şekilde değerlendirilmesi şuna benzer sonuçlar üretir:

AutoScaleRun.Results:
    $TargetDedicatedNodes=10;
    $NodeDeallocationOption=requeue;
    $curTime=2016-10-13T19:18:47.805Z;
    $isWeekday=1;
    $isWorkingWeekdayHour=0;
    $workHours=0

Otomatik ölçeklendirme çalıştırmaları hakkında bilgi alma

Batch hizmetinin otomatik ölçeklendirme formülünüzü değerlendirmesini düzenli aralıklarla denetlemeniz önerilir. Bunu yapmak için havuza bir başvuru alın (veya yenileyin) ve ardından son otomatik ölçeklendirme çalıştırmasının özelliklerini inceleyin.

Batch .NET'te CloudPool.AutoScaleRun özelliği, havuzda gerçekleştirilen en son otomatik ölçeklendirme çalıştırması hakkında bilgi sağlayan çeşitli özelliklere sahiptir:

REST API'de, Havuz isteği hakkında bilgi al, autoScaleRun özelliğindeki en son otomatik ölçeklendirme çalıştırma bilgilerini içeren havuz hakkındaki bilgileri döndürür.

Aşağıdaki C# örneği, myPool havuzunda son otomatik ölçeklendirme çalıştırması hakkındaki bilgileri yazdırmak için Batch .NET kitaplığını kullanır.

await Cloud pool = myBatchClient.PoolOperations.GetPoolAsync("myPool");
Console.WriteLine("Last execution: " + pool.AutoScaleRun.Timestamp);
Console.WriteLine("Result:" + pool.AutoScaleRun.Results.Replace("$", "\n  $"));
Console.WriteLine("Error: " + pool.AutoScaleRun.Error);

Yukarıdaki örnekten örnek çıktı:

Last execution: 10/14/2016 18:36:43
Result:
  $TargetDedicatedNodes=10;
  $NodeDeallocationOption=requeue;
  $curTime=2016-10-14T18:36:43.282Z;
  $isWeekday=1;
  $isWorkingWeekdayHour=0;
  $workHours=0
Error:

Havuz otomatik ölçeklendirme olaylarını kullanarak otomatik ölçeklendirme çalıştırma geçmişini alma

PoolAutoScaleEvent'i sorgulayarak otomatik ölçeklendirme geçmişini de de de kontrol edebilirsiniz. Batch bu olayı otomatik ölçeklendirme formül değerlendirmesi ve yürütmesinin her bir örneğini kaydetmek için yayar ve bu da olası sorunları gidermeye yardımcı olabilir.

PoolAutoScaleEvent için örnek olay:

{
    "id": "poolId",
    "timestamp": "2020-09-21T23:41:36.750Z",
    "formula": "...",
    "results": "$TargetDedicatedNodes=10;$NodeDeallocationOption=requeue;$curTime=2016-10-14T18:36:43.282Z;$isWeekday=1;$isWorkingWeekdayHour=0;$workHours=0",
    "error": {
        "code": "",
        "message": "",
        "values": []
    }
}

Örnek otomatik ölçeklendirme formülleri

Şimdi havuzdaki işlem kaynaklarının miktarını ayarlamanın farklı yollarını gösteren birkaç formüle göz atalım.

Örnek 1: Zamana dayalı ayarlama

Havuz boyutunu haftanın gününe ve günün saatine göre ayarlamak istediğinizi varsayalım. Bu örnek, havuzdaki düğüm sayısını buna göre artırmayı veya azaltmayı gösterir.

Formül önce geçerli saati alır. Hafta içi (1-5) ve çalışma saatleri içinde (08:00 ile 18:00 arasında) hedef havuz boyutu 20 düğüm olarak ayarlanır. Aksi takdirde 10 düğüme ayarlanır.

$curTime = time();
$workHours = $curTime.hour >= 8 && $curTime.hour < 18;
$isWeekday = $curTime.weekday >= 1 && $curTime.weekday <= 5;
$isWorkingWeekdayHour = $workHours && $isWeekday;
$TargetDedicatedNodes = $isWorkingWeekdayHour ? 20:10;
$NodeDeallocationOption = taskcompletion;

$curTime ve UTC uzaklığınıza ekleyerek time()TimeZoneInterval_Hour yerel saat diliminizi yansıtacak şekilde ayarlanabilir. Örneğin, Mountain Daylight Time (MDT) için kullanın $curTime = time() + (-6 * TimeInterval_Hour); . Uzaklık ayarının varsa gün ışığından yararlanma saatinin başlangıcında ve sonunda ayarlanması gerektiğini unutmayın.

Örnek 2: Görev tabanlı ayarlama

Bu C# örneğinde, havuz boyutu kuyruktaki görev sayısına göre ayarlanır. Hem açıklamalar hem de satır sonları formül dizelerine eklenir.

// Get pending tasks for the past 15 minutes.
$samples = $PendingTasks.GetSamplePercent(TimeInterval_Minute * 15);
// If you have fewer than 70 percent data points, use the last sample point,
// otherwise use the maximum of last sample point and the history average.
$tasks = $samples < 70 ? max(0,$PendingTasks.GetSample(1)) : max( $PendingTasks.GetSample(1), avg($PendingTasks.GetSample(TimeInterval_Minute * 15)));
// If number of pending tasks is not 0, set targetVM to pending tasks, otherwise
// half of current dedicated.
$targetVMs = $tasks > 0? $tasks:max(0, $TargetDedicatedNodes/2);
// The pool size is capped at 20, if target VM value is more than that, set it
// to 20. This value should be adjusted according to your use case.
$TargetDedicatedNodes = max(0, min($targetVMs, 20));
// Set node deallocation mode - let running tasks finish before removing a node
$NodeDeallocationOption = taskcompletion;

Örnek 3: Paralel görevleri hesaplama

Bu C# örneği, havuz boyutunu görev sayısına göre ayarlar. Bu formül, havuz için ayarlanan TaskSlotsPerNode değerini de dikkate alır. Bu yaklaşım, havuzunuzda paralel görev yürütmenin etkinleştirildiği durumlarda kullanışlıdır.

// Determine whether 70 percent of the samples have been recorded in the past
// 15 minutes; if not, use last sample
$samples = $ActiveTasks.GetSamplePercent(TimeInterval_Minute * 15);
$tasks = $samples < 70 ? max(0,$ActiveTasks.GetSample(1)) : max( $ActiveTasks.GetSample(1),avg($ActiveTasks.GetSample(TimeInterval_Minute * 15)));
// Set the number of nodes to add to one-fourth the number of active tasks
// (the TaskSlotsPerNode property on this pool is set to 4, adjust
// this number for your use case)
$cores = $TargetDedicatedNodes * 4;
$extraVMs = (($tasks - $cores) + 3) / 4;
$targetVMs = ($TargetDedicatedNodes + $extraVMs);
// Attempt to grow the number of compute nodes to match the number of active
// tasks, with a maximum of 3
$TargetDedicatedNodes = max(0,min($targetVMs,3));
// Keep the nodes active until the tasks finish
$NodeDeallocationOption = taskcompletion;

Örnek 4: İlk havuz boyutunu ayarlama

Bu örnekte, havuz boyutunu ilk dönem için belirtilen sayıda düğüme ayarlayan otomatik ölçeklendirme formülüne sahip bir C# örneği gösterilmektedir. Bundan sonra, havuz boyutunu çalışan ve etkin görevlerin sayısına göre ayarlar.

Özellikle, bu formül aşağıdakileri yapar:

  • İlk havuz boyutunu dört düğüm olarak ayarlar.
  • Havuzun yaşam döngüsünün ilk 10 dakikası içinde havuz boyutunu ayarlamaz.
  • 10 dakika sonra, son 60 dakika içinde çalışan ve etkin görev sayısının en yüksek değerini alır.
    • Her iki değer de 0 ise ve son 60 dakika içinde hiçbir görev çalışmadığını veya etkin olmadığını belirtirse havuz boyutu 0 olarak ayarlanır.
    • Değerlerden biri sıfırdan büyükse hiçbir değişiklik yapılmaz.
string now = DateTime.UtcNow.ToString("r");
string formula = string.Format(@"
    $TargetDedicatedNodes = {1};
    lifespan         = time() - time(""{0}"");
    span             = TimeInterval_Minute * 60;
    startup          = TimeInterval_Minute * 10;
    ratio            = 50;

    $TargetDedicatedNodes = (lifespan > startup ? (max($RunningTasks.GetSample(span, ratio), $ActiveTasks.GetSample(span, ratio)) == 0 ? 0 : $TargetDedicatedNodes) : {1});
    ", now, 4);

Sonraki adımlar