Heute hatte ich die Aufgabe, eine Integritätsprüfung für einen Dienst mit langer Laufzeit zu erstellen, bei dem es sich um ein Orchestrierungssystem zum Bereitstellen einer Web-App handelt.
Ich versuche herauszufinden, in welchem Umfang ein solcher Gesundheitscheck durchgeführt werden soll, und habe folgende Fragen zum Umfang des Gesundheitschecks gestellt:
- Ist es gut genug, den Dienst als fehlerfrei zu betrachten, wenn das Orchestrierungssystem meldet, dass der Task ausgeführt wird?
- Oder sollten wir jeden Dienst manuell anpingen?
- Oder sollte es weiter gehen und versuchen, sicherzustellen, dass die Web-App das tut, was sie tun soll, wie eine Webseite anzuzeigen?
- Muss der Healthcheck auch überprüfen, ob einige abhängige Dienste ebenfalls ausgeführt werden? Wie eine Datenbank oder das Orchestrierungssystem selbst. Oder liegt das in der Verantwortung eines anderen Gesundheitschecks?
- Und zu guter Letzt, wenn einer der abhängigen Dienste tot ist und die Web-App anschließend ausfällt, sollte die Web-App einen schlechten Gesundheitszustand melden, oder ist es ein guter Gesundheitszustand, weil es nicht der Fehler der Web-Apps ist?
Ich weiß, dass dies 5 separate Fragen sind, aber sie beziehen sich alle auf den Umfang einer Integritätsprüfung für einen Dienst mit langer Laufzeit, der eine Web-App bereitstellt. Daher hielt ich es für sinnvoller, sie in einer einzigen Frage zusammengefasst zu lassen.
Dies ist für mich schwer umzusetzen, da ich nicht sicher bin, was gesund ist oder wie ein Standard-Gesundheitscheck für so etwas aussehen sollte.
Was sollte ein Gesundheitscheck für diesen bestimmten Dienst enthalten?
quelle
Antworten:
Sie haben hier Ihre eigene Frage beantwortet. Die Definition eines Gesundheitschecks wird variieren, denn was gesund ist, variiert. Es hängt auch davon ab, was den Gesundheitscheck ausgibt.
Eine gute Frage, die Sie sich stellen sollten, lautet: "Funktioniert der überprüfte Dienst aus Sicht des Fragestellers wie erwartet?" Wenn Sie es sind, müssen Sie es definieren. Wenn es sich um ein anderes Team / eine andere Dienstleistung handelt, müssen Sie den Standard / die Spezifikation für Gesundheitsprüfungen ermitteln.
Wahrscheinlich haben Sie in einer großen Organisation einen Standard dafür, was ein Gesundheitscheck tun sollte. Finde das heraus.
Insbesondere hier bedeutet Ihr Webapp-Beispiel, dass es nicht fehlerfrei zurückkehren sollte, da die Webapp nicht fehlerfrei ist. Aber vielleicht würde Ihre Definition von "gesund" dies als "ok" beinhalten. Dies ist Teil der obigen Anforderungsdiskussion (auch wenn es sich nur um Ihren eigenen Code handelt).
Meine Empfehlung unter der Annahme, dass es nicht anderswo angegeben ist, wäre, eine Art Statuscode zu haben, der mit verschiedenen Fehlern assoziiert ist. Wenn Sie die Webanwendung abfragen, wird möglicherweise ein Fehler zurückgegeben, der besagt, dass "abhängiger Dienst tot ist", sodass Ihr Client (oder was auch immer den Healthcheck durchführt) den Grund für den Tod des Clients erkennen kann.
Für die bearbeiteten Fragen:
Nein, nur weil ein Prozess ausgeführt wird, heißt das nicht, dass er nicht hängt, überhaupt nicht funktioniert oder eine Vielzahl anderer Möglichkeiten bietet.
Dies kann je nach Umfang Ihrer Anwendungsfunktionalität funktionieren. Wenn die Überprüfung des Dienstes auf "Bist du am Leben?" Ping, dann ist dies möglicherweise alles, was erforderlich ist. Aber wenn der Dienst leicht "lebendig und ansprechbar, aber nicht wirklich funktionsfähig" sein könnte, müssen Sie möglicherweise auch andere Dinge überprüfen.
Ihr Healthcheck muss sicherstellen, dass die erwartete erforderliche Funktionalität wie erwartet funktioniert.
Wenn Ihr App returns „gesund“ und kann nicht tun , was es tun muß, dann kann man auch von der gesamten Health loszuwerden , wie es Fehlalarme geben wird (nicht zu verwechseln die erwähnen Teufel aus Menschen , die versuchen , das Problem zu debuggen - ‚hey Unser Webserver ist fehlerfrei. Warum wird die Seite nicht angezeigt? ').
Das hängt etwas davon ab. Wenn Ihr Dienst von einem anderen Dienst abhängt, sollte sich die Art dieser Interaktion in den API- / Netzwerkaufrufen widerspiegeln, die an ihn in Ihrer App gesendet und in den Integritätscheck integriert werden.
Zum Beispiel muss ein Webserver, der aus einer Datenbank liest, Statusinformationen über die darin integrierte Datenbank haben. Andernfalls stürzt die Webanwendung einfach ab, wenn die API-Aufrufe fehlschlagen. Sie können diese Aufrufe einfach modifizieren, um sie in Ihren Gesundheitscheck aufzunehmen.
Wenn Ihr Dienst jedoch Ereignisse an Benutzer sendet, die ohne Validierung zuhören, ist es für die Funktionalität Ihrer App weniger wichtig, dass die Benutzer am Leben sind. "Gesund" für Ihre App bedeutet, dass die Nachrichten gesendet und nicht empfangen werden.
Grundsätzlich ist es sinnvoll, wenn Ihr Dienst mit anderen Diensten sprechen und deren Zustand überprüfen muss, mindestens eine grundlegende Überprüfung für den Gesundheitscheck Ihres Dienstes durchzuführen. Dies sollte in Anbetracht dessen, was ich gerade gesagt habe, begrifflich Sinn machen, da Ihre Anwendung dies bereits handhaben wird (oder zufällig abstürzt, denke ich).
Dies ist im Grunde oben beantwortet. Meine Empfehlung wäre, dass Ihr Gesundheitscheck einen Code / eine Nachricht / alles, was diese Informationen enthält, zurückgibt. Beide Informationen sind wichtig: Der abhängige Dienst, den Ihr Dienst benötigt, ist nicht mehr verfügbar und Ihr Dienst funktioniert daher nicht wie erwartet.
quelle
Im Allgemeinen bedeutet ein Gesundheitscheck nur "Ist es am Leben und reagiert es?". Weitere Prüfungen sind hochspezialisiert und hängen vollständig von der Verwendung des Systems ab. Ob Sie mehr tun, um zu überprüfen, ob ein System Anforderungen korrekt verarbeitet, liegt bei Ihnen. Sie sollten jedoch zuerst die Grundlagen überprüfen, ob sie vorhanden sind, ob sie Anforderungen empfangen können und eine Antwort zurückgeben.
Die einfachste Methode zum Implementieren einer Integritätsprüfung besteht darin, einen Befehl zu schreiben, den der Dienst mit demselben Mechanismus verarbeitet, den auch andere Befehle verwenden, und der nur eine Bestätigung zurückgibt. Das zeigt, wie lebendig es ist und dass das System Antworten empfängt und verarbeitet.
Die Überprüfung abhängiger Systeme ist nicht Teil der Integritätsprüfung. Sie müssen sie einfach und in sich geschlossen halten. Fügen Sie nacheinander jedem abhängigen Dienst eine Integritätsprüfung hinzu. Auf diese Weise können Sie eine Liste lauffähiger, fehlerfreier Systeme abrufen und leicht feststellen, wann ein System ausfällt, welches es ist!
quelle
Nach meiner Erfahrung weisen kritische Dienste in der Regel die folgenden Merkmale auf:
Herzschlag
Wenn der Dienst regelmäßig ausgeführt wird, wird lediglich eine Zeile in eine Protokolldatei oder ähnliches geschrieben und ein Zeitstempel angegeben, der angibt, dass der Dienst zu einem bestimmten Zeitpunkt gestartet wurde.
Semmelbrösel
Ähnlich wie oben sind Breadcrumbs in der Regel nur ein Speicherauszug des Methodennamens (und gelegentlich von Parametern), um anzuzeigen, dass der Dienst den Dienstkörper erwartungsgemäß verarbeitet und wo sich dieser im Ablauf befindet. Da diese mehr Ausgabe generieren können, werden sie normalerweise von Konfigurationsdateien oder Ähnlichem gesteuert, sodass sie deaktiviert werden können, sobald der Dienst eingebettet wurde.
Es kann verlockend sein, viele andere Dinge hinzuzufügen, wie den Status verschiedener Server, Dienste und Datenbanken und dergleichen. Dies ist zweifellos wertvoll, aber ich rate davon ab, etwas zu umfangreiches zu schreiben. Diese Maßnahmen können zu Ihrer eigenen Beruhigung nützlich sein, werden jedoch häufig missbraucht, wenn die für die verschiedenen Berührungspunkte zuständigen Parteien wissen, dass sie vorhanden sind. Bevor Sie es wissen, können Sie eine Diagnose-App für das gesamte Unternehmen schreiben.
quelle