Uygulama Gruplarına Giriş

Service Fabric'in Küme Resource Manager genellikle yükü (Ölçümler ile gösterilir) kümeye 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 kullanan desenler bazen ek gereksinimler getirir. Örneğin, şunu yapmak isteyebilirsiniz:

  • Belirli bir adlandırılmış uygulama örneğindeki hizmetler için kümedeki düğümlerde kapasite ayırma
  • Adlandırılmış bir uygulama örneği içindeki hizmetlerin üzerinde çalıştığı 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

Bu gereksinimleri karşılamak için Service Fabric Kümesi Resource Manager 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 durumdur. 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ğindeki hizmetler tarafından fiziksel kaynak kullanımını tahmin etmeye veya sınırlamaya çalışırken yararlı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:

En Fazla Düğüm Sayısını Tanımlayan Uygulama Örneği

Sol örnekte uygulamanın tanımlı en fazla düğüm sayısı yoktur ve üç hizmeti vardır. Küme Resource Manager, kümedeki 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ışı denetleen 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 Resource Manager, 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 kapasitesi olduğunu ve zaten beş yüke sahip olduğunu varsayalım. Toplam varsayılan yük değeri 10 olan bir hizmetin oluşturulmasına izin verilmez.
  • En Fazla Düğüm Kapasitesi – Bu ayar, tek bir düğümdeki uygulama için toplam yük üst sınırını belirtir. Yük bu kapasitenin üzerine çıkarsa, 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 şu durumlarda bile hemen gerçekleşir:

  • uygulama örneği oluşturuldu ancak içinde henüz hizmet yok
  • uygulama örneği içindeki hizmet sayısı her seferinde değişiyor
  • hizmetler var ancak kaynakları kullanmıyor

Bir uygulama örneği için kaynak ayırmak 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.

Minimum Düğümler ve NodeReservationCapacity değerlerinin birleştirilmesi, küme içindeki uygulama için en düşük yük ayırmasını garanti eder. Kümede gereken toplam rezervasyondan daha az kapasite varsa, uygulamanın oluşturulması başarısız olur.

Şimdi kapasite rezervasyonu örneğine göz atalım:

Ayrılmış Kapasite Tanımlayan Uygulama Örnekleri

Sol örnekte, uygulamaların tanımlı bir 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'deki hizmetlerin bu kapasiteyi kullanmasına izin vermez. Bu ayrılmış uygulama kapasitesi tüketilmiş olarak kabul edilir ve bu düğümde ve küme içinde 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 yerleştirildiğinde belirli bir düğümün kapasitesinden düşülür. Bu sonraki rezervasyon, kaynaklar yalnızca gerektiğinde düğümlere 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 alabilirsiniz.

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 kapsamakta olduğu sayıyı içerir. Ayrıca her uygulama yükleme ölçümü hakkında aşağıdakiler gibi bilgiler de 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. Örnek:

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, MaximumNode'lar ve varsa Uygulamanın ölçümleri dahildir. Komutun etkisi hemen gerçekleşir. Bu komut tamamlandıktan sonra Küme Resource Manager 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 uyulması 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.
  • Bir yük ölçümü için kapasiteler 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 ç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ı 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ırılacağını belirtebilirsiniz. Bir uygulamanın belirli düğümlerle sınırlandırılması, 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 benzim veya yerleştirme kısıtlamaları kullanın.

Sonraki adımlar