Uygulama Gruplarına Giriş
Service Fabric'in Küme Kaynak Yöneticisi genellikle yükü (Ölçümler aracılığıyla gösterilir) kümenin geneline eşit olarak yayarak küme kaynaklarını yönetir. Service Fabric, kümedeki düğümlerin ve kümenin kapasitesini kapasite aracılığıyla bir bütün olarak yönetir. Ölçümler ve kapasite birçok iş yükü için harika çalışır, ancak farklı Service Fabric Uygulama Örneklerini yoğun bir şekilde kullanan desenler bazen ek gereksinimler getirir. Örneğin, şunu yapmak isteyebilirsiniz:
- Adlandırılmış bir uygulama örneğindeki hizmetler için kümedeki düğümlerde kapasite ayırma
- Adlandırılmış uygulama örneği içindeki hizmetlerin üzerinde çalıştırıldığı toplam düğüm sayısını sınırlayın (bunları kümenin tamamına yaymak yerine)
- Hizmet sayısını veya içindeki hizmetlerin toplam kaynak tüketimini sınırlamak için adlandırılmış uygulama örneğinin kendisinde kapasiteleri tanımlayın
Service Fabric Kümesi Kaynak Yöneticisi, bu gereksinimleri karşılamak için Uygulama Grupları adlı bir özelliği destekler.
En fazla düğüm sayısını sınırlama
Uygulama kapasitesi için en basit kullanım örneği, bir uygulama örneğinin belirli bir maksimum düğüm sayısıyla sınırlandırılması gerektiği durumlardır. Bu, söz konusu uygulama örneği içindeki tüm hizmetleri belirli sayıda makinede birleştirir. Birleştirme, söz konusu adlandırılmış uygulama örneği içindeki hizmetler tarafından fiziksel kaynak kullanımını tahmin etmeye veya sınırlamaya çalışırken kullanışlıdır.
Aşağıdaki görüntüde, tanımlanan düğüm sayısı üst sınırı olan ve olmayan bir uygulama örneği gösterilmektedir:
Sol örnekte uygulamanın tanımlı düğüm sayısı üst sınırı yoktur ve üç hizmeti vardır. Küme Resource Manager, kümede en iyi dengeyi elde etmek için tüm çoğaltmaları altı kullanılabilir düğüme dağıtmıştır (varsayılan davranış). Doğru örnekte aynı uygulamanın üç düğümle sınırlı olduğunu görüyoruz.
Bu davranışı denetleye parametreye MaximumNodes adı verilir. Bu parametre uygulama oluşturma sırasında ayarlanabilir veya zaten çalışmakta olan bir uygulama örneği için güncelleştirilebilir.
PowerShell
New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -MaximumNodes 3
Update-ServiceFabricApplication –ApplicationName fabric:/AppName –MaximumNodes 5
C#
ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";
ad.MaximumNodes = 3;
await fc.ApplicationManager.CreateApplicationAsync(ad);
ApplicationUpdateDescription adUpdate = new ApplicationUpdateDescription(new Uri("fabric:/AppName"));
adUpdate.MaximumNodes = 5;
await fc.ApplicationManager.UpdateApplicationAsync(adUpdate);
Küme Kaynak Yöneticisi, düğüm kümesi içinde hangi hizmet nesnelerinin bir araya getirileceği veya hangi düğümlerin kullanılacağını garanti etmez.
Uygulama Ölçümleri, Yükleme ve Kapasite
Uygulama Grupları ayrıca belirli bir adlandırılmış uygulama örneğiyle ilişkili ölçümleri ve bu uygulama örneğinin bu ölçümler için kapasitesini tanımlamanızı sağlar. Uygulama ölçümleri, bu uygulama örneği içindeki hizmetlerin kaynak tüketimini izlemenize, ayırmanıza ve sınırlamanıza olanak tanır.
Her uygulama ölçümü için ayarlanabilen iki değer vardır:
- Toplam Uygulama Kapasitesi – Bu ayar, belirli bir ölçüm için uygulamanın toplam kapasitesini temsil eder. Küme Resource Manager, bu uygulama örneğinde toplam yükün bu değeri aşmasına neden olacak yeni hizmetlerin oluşturulmasına izin vermemektedir. Örneğin, uygulama örneğinin 10 kapasiteye sahip olduğunu ve zaten beş yüke sahip olduğunu varsayalım. Toplam varsayılan yükü 10 olan bir hizmetin oluşturulmasına izin verilmez.
- En Fazla Düğüm Kapasitesi – Bu ayar, tek bir düğümdeki uygulama için maksimum toplam yükü belirtir. Yük bu kapasitenin üzerinden geçerse, Küme Resource Manager yükün azalması için çoğaltmaları diğer düğümlere taşır.
PowerShell:
New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -Metrics @("MetricName:Metric1,MaximumNodeCapacity:100,MaximumApplicationCapacity:1000")
C#:
ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";
var appMetric = new ApplicationMetricDescription();
appMetric.Name = "Metric1";
appMetric.TotalApplicationCapacity = 1000;
appMetric.MaximumNodeCapacity = 100;
ad.Metrics.Add(appMetric);
await fc.ApplicationManager.CreateApplicationAsync(ad);
Kapasite Ayırma
Uygulama grupları için bir diğer yaygın kullanım, küme içindeki kaynakların belirli bir uygulama örneği için ayrıldığından emin olmaktır. Uygulama örneği oluşturulduğunda alan her zaman ayrılmıştır.
Uygulama için kümede alan ayırma işlemi aşağıdaki durumlarda bile hemen gerçekleşir:
- uygulama örneği oluşturuldu ancak henüz içinde hizmet yok
- uygulama örneği içindeki hizmet sayısı her seferinde değişir
- hizmetler var ancak kaynakları kullanmıyor
Bir uygulama örneği için kaynak ayırma işlemi için iki ek parametre daha belirtilmesi gerekir: MinimumNodes ve NodeReservationCapacity
- Minimum Düğümler - Uygulama örneğinin üzerinde çalışması gereken en az düğüm sayısını tanımlar.
- NodeReservationCapacity - Bu ayar uygulama için ölçüm başınadır. Değer, söz konusu uygulamadaki hizmetlerin çalıştığı herhangi bir düğümde uygulama için ayrılmış olan ölçümün miktarıdır.
MinimumNodes ve NodeReservationCapacity birleştirilerek küme içindeki uygulama için en düşük yük ayırması garanti edilir. Kümede gereken toplam rezervasyondan daha az kapasite varsa, uygulamanın oluşturulması başarısız olur.
Şimdi kapasite rezervasyonu örneğine bakalım:
Sol örnekte, uygulamalarda tanımlı uygulama kapasitesi yoktur. Küme Resource Manager her şeyi normal kurallara göre dengeler.
Sağdaki örnekte Application1'in aşağıdaki ayarlarla oluşturulduğunu düşünelim:
- Minimum Düğümler iki olarak ayarlandı
- ile tanımlanan bir uygulama Ölçümü
- NodeReservationCapacity / 20
PowerShell
New-ServiceFabricApplication -ApplicationName fabric:/AppName -ApplicationTypeName AppType1 -ApplicationTypeVersion 1.0.0.0 -MinimumNodes 2 -Metrics @("MetricName:Metric1,NodeReservationCapacity:20")
C#
ApplicationDescription ad = new ApplicationDescription();
ad.ApplicationName = new Uri("fabric:/AppName");
ad.ApplicationTypeName = "AppType1";
ad.ApplicationTypeVersion = "1.0.0.0";
ad.MinimumNodes = 2;
var appMetric = new ApplicationMetricDescription();
appMetric.Name = "Metric1";
appMetric.NodeReservationCapacity = 20;
ad.Metrics.Add(appMetric);
await fc.ApplicationManager.CreateApplicationAsync(ad);
Service Fabric, Application1 için iki düğümde kapasite ayırır ve Application1 içindeki hizmetler tarafından o anda tüketilmekte olan hiçbir yük olmasa bile Application2'den gelen hizmetlerin bu kapasiteyi kullanmasına izin vermez. Bu ayrılmış uygulama kapasitesi tüketilmiş olarak kabul edilir ve bu düğümdeki ve küme içindeki kalan kapasiteye göre sayılır. Rezervasyon, kalan küme kapasitesinden hemen düşülür, ancak ayrılmış tüketim yalnızca en az bir hizmet nesnesi üzerine yerleştirildiğinde belirli bir düğümün kapasitesinden düşülür. Bu sonraki rezervasyon, kaynaklar yalnızca gerektiğinde düğümlerde ayrıldığından esneklik ve daha iyi kaynak kullanımı sağlar.
Uygulama yükleme bilgilerini alma
Bir veya daha fazla ölçüm için tanımlanmış bir Uygulama Kapasitesine sahip her uygulama için, hizmetlerinin çoğaltmaları tarafından bildirilen toplam yük hakkındaki bilgileri edinebilirsiniz.
PowerShell:
Get-ServiceFabricApplicationLoadInformation –ApplicationName fabric:/MyApplication1
C#
var v = await fc.QueryManager.GetApplicationLoadInformationAsync("fabric:/MyApplication1");
var metrics = v.ApplicationLoadMetricInformation;
foreach (ApplicationLoadMetricInformation metric in metrics)
{
Console.WriteLine(metric.ApplicationCapacity); //total capacity for this metric in this application instance
Console.WriteLine(metric.ReservationCapacity); //reserved capacity for this metric in this application instance
Console.WriteLine(metric.ApplicationLoad); //current load for this metric in this application instance
}
ApplicationLoad sorgusu, uygulama için belirtilen Uygulama Kapasitesi hakkındaki temel bilgileri döndürür. Bu bilgiler En Düşük Düğümler ve En Fazla Düğümler bilgilerini ve uygulamanın şu anda kapsadığının sayısını içerir. Ayrıca, aşağıdakiler de dahil olmak üzere her uygulama yükleme ölçümü hakkında bilgi içerir:
- Ölçüm Adı: Ölçümün adı.
- Rezervasyon Kapasitesi: Bu Uygulama için kümede ayrılmış küme Kapasitesi.
- Uygulama Yükü: Bu Uygulamanın alt çoğaltmalarının toplam yükü.
- Uygulama Kapasitesi: Uygulama Yükü'ne izin verilen maksimum değer.
Uygulama Kapasitesi Kaldırılıyor
Uygulama kapasitesi parametreleri bir uygulama için ayarlandıktan sonra Uygulama API'lerini veya PowerShell cmdlet'lerini güncelleştir kullanılarak kaldırılabilir. Örneğin:
Update-ServiceFabricApplication –Name fabric:/MyApplication1 –RemoveApplicationCapacity
Bu komut, uygulama örneğinden tüm Uygulama kapasitesi yönetim parametrelerini kaldırır. Buna Minimum Düğümler, MaximumNodes ve varsa Uygulamanın ölçümleri dahildir. Komutun etkisi hemen gerçekleşir. Bu komut tamamlandıktan sonra, Küme Kaynak Yöneticisi uygulamaları yönetmek için varsayılan davranışı kullanır. Uygulama Kapasitesi parametreleri aracılığıyla Update-ServiceFabricApplication
/System.Fabric.FabricClient.ApplicationManagementClient.UpdateApplicationAsync()
yeniden belirtilebilir.
Uygulama Kapasitesine Yönelik Kısıtlamalar
Uygulama Kapasitesi parametrelerinde dikkat edilmesi gereken çeşitli kısıtlamalar vardır. Doğrulama hataları varsa hiçbir değişiklik gerçekleşmez.
- Tüm tamsayı parametreleri negatif olmayan sayılar olmalıdır.
- Minimum Düğümler hiçbir zaman MaximumNodes değerinden büyük olmamalıdır.
- Yük ölçümü kapasiteleri tanımlanmışsa şu kurallara uymaları gerekir:
- Düğüm Ayırma Kapasitesi En Fazla Düğüm Kapasitesi'nin üzerinde olmamalıdır. Örneğin, düğümdeki "CPU" ölçümü için kapasiteyi iki birimle sınırlayamaz ve her düğümde üç birim ayırmayı deneyebilirsiniz.
- MaximumNodes belirtilirse MaximumNodes ve Maksimum Düğüm Kapasitesi'nin çarpımının Toplam Uygulama Kapasitesi'nin üzerinde olmaması gerekir. Örneğin, "CPU" yük ölçümü için En Fazla Düğüm Kapasitesi'nin sekiz olarak ayarlandığını düşünelim. Ayrıca En Fazla Düğüm sayısını 10 olarak ayarladığınızı da varsayalım. Bu durumda, bu yük ölçümü için Toplam Uygulama Kapasitesi 80'den büyük olmalıdır.
Kısıtlamalar hem uygulama oluşturma hem de güncelleştirmeler sırasında uygulanır.
Uygulama Kapasitesi'ni kullanmama
- Uygulamayı belirli bir düğüm alt kümesiyle sınırlamak için Uygulama Grubu özelliklerini kullanmayı denemeyin. Başka bir deyişle, uygulamanın kümedeki belirli beş düğümde değil en fazla beş düğümde çalıştığını belirtebilirsiniz. Bir uygulamanın belirli düğümlerle kısıtlanması, hizmetler için yerleştirme kısıtlamaları kullanılarak gerçekleştirilebilir.
- Aynı uygulamadan iki hizmetin aynı düğümlere yerleştirildiğinden emin olmak için Uygulama Kapasitesi'ni kullanmayı denemeyin. Bunun yerine benzite veya yerleştirme kısıtlamaları kullanın.
Sonraki adımlar
- Hizmetleri yapılandırma hakkında daha fazla bilgi için Hizmetleri yapılandırma hakkında bilgi edinin
- Küme Resource Manager'ın kümedeki yükü nasıl yönettiği ve dengelediğinden haberdar olmak için yükü dengeleme makalesine göz atın
- Baştan başlayın ve Service Fabric Kümesi Kaynak Yöneticisi'ne giriş bilgileri edinin
- Ölçümlerin genel olarak nasıl çalıştığı hakkında daha fazla bilgi için Service Fabric Yük Ölçümleri'ne bakın
- Küme Kaynak Yöneticisi'nin kümeyi açıklamaya yönelik birçok seçeneği vardır. Bunlar hakkında daha fazla bilgi edinmek için Service Fabric kümesini açıklama makalesine göz atın