
Ich verwalte einen Webservice und für mein Unternehmen ist es sehr wichtig, zu erkennen und zu melden, wenn einer der Services ausfällt und wenn eine der ausgeführten Operationen zu lange dauert. Bisher gab es eine separate Webanwendung (einschließlich Front- und Backend), nur um alle 15 Minuten zufällige Operationen an diesen Endpunkten anzufordern, aber ich fand das kompliziert, da es die Wartung einer ganzen Webanwendung nur für diesen Zweck erfordert, und ich kenne viele kostenlose Webservices, die diese Aufgabe erfüllen sollten.
Ich habe AWS Healthchecks zum Ersetzen der Polling-Webanwendung eingerichtet und es funktioniert perfekt für den Betriebszeitteil. Jetzt betrifft meine Frage den Antwortzeitteil.
Alle diese API-Healthcheck-Dienste scheinen auf nicht sehr komplexe Anfragen vorbereitet zu sein. Sollte es also die Aufgabe der API sein, einen „Status“-Endpunkt für die Healthcheck-Dienste anzubieten und darin „OK“-Sachen wie Datenbanklatenz einzuschließen, oder sollte der „Healthchecker“ für die Ausführung komplexer Anfragen verantwortlich sein? Welcher Ansatz ist richtiger?
Danke!
Antwort1
Sie sollten die Datenbankleistung wahrscheinlich nicht über die Integritätsprüfpfade der Anwendung überwachen - es können einige gefährliche Fälle auftreten. Angenommen, Sie verwenden ASGs innerhalb von AWS und verwenden die LB-Integritätsprüfungen, um zu bestimmen, ob die ASG Maschinen rotieren soll. Wenn es zu Datenbankkonflikten kommt (die nichts mit Ihrer App zu tun haben), beginnt Ihre ASG damit, Knoten zu entfernen. Sie haben also nicht nur eine Datenbank mit schlechter Leistung, sondern auch eine erschöpfte ASG.
Normalerweise sollte die Leistung außerhalb des Integritätsbereichs überwacht werden. Wir verwenden statsd intensiv und pumpen alle unsere Messdaten, Anwendungen und Datenbanken hinein, damit wir darauf basierend Diagramme erstellen und Warnmeldungen ausgeben können.
Bedenken Sie beim Skalieren auch, dass die Geschwindigkeit Ihrer Integritätsprüfung ebenfalls skaliert wird. Wir haben einige Dienste, die Tausende von Integritätsprüfungsanforderungen pro Sekunde erhalten, und wenn jede dieser Anforderungen eine synthetische, teure Abfrage ausführt, würde unsere Datenebene offline gehen.
Die Logik wird auch komplexer, wenn Sie Caching-Ebenen hinzufügen – was soll der Integritätsprüfungs-Endpunkt zurückgeben, wenn die Datenbank fehlerfrei ist, Ihr KV-Cache jedoch nicht?
Obwohl eine End-to-End-Überwachung für eine effektive Überwachungsstrategie von entscheidender Bedeutung ist, würde ich für die vorhandenen Abfragemetriken, die an die Datenbank gesendet werden, dringend eine Out-of-Band-Überwachung empfehlen. Diese sind repräsentativ für die tatsächliche Benutzerleistung und bieten Ihnen eine quantifizierbare Kennzahl für die tatsächliche Leistung Ihrer Anwendung.