Ça reste un problème classique d'adminsys non ? Mon service marche-t-il quand le processus est lancé, quand le port est ouvert, quand le processus est capable de répondre à une requête sur le port concerné, quand le processus est capable de répondre correctement à une requête sur le port concerné ? Etc.
Détaillons avec un exemple, disons Elasticsearch (simplifions en disant que c'est un applicatif Java qui répond à des requêtes web) :
machine virtuelle Java (JVM) non lancée -> pas de processus
JVM lancée, mais l'applicatif pas vraiment -> processus, pas encore le port TCP 9200 ouvert mais ça ne va pas tarder
JVM lancée, applicatif en cours de lancement -> port ouvert, mais une requête va échouer, avec une réponse du type « pas encore dispo »
tout est lancé -> une requête de test de vie aura une réponse HTTP 200 OK
Bon ça c'était le cas « simple ». Prenons maintenant une grappe de serveurs Elasticsearch... Alors ma grappe est-elle fonctionnelle ? Les données sont-elles accessibles ? Etc.
Pour détailler : sur un serveur donné, j'ai bien lancé la JVM, l'applicatif a démarré, tout semble OK. Mais il faut par exemple deux serveurs maître au minimum (min_masters) pour que ça marche. Du coup mon serveur ne va pas encore répondre à mes requêtes ou bien répondre en erreur (« serveurs maîtres indisponibles »). Ou bien encore il faut que tel serveur de données soit là, parce que c'est lui qui héberge réellement les données, et alors l'ensemble de ma grappe n'est pas fonctionnelle (au sens il me manque des données) et une réponse sur mon serveur initial sera en erreur ou partielle.
Bref définir ce que veut dire « avoir bien démarré » n'est pas forcément trivial, et c'est pourtant une question classique.
[^] # Re: pid vs healthcheck
Posté par Benoît Sibaud (site web personnel) . En réponse au message systemd et ordre de démarrage. Évalué à 5.
Ça reste un problème classique d'adminsys non ? Mon service marche-t-il quand le processus est lancé, quand le port est ouvert, quand le processus est capable de répondre à une requête sur le port concerné, quand le processus est capable de répondre correctement à une requête sur le port concerné ? Etc.
Détaillons avec un exemple, disons Elasticsearch (simplifions en disant que c'est un applicatif Java qui répond à des requêtes web) :
Bon ça c'était le cas « simple ». Prenons maintenant une grappe de serveurs Elasticsearch... Alors ma grappe est-elle fonctionnelle ? Les données sont-elles accessibles ? Etc.
Pour détailler : sur un serveur donné, j'ai bien lancé la JVM, l'applicatif a démarré, tout semble OK. Mais il faut par exemple deux serveurs maître au minimum (min_masters) pour que ça marche. Du coup mon serveur ne va pas encore répondre à mes requêtes ou bien répondre en erreur (« serveurs maîtres indisponibles »). Ou bien encore il faut que tel serveur de données soit là, parce que c'est lui qui héberge réellement les données, et alors l'ensemble de ma grappe n'est pas fonctionnelle (au sens il me manque des données) et une réponse sur mon serveur initial sera en erreur ou partielle.
Bref définir ce que veut dire « avoir bien démarré » n'est pas forcément trivial, et c'est pourtant une question classique.