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.
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ı nasıl görüntüleyip artıracağınızı öğrenmek için Azure Batch hizmeti için kotalar ve sınırlar bölümüne bakın.
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.
Otomatik ölçekleme formülleri
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 variable1
için bir değer alırsınız, ardından variable2
doldurmak için bir işlevde kullanırsınız.
$variable1 = function1($ServiceDefinedVariable);
$variable2 = function2($OtherServiceDefinedVariable, $variable1);
Otomatik ölçeklendirme formülünüze bu ifadeleri ekleyerek hedef sayıda işlem düğümüne ulaşın. 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. Bir görev işe eklendiğinde, Batch hizmeti tarafından zamanlama için kullanılan iç kuyruğa da eklenir. Eğer görev zamanlanmadan önce silinirse, görev kuyrukta kalmaya devam edebilir ve bu da $PendingTasks
içinde sayılmaya devam etmesine neden olabilir. Batch havuzundaki boş düğümlerle zamanlama yapılabileceğinde, Batch kuyruktan görevleri çekme şansı bulur ve 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 kesintiye uğradığında, bunun yerine ayrılmış bir düğüm ile değiştirilir. İ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 tarafından tanımlanan 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.
Okunabilir-yazılabilir hizmet 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, otomatik ölçeklendirme değerlendirmesiyle ayrılmış düğümlerin hedef sayısı 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ğerlendirmesi sonucunda 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 duraklatır ve yeniden zamanlanmaları 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ğratılıp ardından yeniden başlatılması gerektiğinden, bu durum 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 sıraya alınmasını önlemek, böylece görevin yaptığı hiçbir işi boşa harcamamak 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ı $TargetDedicated
kullanılarak da belirtilebilir. Benzer şekilde, $TargetLowPriorityNodes
değişkeni diğer adı $TargetLowPriority
kullanı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 $ActiveTasks
gibi $PendingTasks
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. |
$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. Aktif durumda olan ancak bağımlılıkları karşılanmamış tüm görevler, $ActiveTasks sayısından hariç 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ı. |
$TamamlanmamışGörevler |
$ActiveTasks ve $RunningTasks toplamı. |
$BaşarılıGörevler | Başarıyla tamamlanan görev sayısı. |
Başarısız Görevler | 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ı. |
Not
$RunningTasks
belirli bir anda çalışan görev sayısına göre ölçeklendirme yaparken ve $ActiveTasks
çalıştırılmayı bekleyen görev sayısına göre ölçeklendirme yaparken kullanın.
Türler
Otomatik ölçeklendirme formülleri aşağıdaki türleri destekler:
- iki kat
- 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)
- zaman aralığı
- Zaman Aralığı Sıfır
- TimeInterval_100ns
- ZamanAralığı_Mikrosaniye
- ZamanAralığı_Milisaniye
- ZamanAralığı_Saniye
- ZamanAralığı_Dakika
- TimeInterval_Hour
- ZamanAralığı_Gün
- TimeInterval_Week
- ZamanAralığı_Yıl
Operasyonlar
Bu işlemlere, önceki bölümde listelenen türlerde izin verilir.
İşlem | Desteklenen işleçler | Sonuç türü |
---|---|---|
double operatör double | +, -, *, / | çift |
çift işleç zaman aralığı | * | zaman aralığı |
doubleVec işleci çift | +, -, *, / | doubleVec |
doubleVec operator doubleVec | +, -, *, / | doubleVec |
timeinterval işleci çift | *, / | timeinterval |
zaman aralığı işleci zaman aralığı | +, - | zaman aralığı |
zaman aralığı işleci zaman damgası | + | timestamp |
zaman damgası operatör zaman aralığı | + | timestamp |
zaman damgası işleci zaman damgası | - | zaman aralığı |
operatör double | -, ! | çift |
işleç timeinterval | - | zaman aralığı |
çift operatör çift | <, <=, ==, >=, >, != | çift |
dize işleç dizesi | <, <=, ==, >=, >, != | çift |
zaman damgası işleci zaman damgası | <, <=, ==, >=, >, != | çift |
zaman aralığı işleci zaman aralığı | <, <=, ==, >=, >, != | çift |
çift işleç çift | &&, || | çift |
Bir double'ı double ? statement1 : statement2
üçlü operatör ile test etmek, sıfır olmayan değer için true, sıfır olduğunda 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) fonksiyonu | doubleVec | doubleVecList öğesinin bileşen açısından floor değerini döndürür. |
len(doubleVecList) | iki katı | doubleVecList'ten oluşturulan vektör uzunluğunu döndürür. |
lg(double) | ç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 | Çift hassasiyetli sayının doğal logaritmasını döndürür. |
ln(doubleVecList) | doubleVec | doubleVecList öğesinin bileşen açısından ln değerini döndürür. |
log(double) | çift | Ondırmalı Sayının logaritmik taban 10'unu verir. |
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. |
persentil(doubleVec v, double 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. |
zaman(dizi tarihSaat="") | 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, v = [1,2,3]
ise, avg(v)
çağrısı avg(1,2,3)
çağrısına eşdeğerdir. Çağrı avg(v, 7)
, avg(1,2,3,7)
çağrısıyla 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 |
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 - $BekleyenGörevler - $BaşarılıGörevler - $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 $CPUPercent gibi GetSample(1) ö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. Bu durumda $CPUPercent.GetSample(TimeInterval_Minute * 10, 95) başarısız olacaktır çünkü örneklerin yalnızca yüzde 90'ı kullanılabilir, ancak $CPUPercent.GetSample(TimeInterval_Minute * 10, 80) başarılı olacaktır.- 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
samplePercent
yöntemi geçirildiğinde veya GetSample()
yöntemi çağrıldığında, yüzde GetSamplePercent()
ifadesiyle, 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ı belirtir.
Ö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 , min()
ve max()
gibi avg()
işlevleri kullanabilirsiniz.
Daha dikkatli olmak için, belirli bir süre zarfında yeterli örnek yüzdesi olmadığında formül değerlendirmesini başarısız olmaya 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 olan örnek yüzdesini belirtmek amacıyla, bunu üçüncü parametre olarak GetSample()
şeklinde belirtin. Burada örneklerin yüzde 75'inin gereksinimi belirtilmiştir:
$runningTasksSample = $RunningTasks.GetSample(60 * TimeInterval_Second, 120 * TimeInterval_Second, 75);
Örnek kullanılabilirliğinde gecikme olabileceğinden, her zaman bir dakikadan daha eski bir geçmişe dönük başlangıç zamanı olan bir zaman aralığı belirtmelisiniz. Ö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 otomatik ölçeklendirme formüllerinizdeGetSample(1)
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ü yazın
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, mevcut ayrılmış düğüm sayısının değeri kullanılı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 doldurulmuş olan geçerli değeri $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:
- CloudPool.AutoScaleEvaluationInterval (Batch .NET)
- autoScaleEvaluationInterval (REST API)
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 API Batch 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:
- BatchClient.PoolOperations.CreatePool ile havuzu oluşturun.
- CloudPool.AutoScaleEnabled özelliğini true olarak ayarlayın.
- CloudPool.AutoScaleFormula özelliğini otomatik ölçeklendirme formülünüzü kullanarak ayarlayın.
- (İsteğe bağlı) CloudPool.AutoScaleEvaluationInterval özelliğini ayarlayın (varsayılan değer 15 dakikadır).
- CloudPool.Commit veya CommitAsync ile havuzu taahhüt edin.
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, targetDedicatedNodes parametresini veya targetLowPriorityNodes parametresini CreatePool
çağrısında 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:
- Bir havuz oluşturun ve yapılandırmasını belirtin.
- Havuzu hizmet istemcisine ekleyin.
- 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:
- BatchClient.PoolOperations.EnableAutoScaleAsync (Batch .NET)
- Havuzda otomatik ölçeklendirmeyi etkinleştirme (REST API)
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.
- ** Havuzda şu anda autoscaling etkinse, yeni bir formül, yeni bir aralık veya her ikisini birden 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.
Nota
.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üldüğünde myexistingpool
üzerinde otomatik ölçeklendirme zaten etkinse, otomatik ölçeklendirme formülü myNewFormula
içeriği ile değiştirilecektir.
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 = 0
etkinleştirmeniz gerekir. Ardından, test etmek istediğiniz formülü değerlendirmek için aşağıdakilerden birini kullanın:
BatchClient.PoolOperations.EvaluateAutoScale veya EvaluateAutoScaleAsync
Bu Batch .NET yöntemleri, mevcut havuzun kimliğini ve değerlendirilecek otomatik ölçeklendirme formülünü içeren bir dizeyi gerektirir.
Otomatik ölçeklendirme formülünü değerlendirme
Bu REST API isteğinde, URI'de havuz kimliğini ve istek gövdesinin autoScaleFormula öğesinde otomatik ölçeklendirme formülünü belirtin. İşlemin yanıtı, formülle ilgili olabilecek tüm hata bilgilerini içerir.
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, bir havuz hakkındaki bilgiler autoScaleRun özelliğindeki en son otomatik ölçeklendirme çalıştırması bilgilerini içerir.
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ünün değerlendirilmesi ve yürütülmesinin her bir örneğini kaydetmek için yayar; bu da olası sorunları çözmeye 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, düğüm sayısı 10 olarak 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
, TimeZoneInterval_Hour
ile UTC uzaklığınızın çarpımına time()
eklenerek 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
- Havuzunuzdaki işlem düğümlerinde aynı anda birden çok görevi yürütmeyi öğrenin. Bu, otomatik ölçeklendirmenin yanı sıra bazı iş yükleri için iş süresini azaltmaya yardımcı olabilir ve bu sayede paradan tasarruf edebilirsiniz.
- Azure Batch hizmetini verimli bir şekilde sorgulamayı öğrenin.