Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Menedżer zasobów klastra usługi Service Fabric zwykle zarządza zasobami klastra, rozkładając obciążenie (reprezentowane za pośrednictwem metryk) równomiernie w całym klastrze. Usługa Service Fabric zarządza pojemnością węzłów w klastrze i klastrze jako całością za pośrednictwem pojemności. Metryki i pojemność działają świetnie w przypadku wielu obciążeń, ale wzorce, które intensywnie korzystają z różnych instancji aplikacji Service Fabric, czasami wiążą się z dodatkowymi wymaganiami. Na przykład możesz chcieć:
- Zarezerwuj część zasobów na węzłach w klastrze dla usług wewnątrz instancji aplikacji o określonej nazwie.
- Ogranicz całkowitą liczbę węzłów, na których działają usługi w ramach nazwanej instancji aplikacji (zamiast rozkładać je na cały klaster)
- Definiowanie limitów w danej instancji aplikacji w celu ograniczenia liczby usług lub całkowitego zużycia zasobów przez te usługi.
Aby spełnić te wymagania, menedżer zasobów klastra usługi Service Fabric obsługuje funkcję o nazwie Grupy aplikacji.
Ograniczanie maksymalnej liczby węzłów
Najprostszym przypadkiem użycia pojemności aplikacji jest ograniczenie wystąpienia aplikacji do określonej maksymalnej liczby węzłów. Powoduje to skonsolidowanie wszystkich usług w danym wystąpieniu aplikacji na określoną liczbę maszyn. Konsolidacja jest przydatna, gdy próbujesz przewidzieć albo ograniczyć zużycie zasobów fizycznych przez usługi związane z danym wystąpieniem aplikacji.
Na poniższej ilustracji przedstawiono wystąpienie aplikacji z zdefiniowaną maksymalną liczbą węzłów i bez tej liczby:
W lewym przykładzie aplikacja nie ma zdefiniowanej maksymalnej liczby węzłów i ma trzy usługi. Menedżer zasobów klastra rozdzielił wszystkie repliki w sześciu dostępnych węzłach, aby osiągnąć najlepsze saldo w klastrze (zachowanie domyślne). W odpowiednim przykładzie widzimy tę samą aplikację ograniczoną do trzech węzłów.
Parametr, który kontroluje to zachowanie, nosi nazwę MaximumNodes. Ten parametr można ustawić podczas tworzenia aplikacji lub zaktualizować dla wystąpienia aplikacji, które było już uruchomione.
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);
W zestawie węzłów menedżer zasobów klastra nie gwarantuje, które obiekty usługi są umieszczane razem lub które węzły są używane.
Metryki aplikacji, obciążenie i pojemność
Grupy aplikacyjne umożliwiają również definiowanie metryk skojarzonych z danym nazwanym wystąpieniem aplikacji oraz możliwość przetwarzania tych metryk przez wystąpienie aplikacji. Metryki aplikacji umożliwiają śledzenie, rezerwowanie i ograniczanie zużycia zasobów usług wewnątrz tego wystąpienia aplikacji.
Dla każdej metryki aplikacji można ustawić dwie wartości:
- Łączna pojemność aplikacji — to ustawienie reprezentuje łączną pojemność aplikacji dla określonej metryki. Menedżer zasobów klastra nie zezwala na tworzenie nowych usług w tym wystąpieniu aplikacji, co spowodowałoby przekroczenie całkowitego obciążenia tej wartości. Załóżmy na przykład, że instancja aplikacji miała pojemność 10 i już była obciążona na pięć. Tworzenie usługi z całkowitym domyślnym obciążeniem wynoszącym 10 byłoby niedozwolone.
- Maksymalna pojemność węzła — to ustawienie określa maksymalne całkowite obciążenie aplikacji w jednym węźle. Jeśli obciążenie przekroczy tę pojemność, menedżer zasobów klastra przenosi repliki do innych węzłów, aby zmniejszyć obciążenie.
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);
Rezerwowanie pojemności
Innym typowym zastosowaniem dla grup aplikacji jest zapewnienie, że zasoby w klastrze są zarezerwowane dla danego wystąpienia aplikacji. Miejsce jest zawsze rezerwowane, gdy tworzona jest instancja aplikacji.
Rezerwowanie miejsca w klastrze dla aplikacji odbywa się natychmiast nawet wtedy, gdy:
- instancja aplikacji jest tworzona, ale nie zawiera jeszcze żadnych usług
- liczba usług w każdej instancji aplikacji zmienia się za każdym razem
- usługi istnieją, ale nie korzystają z zasobów
Rezerwowanie zasobów dla wystąpienia aplikacji wymaga określenia dwóch dodatkowych parametrów: MinimumNodes i NodeReservationCapacity
- MinimumNodes — definiuje minimalną liczbę węzłów, na których ma działać wystąpienie aplikacji.
- NodeReservationCapacity — to ustawienie dotyczy metryki dla aplikacji. Wartość jest ilością tej metryki zarezerwowanej dla aplikacji w dowolnym węźle, w którym działają usługi w tej aplikacji.
Połączenie MinimumNodes i NodeReservationCapacity gwarantuje minimalną rezerwację zasobów dla aplikacji w klastrze. Jeśli w klastrze jest mniej pojemności niż wymagana całkowita rezerwacja, tworzenie aplikacji zakończy się niepowodzeniem.
Przyjrzyjmy się przykładowi rezerwacji pojemności:
W lewym przykładzie aplikacje nie mają zdefiniowanej pojemności aplikacji. Menedżer zasobów klastra równoważy wszystko zgodnie z normalnymi regułami.
W przykładzie po prawej stronie załóżmy, że aplikacja Application1 została utworzona przy użyciu następujących ustawień:
- MinimumNodes ustawione na dwa
- Metryka aplikacji zdefiniowana za pomocą polecenia
- Pojemność rezerwacji węzła: 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 rezerwuje pojemność na dwóch węzłach dla Application1 i nie zezwala usługom z Application2 na korzystanie z tej pojemności, nawet jeśli aktualnie żadna usługa w Application1 nie wykorzystuje obciążenia. Zarezerwowana pojemność aplikacji jest uznawana za zużytą i zalicza się do pozostałej pojemności na tym węźle oraz w obrębie klastra. Rezerwacja jest odejmowana od pozostałej pojemności klastra natychmiast, jednak zużycie zarezerwowane jest odejmowane od pojemności określonego węzła tylko wtedy, gdy na nim znajduje się co najmniej jeden obiekt usługi. Ta późniejsza rezerwacja zapewnia elastyczność i lepsze wykorzystanie zasobów, ponieważ zasoby są rezerwowane na węzłach tylko w razie potrzeby.
Uzyskiwanie informacji o obciążeniu aplikacji
Dla każdej aplikacji, która ma pojemność aplikacji zdefiniowaną dla co najmniej jednej metryki, można uzyskać informacje o zagregowanym obciążeniu zgłoszonym przez repliki jej usług.
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
}
Zapytanie ApplicationLoad zwraca podstawowe informacje o pojemności aplikacji określonej dla aplikacji. Informacje te obejmują dane o minimalnych i maksymalnych węzłach oraz o liczbie węzłów aktualnie używanych przez aplikację. Zawiera również informacje o każdej metryce obciążenia aplikacji, w tym:
- Nazwa metryki: określenie metryki.
- Pojemność rezerwacji: pojemność klastra zarezerwowana w klastrze dla tej aplikacji.
- Obciążenie aplikacji: łączne obciążenie replik podrzędnych tej aplikacji.
- Pojemność aplikacji: maksymalna dozwolona wartość obciążenia aplikacji.
Usuwanie pojemności aplikacji
Po ustawieniu parametrów pojemności aplikacji dla aplikacji można je usunąć przy użyciu interfejsów API aktualizacji aplikacji lub poleceń cmdlet programu PowerShell. Na przykład:
Update-ServiceFabricApplication –Name fabric:/MyApplication1 –RemoveApplicationCapacity
To polecenie usuwa wszystkie parametry aplikacji zarządzania pojemnością z instancji aplikacji. Obejmuje to metryki MinimumNodes, MaximumNodes i metryki aplikacji, jeśli istnieją. Efekt polecenia jest natychmiastowy. Po zakończeniu tego polecenia menedżer zasobów klastra używa domyślnego zachowania do zarządzania aplikacjami. Parametry pojemności aplikacji można określić ponownie za pomocą polecenia Update-ServiceFabricApplication
/System.Fabric.FabricClient.ApplicationManagementClient.UpdateApplicationAsync()
.
Ograniczenia dotyczące pojemności aplikacji
Istnieje kilka ograniczeń dotyczących parametrów pojemności aplikacji, które muszą być przestrzegane. Jeśli występują błędy walidacji, nie zostaną wprowadzone żadne zmiany.
- Wszystkie parametry liczb całkowitych muszą być liczbami nie ujemnymi.
- MinimalneWęzły nigdy nie powinny być większe niż MaksymalneWęzły.
- Jeśli zdefiniowano pojemności dla metryki obciążenia, muszą one być zgodne z następującymi regułami:
- Pojemność rezerwacji węzła nie może być większa niż maksymalna pojemność węzła. Na przykład nie można ograniczyć pojemności metryki "CPU" w węźle do dwóch jednostek i spróbować zarezerwować trzy jednostki w każdym węźle.
- Jeśli określono wartość MaximumNodes, produkt MaximumNodes i maksymalna pojemność węzła nie może być większy niż łączna pojemność aplikacji. Załóżmy na przykład, że maksymalna pojemność węzła dla metryki obciążenia "CPU" jest ustawiona na osiem. Załóżmy również, że wartość maksymalnej liczby węzłów ustawiono na 10. W takim przypadku łączna pojemność aplikacji musi być większa niż 80 dla tej metryki obciążenia.
Ograniczenia są wymuszane zarówno podczas tworzenia aplikacji, jak i aktualizacji.
Jak nie używać pojemności aplikacji
- Nie należy próbować używać funkcji grupy aplikacji, aby ograniczyć aplikację do określonego podzestawu węzłów. Innymi słowy, można określić, że aplikacja działa w co najwyżej pięciu węzłach, ale nie na których określonych pięciu węzłach w klastrze. Ograniczenie aplikacji do określonych węzłów można osiągnąć, przy użyciu ograniczeń lokalizacji dla usług.
- Nie próbuj używać pojemności aplikacji, aby upewnić się, że dwie usługi z tej samej aplikacji są umieszczane w tych samych węzłach. Zamiast tego należy użyć powiązań lub ograniczeń dotyczących lokalizacji.
Następne kroki
- Aby uzyskać więcej informacji na temat konfigurowania usług, dowiedz się więcej o konfigurowaniu usług
- Aby dowiedzieć się, jak menedżer zasobów klastra zarządza obciążeniem klastra i równoważy obciążenie w klastrze, zapoznaj się z artykułem dotyczącym równoważenia obciążenia
- Rozpocznij od początku i uzyskaj wprowadzenie do usługi Service Fabric Cluster Resource Manager
- Aby uzyskać więcej informacji na temat ogólnego działania metryk, przeczytaj o metrykach obciążenia Service Fabric
- Menedżer zasobów klastra ma wiele opcji opisywania klastra. Aby dowiedzieć się więcej o nich, zapoznaj się z tym artykułem dotyczącym opisywania klastra usługi Service Fabric