2016-06-13 10 views
0

Wir fragen uns, ob es im Rahmen der Service-Upgrades in Service Fabric eine integrierte Möglichkeit zum Aufwärmen von Diensten gibt, ähnlich den verschiedenen Möglichkeiten, mit denen Sie z. IIS-basierte App-Pools, bevor sie von Anforderungen betroffen sind. Im Idealfall möchten wir, dass die einzelnen Dienste einige Aufwärmaufgaben als Teil ihrer Initialisierung ausführen (Cache-Laden, Wiederherstellung usw.), bevor sie als gestartet betrachtet werden und für andere Dienste verfügbar sind. Diese Aufwärmphase sollte Teil der Upgradedomänenverarbeitung sein, sodass der Aktualisierungsprozess warten sollte, bis die Aufwärmphase abgeschlossen und der Dienst als "OK/Bereit" gemeldet wurde.Warmup-Dienste beim Upgrade in Service Fabric

Wie gehen andere mit solchen Szenarien um, indem sie den Prozess für die Signalisierung an die Dienststruktur steuern, dass der bestimmte Dienst vollständig gestartet wurde und bereit ist, von anderen Diensten kontaktiert zu werden?

Antwort

1

In der Gesundheitspolitik gibt es dieses Konzept:

HealthCheckWaitDurationSec Die Zeit (in Sekunden) zu warten, nachdem das Upgrade auf der Upgrade-Domäne beendet hat, bevor Service-Stoff die Gesundheit der Anwendung auswertet. Diese Dauer kann auch als der Zeitpunkt betrachtet werden, zu dem eine Anwendung ausgeführt werden sollte, bevor sie als fehlerfrei betrachtet werden kann. Wenn die Integritätsprüfung erfolgreich ist, wird der Upgrade-Prozess mit der nächsten Upgrade-Domäne fortgesetzt. Wenn die Integritätsprüfung fehlschlägt, wartet Service Fabric auf ein Intervall (das UpgradeHealthCheckInterval), bevor die Integritätsprüfung erneut wiederholt wird, bis HealthCheckRetryTimeout erreicht ist. Der Standardwert und der empfohlene Wert sind 0 Sekunden.

Source

Dies ist eine obwohl Wartezeit festgelegt.

Sie können auch Health-Ereignisse senden yourself. Zum Beispiel können Sie während des Aufwärmens den Status 'Unbekannt' melden. Passen Sie Ihre Integritätsrichtlinie (HealthCheckWaitDurationSec) an, um dies zu überprüfen.

+0

Danke für die Antwort @LoekD. Wir haben dies versucht, aber der Upgrade-Prozess wird unabhängig von dieser Wartedauer von der ursprünglichen Upgrade-Domäne fortgesetzt. Nach allem, was wir bisher gelesen haben, scheint es, als müssten wir sehr früh ein "Unknown Health" -Ereignis aussenden und dann nach dem Aufwärmen auf OK setzen. –

0

Berichterstattung Gesundheit kann helfen. Sie können nicht "Unbekannt" melden, Sie müssen Fehler sehr früh melden und dann den Fehler löschen, wenn Ihr Dienst bereit ist. Warnung und Ok haben keinen Einfluss auf das Upgrade. Um den Fehler zu beheben, kann Ihr Dienst den Status Health Ok, RemoveWhenExpired = true, niedrige TTL (lesen Sie mehr unter how to report).

Sie müssen HealthCheckRetryTimeout basierend auf der maximalen Aufwärmzeit erhöhen. Andernfalls, wenn eine Zustandsprüfung durchgeführt wird und der Cluster auf Fehler überprüft wird, schlägt das Upgrade fehl (und wird gemäß der Richtlinie zurückgesetzt oder angehalten).

also die Reihenfolge der Ereignisse ist:

  • Ihre Serviceberichte Fehler - „Warming im Gang up“
  • Upgrade wartet auf festen HealthCheckWaitDurationSec (Sie können diese Zeit min aufwärmen)
  • Aktualisierung führt Systemdiagnosen durch: Wenn der Dienst noch nicht betriebsbereit ist, lautet der Integritätszustand Fehler. Aktualisieren Sie daher erneut, bis entweder HealthCheckRetryTimeout erreicht ist oder Ihr Dienst nicht mehr in Fehler ist (Aufwärmen abgeschlossen und der Dienst hat den Fehler behoben). .
+0

Entschuldigung dafür, dass ich den Ball auf diesen, @ oana-platon, fallen lasse.Ich habe dies gerade getestet und habe eine funktionierende Lösung, die den Fortschritt der Upgrade-Domäne verzögert, bis der Dienst in OK übergeht, gesteuert durch benutzerdefinierte Gesundheitsereignisse (siehe https://github.com/enemaerke/servicefabric-upgradetests). –