Jest to trudne do wdrożenia ze względu na definicję tego, co jest zdrowe
Odpowiedziałeś tutaj na swoje pytanie. Definicja kontroli zdrowia będzie się różnić, ponieważ to, co jest zdrowe, jest różne. Zależy to również od tego, co wydaje kontrolę zdrowia.
Dobrym pytaniem, jakie należy sobie zadać, jest „z perspektywy pytającego, czy sprawdzona usługa działa zgodnie z oczekiwaniami?” Jeśli to ty, musisz to zdefiniować. Jeśli jest to inny zespół / usługa, musisz określić, jaki jest standard / specyfikacja kontroli zdrowia.
Prawdopodobnie w dużej organizacji będziesz miał jakiś standard tego, co powinna zrobić kontrola zdrowia. Rozwiąż to.
W szczególności tutaj przykład twojej aplikacji internetowej oznacza, że nie powinna ona być zdrowa, ponieważ aplikacja internetowa nie jest zdrowa. Ale być może twoja definicja „zdrowego” zawierałaby to jako „ok”. Jest to część powyższej dyskusji na temat wymagań (ponownie, nawet jeśli jest to tylko twój własny kod).
Moim zaleceniem, zakładając, że nie jest ono określone gdzie indziej, byłoby skojarzenie jakiegoś kodu statusu z różnymi awariami. Podczas zapytania do aplikacji internetowej może zostać zwrócony błąd z informacją, że „usługa zależna nie działa”, dzięki czemu klient (lub cokolwiek, co wykonuje sprawdzanie kondycji) może poznać przyczynę śmierci klienta.
W przypadku edytowanych pytań:
Czy wystarczy uznać usługę za zdrową, jeśli system koordynacji zgłasza, że zadanie jest uruchomione?
Nie, tylko dlatego, że proces jest uruchomiony, nie oznacza, że nie jest zawieszony, całkowicie niefunkcjonalny lub wiele innych możliwości.
A może powinniśmy ręcznie pingować każdą usługę?
Może to działać, w zależności od zakresu funkcjonalności aplikacji. Jeśli weryfikacja usługi odpowiada „Czy żyjesz?” ping, to może być wszystko, co jest wymagane. Ale jeśli usługa może być „żywa i responsywna, ale faktycznie nie działa”, być może trzeba też sprawdzić inne rzeczy.
A może powinien pójść dalej i spróbować upewnić się, że aplikacja internetowa robi to, co powinna, na przykład wyświetlać stronę internetową?
Kontrola zdrowia musi zapewnić, że oczekiwana wymagana funkcjonalność działa zgodnie z oczekiwaniami.
Jeśli przywracany APP „zdrowy” i nie można zrobić to, co trzeba zrobić, równie dobrze można pozbyć się całego Healthcheck jak to daje fałszywe alarmy (nie wspominając mylić cholery z ludzi próbujących debugować problem - „hey nasz serwer pokazuje, dlaczego strona nie jest widoczna?).
Czy kontrola zdrowia musi również sprawdzać, czy niektóre usługi zależne również działają? Jak baza danych lub sam system orkiestracji. Czy jest to odpowiedzialność za kolejną kontrolę stanu zdrowia?
To trochę zależy. Jeśli Twoja usługa zależy od innej usługi, charakter tej interakcji powinien zostać odzwierciedlony w połączeniach API / połączeniach sieciowych wysyłanych do niej w Twojej aplikacji i włączanych do kontroli poprawności.
Na przykład serwer WWW odczytujący z bazy danych musi mieć wbudowane w nią informacje o stanie - w przeciwnym razie aplikacja internetowa ulegnie awarii, jeśli wywołania interfejsu API zakończą się niepowodzeniem. Możesz w trywialny sposób modyfikować te połączenia, aby włączyć je do kontroli zdrowia.
Jeśli jednak Twoja usługa wysyła zdarzenia do konsumentów, którzy nasłuchują, bez jakiejkolwiek weryfikacji, to dla funkcjonalności aplikacji nie ma większego znaczenia, że konsumenci żyją. „Zdrowe” do Twojej aplikacji to wysyłanie wiadomości, a nie ich odbieranie.
Zasadniczo, jeśli twoja usługa musi i tak rozmawiać z innymi usługami i zweryfikować ich kondycję, sensownie jest mieć przynajmniej podstawowy poziom kontroli w tym celu dla kontroli kondycji twojej usługi. Powinno to mieć sens koncepcyjny, biorąc pod uwagę to, co właśnie powiedziałem, ponieważ twoja aplikacja już sobie z tym poradzi (lub, jak sądzę, przypadkowa awaria).
I na koniec, jeśli jedna z usług zależnych nie działa, a aplikacja internetowa następnie ulegnie awarii, to czy powinna ona zgłosić zły stan zdrowia, czy też jest dobry, ponieważ nie jest to wina aplikacji internetowych?
Odpowiedzi na to w zasadzie powyżej. Radzę, aby sprawdzanie stanu zdrowia zwróciło kod / wiadomość / cokolwiek, co daje te informacje. Obie informacje są ważne: że usługa zależna, której potrzebuje twoja usługa, jest martwa i że twoja usługa nie będzie działać zgodnie z oczekiwaniami.