Den App AutoScaler verwenden
Zuletzt aktualisiert am
In diesem Thema erfahren Sie, wie Sie den App AutoScaler verwenden. Cloud Foundry bietet Ihnen eine einfache Elastizität für Ihre Anwendungen. Sie können Anwendungsinstanzen nach Bedarf hoch- und herunterskalieren. Mit dem Service App AutoScaler lässt sich dieser Prozess anhand eines von Ihnen definierten Regelwerks auch automatisieren.
Die Service-Komponente App AutoScaler basiert auf einem Open-Source-Projekt. Den Quellcode finden Sie im öffentlichen App AutoScaler Repository.
App AutoScaler Dashboard in Stratos
Abschnitt betitelt „App AutoScaler Dashboard in Stratos“Der App AutoScaler bietet die Möglichkeit, die Rechenressourcen für Cloud Foundry Anwendungen anzupassen durch:
- Dynamische Skalierung auf Basis von Anwendungs-Performance-Metriken
- Zeitgesteuerte Skalierung auf Basis von Zeitplänen
Der App AutoScaler sorgt dafür, dass Ihre Anwendung die richtige Anzahl an Instanzen hat, um die Servicequalität zu halten und nur die Ressourcen zu nutzen, die Sie wirklich benötigen. Mit der Auto-Scaling-Funktion profitieren Sie von folgenden Vorteilen:
- Bessere Servicequalität: Auto-Scaling überwacht die Performance Ihrer Anwendung und skaliert sie horizontal nach oben oder unten, passend zum Ressourcenbedarf. So kann das in der Richtlinie definierte Servicequalitätsziel eingehalten werden.
- Höhere Verfügbarkeit: Auto-Scaling hilft, bei vorhersehbaren Lastspitzen rechtzeitig genügend Instanzen bereitzustellen. Dadurch werden Überlastung und Anwendungsabstürze während Lastspitzen vermieden.
- Kostensenkung: Auto-Scaling ermöglicht es Ihnen, nur für die Ressourcen zu zahlen, die Sie wirklich benötigen. Sie müssen keine starre Kapazitätsplanung mit fester Instanzanzahl vornehmen. Es spart Kosten, indem neue Instanzen nur bei Bedarf gestartet und bei Nichtbedarf wieder entfernt werden.
Der App AutoScaler wird als Cloud Foundry Service über die Open Service Broker API angeboten. Sie müssen den App AutoScaler Service zuerst über die Cloud Foundry CLI oder das Portal provisionieren und binden.
Eine Service-Instanz erstellen
Abschnitt betitelt „Eine Service-Instanz erstellen“cf create-service autoscaler autoscaler-free-plan <service-instance_name>Die Service-Instanz mit Ihrer Anwendung verbinden
Abschnitt betitelt „Die Service-Instanz mit Ihrer Anwendung verbinden“Sie können die Skalierungsrichtlinie zusammen mit dem Service Binding hinterlegen, indem Sie den Namen der Policy-Datei als Parameter des Service-Binding-Befehls angeben.
cf bind-service <app_name> <service_instance_name> -c <policy_file_name>Um den App AutoScaler von Ihrer Anwendung zu trennen, heben Sie das Service Binding der Instanz auf. Dadurch wird auch die Auto-Scaling-Richtlinie entfernt. Wenn keine Anwendung mehr gebunden ist, können Sie die Service-Instanz außerdem deprovisionieren.
cf unbind-service <app_name> <service_instance_name>
cf delete-service <service_instance_name>Einstellungen der App AutoScaler Richtlinie
Abschnitt betitelt „Einstellungen der App AutoScaler Richtlinie“Beispiel für eine JSON-Datei mit Skalierungsrichtlinie:
{ "instance_min_count": 1, "instance_max_count": 4, "scaling_rules": [ { "metric_type": "cpu", "threshold": 5, "operator": ">=", "adjustment": "+1" }, { "metric_type": "cpu", "threshold": 5, "operator": "<", "adjustment": "-1" } ]}App AutoScaler Schemata
Abschnitt betitelt „App AutoScaler Schemata“Der App AutoScaler erwartet eine in JSON geschriebene Policy-Datei mit den folgenden Schemata:
Richtlinie
Abschnitt betitelt „Richtlinie“| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
instance_min_count | int | true | minimale Anzahl an Instanzen |
instance_max_count | int | true | maximale Anzahl an Instanzen |
scaling_rules | JSON-array<scaling_rules> | Regeln für dynamische Skalierung | |
schedules | JSON-array | zeitgesteuerte Regeln |
Skalierungsregeln
Abschnitt betitelt „Skalierungsregeln“| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
metric_type | string | true | Siehe Liste unten. |
threshold | int | true | Grenzwert; eine Überschreitung (oder Unterschreitung je nach Operator) gilt als Verletzung. |
operator | string | true | >, <, >=, <= |
adjustment | string | true | Art der Anpassung der Instanzanzahl pro Skalierung. Unterstützt das Regex-Format
|
breach_duration_secs | int, Sekunden | false | Zeitdauer, nach der ein Skalierungsereignis ausgelöst wird, wenn die Verletzung andauert. |
cool_down_secs | int, Sekunden | false | Wartezeit, bevor die nächste Skalierung greift. |
Werte für metric_type
Abschnitt betitelt „Werte für metric_type “cpu- Kurzbezeichnung für “CPU utilization”, also die CPU-Auslastung Ihrer Anwendung in Prozent.memoryused- Absoluter Wert des verwendeten Speichers Ihrer Anwendung. Die Einheit der Metrikmemoryusedist “MB”.memoryutil- Kurzbezeichnung für “memory utilization”, also der prozentuale Anteil des verwendeten Speichers am insgesamt für die Anwendung zugewiesenen Speicher. Beispiel: Bei 100 MB Nutzung und 200 MB Speicher-Quota beträgtmemoryutil50%.responsetime- Durchschnittliche Zeit, welche die Anwendung in einem bestimmten Zeitraum zur Beantwortung einer Anfrage benötigt. Die Einheit vonresponsetimeist “ms” (Millisekunden).throughput- Gesamtzahl verarbeiteter Anfragen in einem bestimmten Zeitraum. Die Einheit vonthroughputist “rps” (Requests per second).- Benutzerdefinierte Metrik - Sie können einen eigenen Metriknamen definieren und eigene Metriken an den App AutoScaler senden, um weitere dynamische Skalierung auszulösen. Für gültige Metriknamen sind nur Buchstaben, Zahlen und ”_” erlaubt; die maximale Länge beträgt 100 Zeichen.
Zeitplanung
Abschnitt betitelt „Zeitplanung“| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
timezone | string | true | Verwendung der Zeitzonendefinition von Java |
recurring_schedule | JSON-array<recurring_schedules> | Zeitpläne, die wiederholt wirksam werden; siehe unten bei Wiederkehrender Zeitplan | |
specific_date | JSON-array<specific_date> | Zeitpläne, die nur einmal wirksam werden |
Wiederkehrender Zeitplan
Abschnitt betitelt „Wiederkehrender Zeitplan“| Name | Typ | Erforderlich | Beschreibung |
|---|---|---|---|
start_date | string, “yyyy-mm-dd” | false | Startdatum des Zeitplans; muss in der Zukunft liegen |
end_date | string, “yyyy-mm-dd” | false | Enddatum des Zeitplans; muss in der Zukunft liegen |
start_time | string, “hh:mm” | true | Startzeit des Zeitplans |
end_time | string, “hh:mm” | true | Endzeit des Zeitplans |
days_of_week / days_of_month | array | false | Wiederkehrende Tage einer Woche oder eines Monats; verwenden Sie [1,2,..7] oder [1,2,..31] |
instance_min_count | int | true | Minimale Instanzanzahl für diesen Zeitplan |
instance_max_count | int | true | Maximale Instanzanzahl für diesen Zeitplan |
initial_min_instance_count | int | false | Initiale minimale Instanzanzahl für diesen Zeitplan |
Wenn sich zwei Zeitpläne überschneiden, wird der zuerst startende Zeitplan garantiert angewendet, während der später startende vollständig ignoriert wird, zum Beispiel:
Schedule #1: ———sssssssssss——————————————Schedule #2: ——————————ssssssssss————————Schedule #3: ————————————————sssssssss———Bei der obigen Definition werden Zeitplan #1 und #3 angewendet, während Zeitplan #2 ignoriert wird.