Mar 12, 2022
developmentWie kann / soll ein Healthendpoint aus akademischer Sicht ausschauen?
Ich habe eine interessante Problemstellung bearbeitet: Wie könnte ein Health-Endpoint ausschauen? Nach kurzer Recherche im Internet:
- the status of the connections to the infrastructure services used by the service instance
- the status of the host, e.g. disk space
- application specific logic
(Quelle: https://microservices.io/patterns/observability/health-check-api.html)
Meine Meinung dazu:
.NET Core 2.2 hat es native enhalten: Health checks in ASP.NET Core. So wird z.B. bei SQL Server mit SELECT 1
überprüft, ob die Verbindung und die Authentifizierung funktioniert.
Wie immer würde ich das gerne mit theoretischen Sichtweisen verschmelzen.
In der Theorie spricht man von:
Microservices grenzen sich klar ab:
„The high-level definition of microservice architecture (microservices) is an architectural style that functionally decomposes an application into a set of services. Note that this definition doesn’t say anything about size. Instead, what matters is that each service has a focused, cohesive set of responsibilities
Daher:
Weitere Eigenschaften von Microservices:
Zusammengefasst: Wir interessieren uns primär für den Connector. Weil ob die Festplatte voll ist oder der Cache vollläuft, sehe ich eher bei Metriken, welche dann ggf. einen Alarm triggern. Interna der Komponenten (Logik & Daten) sehe ich ebenfalls nicht beim Health-Endpoint.
Weiter geht es mit folgenden Definitionen:
Errors sind dabei von größtem Interesse, da sie erkennt werden können, bevor sie zu einem Failure führen. Mich interessiert daher bei jedem System:
Im Umkehrschluss zu oben: Es gibt nichts schlimmeres als 1000 „java.net.ConnectException: Connection refused“ in den Logs zu haben. Besser finde ich, dieses Problem zu abstrahieren. E.g.:
Hier kann man – so finde ich – viel saubere Metriken drauf machen. Weil für einen bestimmten Type: Connection-Issues = Max(Anzahl der Systeme)
– viel übersichtlicher, als man schreibt stupide bei jedem Problem eine Metrik.
Hat man den Fehler behoben:
Wie könnte jetzt also ein Healthendpoint ausschauen, der das oben alles berücksichtigt? Ein Beispiel: