Chapitre 219 minIntermédiaire
Architecture d'un service : composants, dépendances et flux
Par Josselyn C., prof de BTS SIO. Mis à jour le .
À la fin de ce chapitre, tu sauras
- décomposer un service en composants ;
- recenser ses dépendances et prévoir son mode dégradé ;
- écrire la matrice des flux d'un service ;
- repérer les points uniques de défaillance et calculer la disponibilité d'une chaîne.
4 exercices corrigés1 schéma
L'architecture d'un service est la description de tout ce dont il a besoin pour fonctionner : ses composants (application, base de données, serveurs, réseau), les autres services dont il dépend (annuaire, DNS, messagerie, sauvegarde) et les flux réseau qui les relient. La dessiner avant de déployer, c'est savoir ce qu'il faut installer, ce qu'il faut ouvrir sur le pare-feu, ce qu'il faut tester et ce qui peut tomber en panne. Ce chapitre décompose un service, recense ses dépendances, écrit sa matrice des flux et calcule la disponibilité d'une chaîne de composants.
Les composants d'un service
Un service vu par l'utilisateur, c'est une adresse dans un navigateur ou une icône sur un poste. Derrière, on retrouve presque toujours les mêmes familles de composants, quel que soit le service. Les lister une par une est la meilleure façon de ne rien oublier.
| Famille | Rôle | Prêt'Matos (application web) | GLPI (outil d'assistance) |
|---|---|---|---|
| Accès utilisateur | Ce que l'utilisateur ouvre | Navigateur des postes du VLAN 10 et des commerciaux en VPN | Navigateur ; agent d'inventaire sur chaque poste |
| Réseau | Ce qui transporte les requêtes | VLAN 10 POSTES vers VLAN 21 APPLIS, à travers le pare-feu pfSense | VLAN 10 vers VLAN 20 SERVEURS, à travers pfSense |
| Point d'entrée | Le nom, le certificat, le frontal | pretmatos.ad.sorbier.example, certificat de l'autorité interne Sorbier-AC, reverse proxy Caddy | glpi.ad.sorbier.example, certificat de Sorbier-AC, Nginx |
| Application | Le code qui rend le service | API Node.js 24 (Express 5) et interface React, en conteneurs | GLPI 12 sur PHP-FPM |
| Données | Ce qui doit survivre à tout | Base MySQL 8.4 dans un volume Docker | Base MariaDB, dossier des pièces jointes |
| Hébergement | Ce qui fait tourner le reste | VM srv-pretmatos (Debian 13) sur l'hyperviseur Proxmox VE | VM srv-glpi (Debian 13) sur Proxmox VE |
| Services d'infrastructure | Les services techniques utilisés | Annuaire en LDAPS, DNS, NTP, relais de courriel srv-intranet | Annuaire en LDAPS, DNS, NTP, relais de courriel, boîte aux lettres du support |
| Exploitation | Ce qui protège et surveille | Sauvegarde vers srv-partages, Zabbix et Wazuh sur srv-journaux | Les mêmes |
| Fournisseurs externes | Ce qui vient de l'extérieur | Registre d'images ghcr.io, dépôts Debian | Site de l'éditeur pour les mises à jour, dépôts Debian |
Trois vues d'une même architecture
Selon la personne à qui tu parles, tu ne dessines pas la même chose. On distingue trois vues, de la plus proche du métier à la plus technique :
| Vue | Elle répond à | Elle montre | Pour qui |
|---|---|---|---|
| Fonctionnelle | Que fait le service, pour qui ? | Les acteurs (salarié, logistique), leurs actions (réserver, enregistrer un retour), les échanges avec d'autres services (rappel par courriel) | La MOA, les utilisateurs, la commission en début d'oral |
| Applicative | Quelles briques logicielles, et comment se parlent-elles ? | Le front, l'API, la base, l'annuaire, le relais de courriel, avec les protocoles (HTTPS, LDAPS, SMTP) | Les développeurs, l'équipe d'exploitation |
| Technique (ou d'infrastructure) | Où tourne chaque brique ? | Les serveurs, les VLAN, les adresses IP, les ports, le pare-feu, la sauvegarde | Les administrateurs, le support de niveau 2 |
Dans un portfolio, une vue technique lisible est souvent la plus utile ; pour une application, ajoute la vue applicative, qui montre comment les briques logicielles se parlent. Voici la vue technique de Prêt'Matos, où l'on voit aussi les briques applicatives dans la machine virtuelle.
Les dépendances et le mode dégradé
Une dépendance est un autre service ou composant sans lequel le tien ne fonctionne pas, ou fonctionne moins bien. Pour chacune, pose trois questions : qu'est-ce qui se passe si elle tombe ? Le service peut-il continuer en mode dégradé, c'est-à-dire en rendant l'essentiel avec des fonctions en moins ? Qui faut-il prévenir ?
| Dépendance de Prêt'Matos | Si elle tombe | Mode dégradé possible | Qui la gère |
|---|---|---|---|
| Base MySQL | Plus rien ne fonctionne : ni lecture ni réservation | Aucun : c'est une dépendance forte | Moussa (exploitation) |
| Annuaire (LDAPS) | Plus personne ne peut se connecter ; les sessions ouvertes continuent jusqu'à leur expiration | Aucun pour les nouvelles connexions ; la logistique note les sorties sur papier | Chloé et Moussa (Active Directory) |
Relais de courriel srv-intranet | Les rappels ne partent plus ; le reste fonctionne | Oui : l'application garde les courriels en file et les renvoie au retour du relais, et la logistique consulte la liste des retours du lendemain | Moussa |
| DNS | Le nom ne se résout plus ; l'application elle-même ne trouve plus l'annuaire | Non pour les utilisateurs (on ne leur donne pas l'adresse IP : le certificat ne la couvre pas) | Chloé et Moussa |
Certificat Sorbier-AC | À son expiration, les navigateurs affichent une alerte de sécurité | Non : on n'apprend pas aux salariés à cliquer sur « continuer » | Moussa, avec une alerte 30 jours avant |
| Sauvegarde, supervision | Rien de visible tout de suite ; c'est la prochaine panne qui coûtera cher | Le service tourne, mais sans filet | Moussa |
Registre ghcr.io | Impossible de déployer une nouvelle version ; la version en service continue | Oui : on reporte le déploiement | Lina et Yanis |
Ce tableau prépare trois choses : les tests d'intégration (on vérifie chaque liaison, chapitre 4), la supervision (on surveille chaque dépendance forte, chapitre 7) et la documentation du support (le niveau 1 sait quoi répondre quand un utilisateur ne reçoit plus ses rappels).
La matrice des flux
La matrice des flux liste toutes les communications réseau dont le service a besoin : qui ouvre la connexion (la source), vers qui (la destination), avec quel protocole et quel port, et pourquoi. C'est le document que l'administrateur du pare-feu attend pour écrire ses règles, et celui que tu relis quand un flux est bloqué.
| N° | Source | Destination | Protocole et port | Raison | Passe par pfSense ? |
|---|---|---|---|---|---|
| F1 | Postes, VLAN 10 (192.168.10.64/26) | srv-pretmatos (192.168.21.130) | TCP 443 (HTTPS) | Les salariés utilisent l'application | Oui, règle sur l'interface POSTES |
| F2 | Commerciaux en VPN OpenVPN (10.8.1.0/24) | srv-pretmatos | TCP 443 | Réserver depuis un déplacement | Oui, règle sur l'onglet OpenVPN ; ajouter aussi 192.168.21.0/24 aux réseaux locaux (IPv4 Local Network) du serveur OpenVPN, qui ne pousse que 192.168.10.0/24 |
| F3 | srv-pretmatos | srv-ad, srv-ad2 (.177, .181) | TCP 636 (LDAPS) | Vérifier l'identifiant et le mot de passe, lire les groupes | Oui, interface APPLIS |
| F4 | srv-pretmatos | srv-ad, srv-ad2 | TCP et UDP 53, UDP 123 | Résolution des noms, heure | Oui, interface APPLIS |
| F5 | srv-pretmatos | srv-intranet (192.168.21.10) | TCP 25 (SMTP) | Déposer les rappels au relais | Non : même VLAN |
| F6 | srv-pretmatos | srv-partages (192.168.10.185) | TCP 2049 (NFS) | Sauvegarde nocturne de la base | Oui, interface APPLIS |
| F7 | srv-journaux (192.168.10.180) | srv-pretmatos | TCP 10050 ; TCP 443 | Agent Zabbix en contrôle passif ; scénario web | Oui, interface SERVEURS |
| F8 | srv-pretmatos | srv-journaux | TCP 1514 et 1515 | Agent Wazuh : envoi des journaux, enrôlement | Oui, interface APPLIS |
| F9 | srv-pretmatos | Internet (ghcr.io, dépôts Debian) | TCP 443 | Télécharger les images et les mises à jour | Oui, interface APPLIS, NAT sortant |
| F10 | Bastion (192.168.10.210) | srv-pretmatos | TCP 22 (SSH) | Administration | Oui ; déjà couvert par la règle du bastion |
Quatre règles pour une matrice juste :
- La source est celle qui ouvre la connexion. Zabbix interroge l'agent (F7) : la source est
srv-journaux. Le pare-feu à états laisse passer les réponses sans règle de retour (pare-feu à états). - Un flux par besoin, avec sa raison. Une ligne «
srv-pretmatosvers tout, tous ports » n'est pas une matrice, c'est un aveu d'ignorance. - Rien vers la base de données depuis l'extérieur de la VM. Le conteneur MySQL n'est joignable que par l'API, sur un réseau Docker interne : aucun flux 3306 dans la matrice.
- Le chemin compte. Un flux à l'intérieur d'un même VLAN (F5) ne passe pas par pfSense : il ne se filtre qu'avec le pare-feu de la machine. Un flux entre deux VLAN se règle sur l'interface d'entrée de la source (de la matrice des flux aux règles).
Les ports qui reviennent le plus souvent dans les services du BTS :
| Port | Protocole | Service |
|---|---|---|
| 22 | TCP | SSH, SFTP |
| 25, 587 | TCP | SMTP (relais), soumission authentifiée |
| 53 | TCP, UDP | DNS |
| 123 | UDP | NTP |
| 389, 636 | TCP | LDAP, LDAPS |
| 443 | TCP (et UDP pour HTTP/3) | HTTPS |
| 445 | TCP | SMB (partages Windows) |
| 993 | TCP | IMAPS |
| 1514, 1515 | TCP | Agent Wazuh |
| 2049 | TCP | NFS v4 |
| 3306 | TCP | MySQL, MariaDB |
| 3389 | TCP | Bureau à distance (RDP) |
| 10050, 10051 | TCP | Agent Zabbix (passif), serveur Zabbix (actif) |
Les points uniques de défaillance
Un point unique de défaillance (single point of failure, SPOF) est un composant dont la panne arrête tout le service, parce que rien ne le remplace. Dans l'architecture de Prêt'Matos, il y en a plusieurs : l'hôte Proxmox (s'il n'est pas en cluster), la VM srv-pretmatos, le conteneur MySQL, le pare-feu. L'annuaire, lui, n'en est pas un : deux contrôleurs de domaine se remplacent.
Supprimer tous les SPOF coûte cher : un deuxième serveur, une base répliquée, un pare-feu de secours. Pour un service interne utilisé aux heures de bureau, on accepte souvent un SPOF à condition de savoir le réparer vite : une sauvegarde testée, une procédure de restauration écrite, un délai annoncé. C'est ce que dit la fiche service : 4 h ouvrées pour restaurer. Le cours Haute disponibilité montre comment supprimer un SPOF quand le besoin le justifie.
La disponibilité d'une chaîne de composants
La disponibilité est la part du temps où le service fonctionne : 99 % sur un mois de 30 jours, c'est 7 h 12 min d'arrêt au plus. Quand un service a besoin de plusieurs composants à la fois (montés en série), sa disponibilité est le produit des leurs. Quand deux composants se remplacent (montés en parallèle), l'ensemble n'est indisponible que si les deux le sont en même temps.
En série : A = A1 × A2 × … × An
En parallèle : A = 1 − (1 − A1) × (1 − A2)
Pour Prêt'Matos, en prenant pour chaque composant une disponibilité estimée (constatée sur l'année passée pour l'existant) :
| Composant | Disponibilité | Montage |
|---|---|---|
| Pare-feu pfSense | 99,9 % | Série |
| Hôte Proxmox | 99,8 % | Série |
| VM et application | 99,5 % | Série |
| Annuaire : deux contrôleurs à 99 % chacun | 1 − 0,01 × 0,01 = 99,99 % | Parallèle, puis en série avec le reste |
A = 0,999 × 0,998 × 0,995 × 0,9999
≈ 0,99192, soit environ 99,19 %
Le service est moins disponible que son composant le plus faible (99,5 %) : chaque maillon retire un peu. Sur 30 jours (720 heures), cela laisse environ 5 h 49 min d'arrêt. Avec un seul contrôleur de domaine à 99 %, on tomberait à 98,21 % : environ 12 h 53 min d'arrêt par mois. Le second contrôleur fait gagner plus que n'importe quel réglage de l'application. Les calculs détaillés et les pièges (plage de service, maintenances prévues) sont dans le cours Supervision.
Documenter l'architecture
Le dossier d'architecture technique (DAT) rassemble tout ce chapitre en un document que l'équipe d'exploitation garde à jour. Pour un service de PME, quelques pages suffisent :
| Rubrique | Contenu |
|---|---|
| Présentation | La fiche service du chapitre 1 |
| Schémas | Vue applicative et vue technique, datées, avec les adresses et les ports |
| Composants | Chaque serveur, conteneur ou logiciel, avec sa version et son support (date de fin de maintenance) |
| Dépendances | Le tableau des dépendances et des modes dégradés |
| Matrice des flux | Celle de ce chapitre, avec la référence des règles du pare-feu |
| Comptes et secrets | Les comptes de service (svc-pretmatos pour l'annuaire), où sont rangés les secrets, qui y a accès ; jamais les mots de passe eux-mêmes |
| Sauvegarde et restauration | Quoi, quand, où, combien de temps on garde, comment restaurer |
| Supervision | Ce qui est surveillé, les seuils, qui reçoit les alertes |
La date de fin de maintenance de chaque composant compte autant que sa version : Node.js 24 est maintenu jusqu'à fin avril 2028, MySQL 8.4 est une version à support long. Un composant hors maintenance ne reçoit plus de correctifs de sécurité. Le cours Documentation technique apprend à rédiger ce type de dossier.
Exercices
Exercice 1 sur 4 La matrice des flux de GLPI Réussi À revoir
GLPI est installé sur srv-glpi (192.168.10.184, VLAN 20 SERVEURS). Les salariés l'ouvrent en HTTPS depuis le VLAN 10. GLPI authentifie les salariés auprès des deux contrôleurs de domaine en LDAPS, relève la boîte support@sorbier.example, hébergée chez le fournisseur de messagerie en ligne de Sorbier, en IMAPS, et envoie ses notifications par un relais Postfix installé sur srv-glpi lui-même, qui les transmet à ce fournisseur (smtp.sorbier.example) en SMTP authentifié sur le port 587. L'agent GLPI de chaque poste envoie son inventaire en HTTPS. La base est sauvegardée chaque nuit vers srv-partages en NFS.
- Écris la matrice des flux (source, destination, protocole et port, raison).
- Quels flux ne passent pas par le pare-feu ?
Voir la réponseMasquer la réponse de l'exercice 1
- Une matrice possible :
| N° | Source | Destination | Protocole et port | Raison |
|---|---|---|---|---|
| G1 | Postes, VLAN 10 | srv-glpi | TCP 443 | Portail et interface des techniciens |
| G2 | Agents GLPI des postes, VLAN 10 | srv-glpi | TCP 443 | Envoi de l'inventaire |
| G3 | srv-glpi | srv-ad, srv-ad2 | TCP 636 | Authentification LDAPS |
| G4 | srv-glpi | srv-ad, srv-ad2 | TCP et UDP 53, UDP 123 | Noms et heure |
| G5 | srv-glpi | Fournisseur de messagerie (Internet) | TCP 993 | Collecteur : relève de la boîte du support |
| G6 | srv-glpi | smtp.sorbier.example (Internet) | TCP 587 | Notifications, transmises par le relais local |
| G7 | srv-glpi | srv-partages (192.168.10.185) | TCP 2049 | Sauvegarde NFS |
On y ajoute la supervision (srv-journaux vers srv-glpi en TCP 10050 et 443, srv-glpi vers srv-journaux en TCP 1514 et 1515 pour Wazuh) et l'administration par le bastion (TCP 22).
- G3, G4, G7 et les flux de supervision restent dans le VLAN 20 :
srv-glpi, les contrôleurs,srv-partagesetsrv-journauxy sont tous. Ils ne passent pas par pfSense. Les flux qui le traversent : G1 et G2 (VLAN 10 vers VLAN 20), G5 et G6 (VLAN 20 vers Internet), et l'administration (VLAN 99 vers VLAN 20).
Tu avais trouvé ?
Exercice 2 sur 4 Que se passe-t-il si… ? Réussi À revoir
Pour Prêt'Matos, décris l'effet visible pour un salarié, et le mode dégradé s'il existe.
- Le relais de courriel
srv-intranetest arrêté pendant deux jours. - Le contrôleur
srv-adest en panne,srv-ad2fonctionne. - La règle F3 a été oubliée sur le pare-feu.
- Le certificat du site a expiré ce matin.
Voir la réponseMasquer la réponse de l'exercice 2
- Rien de visible dans l'application, mais les rappels de la veille du retour ne partent plus. Mode dégradé : la logistique consulte la liste des retours prévus et prévient les retardataires ; les courriels en file partent au retour du relais, en retard. À annoncer aux utilisateurs si la panne dure.
- Rien de visible si l'application est configurée avec les deux contrôleurs (ou avec le nom du domaine, qui résout les deux) : c'est l'intérêt du montage en parallèle. Si elle ne connaît que
srv-ad, plus personne ne peut se connecter : une erreur de configuration qui transforme un composant redondé en SPOF. - Personne ne peut se connecter : l'application n'arrive pas à interroger l'annuaire. La page de connexion s'affiche (F1 fonctionne), mais toute tentative échoue, souvent avec un message trompeur (« identifiants incorrects »). C'est typiquement le défaut que révèle un test d'intégration.
- Le navigateur affiche une alerte de sécurité et bloque l'accès. Il n'y a pas de mode dégradé acceptable : on renouvelle le certificat. La supervision doit alerter bien avant l'échéance.
Tu avais trouvé ?
Exercice 3 sur 4 Disponibilité d'une chaîne Réussi À revoir
Un service web interne dépend en série d'un pare-feu (99,9 %), d'un hôte de virtualisation (99,5 %), de sa VM applicative (99,6 %) et d'une base de données sur une autre VM (99,6 %).
- Calcule sa disponibilité.
- On met la base de données sur deux VM répliquées, chacune à 99,6 %, en supposant que la bascule de l'une à l'autre est immédiate. Nouvelle disponibilité ?
- Sur un mois de 30 jours, combien de temps d'arrêt dans chaque cas ?
Voir la réponseMasquer la réponse de l'exercice 3
- 0,999 × 0,995 × 0,996 × 0,996 ≈ 0,98607, soit environ 98,61 %.
- Base en parallèle : 1 − 0,004 × 0,004 = 0,999984. Puis 0,999 × 0,995 × 0,996 × 0,999984 ≈ 0,99001, soit environ 99,00 %.
- Un mois de 30 jours compte 720 h. Cas 1 : (1 − 0,98607) × 720 ≈ 10,03 h, soit environ 10 h 02 min. Cas 2 : (1 − 0,99001) × 720 ≈ 7,19 h, soit environ 7 h 11 min. Redonder la base fait gagner près de trois heures par mois ; l'hôte de virtualisation, à 99,5 %, devient le maillon faible.
Tu avais trouvé ?
Exercice 4 sur 4 La dépendance oubliée Réussi À revoir
En recette, Prêt'Matos fonctionne parfaitement sur srv-recette. Le jour de la mise en production, la page s'affiche, la connexion fonctionne, mais la création d'une réservation renvoie une erreur 500. Le journal de l'API indique : Error: connect ECONNREFUSED 192.168.21.186:3306.
- Que s'est-il passé ?
- Quel document aurait évité l'erreur, et quel test l'aurait détectée avant l'ouverture ?
Voir la réponseMasquer la réponse de l'exercice 4
- L'API de production essaie de joindre une base MySQL sur
192.168.21.186, l'adresse desrv-recette: la configuration de recette a été recopiée en production. Sursrv-recette, le port 3306 n'est pas publié, d'où le refus de connexion. La lecture a l'air de fonctionner (cache, ou page sans données), mais pas l'écriture. - Le dossier d'architecture, qui dit que la base est le conteneur
bddde la même VM, et le principe « même version, configuration propre à chaque environnement » du chapitre 3. Le test qui l'aurait détectée : un test de fumée qui crée et annule une réservation de test juste après le déploiement (chapitre 5), avant d'annoncer l'ouverture.
Tu avais trouvé ?