Structure technique¶
Documenter les composants, leurs interfaces, et l'infrastructure sur laquelle ils tournent.
Pourquoi modéliser la structure technique¶
Les chapitres précédents modelisent les acteurs, les processus, les données et les comportements — tout ce qui releve du "quoi" et du "comment logiquement". La structure technique répond a une question différente : comment le système est-il organisé physiquement ? Quels composants existent, quelles interfaces exposent-ils, sur quels nœuds sont-ils déployés ?
Cette vue est indispensable pour trois raisons :
- Communication avec les ops : les équipes d'exploitation ont besoin de savoir ce qui tourne ou, avec quelles dépendances.
- Analyse d'impact : quand un composant change, quels autres composants sont affectes ?
- Décisions d'infrastructure : scaling, haute disponibilité, sécurité réseau — tout dépend de la topologie.
On dispose de trois notations principales pour cette vue : UML (composants et déploiement), C4 (niveaux 3 et 4), et ArchiMate. Chacune a son public et son niveau de formalisme.
Diagrammes de composants UML¶
Le diagramme de composants montre les unites logicielles modulaires du système, leurs interfaces et leurs dépendances.
Éléments¶
| Élément | Description | Notation |
|---|---|---|
| Composant | Unite logicielle deployable avec des interfaces | Rectangle avec stereotype |
| Interface fournie | Service que le composant offre | Cercle (lollipop) |
| Interface requise | Service dont le composant a besoin | Demi-cercle (socket) |
| Port | Point d'interaction sur un composant | Carre sur la bordure |
| Connecteur | Lien entre une interface fournie et une requise | Trait entre lollipop et socket |
| Dépendance | Relation d'utilisation entre composants | Fleche pointillee |
Exemple : architecture d'une plateforme e-commerce¶
graph TD
subgraph "Frontend"
WEB[Application Web]
MOB[Application Mobile]
end
subgraph "API Layer"
GW[API Gateway]
end
subgraph "Services metier"
CAT[Service Catalogue]
CMD[Service Commande]
PAY[Service Paiement]
USR[Service Utilisateur]
NOT[Service Notification]
end
subgraph "Infrastructure"
DB_CAT[(Base Catalogue)]
DB_CMD[(Base Commande)]
DB_USR[(Base Utilisateur)]
MQ[Message Broker]
CACHE[Cache distribue]
end
WEB --> GW
MOB --> GW
GW --> CAT
GW --> CMD
GW --> USR
CAT --> DB_CAT
CAT --> CACHE
CMD --> DB_CMD
CMD --> PAY
CMD --"event"--> MQ
USR --> DB_USR
MQ --> NOT
PAY --"callback"--> CMD Interfaces : le contrat entre composants¶
L'interface est le concept le plus important du diagramme de composants. Elle définit le contrat : ce que le composant promet de faire (interface fournie) et ce dont il a besoin (interface requise). Le couplage entre composants se fait exclusivement via les interfaces, jamais via l'implémentation interne.
Interface vs implémentation
Un composant peut être remplacé par un autre à condition qu'il fournisse les mêmes interfaces. C'est le principe de substitution au niveau architectural. Le service de paiement peut basculer de Stripe a Adyen sans impacter le service commande — si l'interface "ProcesserPaiement" est respectee.
Diagrammes de déploiement UML¶
Le diagramme de déploiement montre l'infrastructure physique (ou virtuelle) et la répartition des composants sur cette infrastructure.
Éléments¶
| Élément | Description | Notation |
|---|---|---|
| Nœud (device) | Ressource matérielle (serveur, mobile, IoT) | Cube 3D |
| Nœud (exécution env) | Environnement d'exécution (JVM, Docker, K8s pod) | Cube 3D avec stereotype |
| Artefact | Élément deployable (JAR, image Docker, binaire) | Rectangle avec icone |
| Association | Connexion réseau entre nœuds | Trait avec protocole |
| Spécification | Contraintes (OS, CPU, RAM) | Notes sur le nœud |
Exemple : déploiement Kubernetes¶
graph TD
subgraph "Cloud Provider"
subgraph "Cluster Kubernetes"
subgraph "Namespace: production"
subgraph "Pod: api-gateway"
GW[Container: nginx + envoy]
end
subgraph "Pod: services"
S1[Container: service-commande]
S2[Container: service-catalogue]
S3[Container: service-paiement]
end
end
subgraph "Namespace: data"
DB1[(PostgreSQL - commandes)]
DB2[(PostgreSQL - catalogue)]
RD[Redis - cache]
KF[Kafka - events]
end
end
LB[Load Balancer] --> GW
GW --> S1
GW --> S2
S1 --> DB1
S1 --> KF
S2 --> DB2
S2 --> RD
S1 --> S3
end
CDN[CDN] --> LB
CLIENT[Client] --> CDN Le diagramme de déploiement révélé des informations invisibles dans les autres vues : la latence réseau entre composants, les points de défaillance unique, les frontieres de sécurité (quel composant est expose a internet, lequel est dans un réseau prive).
C4 niveaux 3 et 4¶
Le modèle C4 de Simon Brown (présente au chapitre 03) définit quatre niveaux de zoom. Les niveaux 1 (contexte) et 2 (conteneurs) sont couverts dans le chapitre précédent. Ici on traite les niveaux 3 et 4.
Niveau 3 : Component diagram¶
Le niveau 3 zoome à l'intérieur d'un conteneur pour montrer ses composants internes. Chaque composant a une responsabilité, une technologie et des relations avec les autres composants et les systèmes externes.
| Élément | Description | Exemple |
|---|---|---|
| Composant | Bloc fonctionnel dans un conteneur | OrderController, PaymentService |
| Relation | Dépendance entre composants | "appelle", "lit depuis" |
| Système externe | Système hors du conteneur | Base de données, API tierce |
Niveau 4 : Code diagram¶
Le niveau 4 zoome dans un composant pour montrer les classes, interfaces et patterns de code. En pratique, ce niveau est rarement maintenu manuellement — il est généré depuis le code ou abandonne au profit de la lecture directe du code.
Pragmatisme sur le niveau 4
Simon Brown lui-même recommande de ne pas maintenir de diagrammes de niveau 4 sauf si le composant est particulièrement complexe ou critique. Le code est sa propre meilleure documentation à ce niveau de détail. On réservé le niveau 4 pour les composants dont l'architecture interne merite une explication séparée (un moteur de règles, un pipeline de transformation, un framework maison).
C4 vs UML composants¶
| Aspect | C4 Component | UML Composant |
|---|---|---|
| Public cible | Équipe technique, non-specialistes | Architectes, développeurs |
| Formalisme | Léger (boites et fleches) | Strict (interfaces, ports, connecteurs) |
| Outillage | Structurizr, draw.io, Mermaid | Outils UML (Enterprise Architect) |
| Niveau de détail | Juste assez | Aussi détaillé que nécessaire |
| Maintenance | Facile (peu de notation) | Coûteuse (notation riche) |
| Communication | Excellente | Bonne avec public forme |
ArchiMate¶
ArchiMate est un standard ouvert (The Open Group) pour la modélisation d'architecture d'entreprise. La ou UML et C4 se concentrent sur un système, ArchiMate couvre l'ensemble du SI et ses liens avec l'organisation.
Les trois couches¶
ArchiMate organisé l'architecture en trois couches, chacune avec ses éléments et ses relations.
| Couche | Contenu | Exemples d'éléments |
|---|---|---|
| Business | Processus, acteurs, rôles, services métier | Business Process, Business Service |
| Application | Composants logiciels, interfaces, données | Application Component, Data Object |
| Technology | Infrastructure, réseaux, plateformes | Node, Device, Communication Network |
Relations ArchiMate¶
| Relation | Semantique | Exemple |
|---|---|---|
| Serving | Un élément fournit un service a un autre | App Component sert Business Process |
| Composition | Un élément est compose d'autres | Node compose de Devices |
| Aggregation | Un élément regroupe d'autres | Service regroupe des fonctions |
| Assignment | Un élément est affecte a un autre | Rôle assigne a un Acteur |
| Realization | Un élément réalisé un autre | App Component réalisé App Service |
| Triggering | Un élément déclenche un autre | Event déclenche un Process |
| Flow | Transfer de contenu entre éléments | Données circulant entre composants |
| Access | Un élément accede a un objet passif | Process accede a un Data Object |
Quand utiliser ArchiMate¶
ArchiMate prend tout son sens dans les contextes suivants :
- Cartographie du SI existant : comprendre les liens entre processus métier, applications et infrastructure
- Transformation d'entreprise : planifier la migration d'un SI legacy vers une architecture cible
- Impact analysis : identifier les conséquences d'un changement (retirer une application, migrer une base)
- Gouvernance IT : communiquer avec la direction sur l'état du SI
ArchiMate n'est pas pour un projet
ArchiMate est conçu pour l'architecture d'entreprise, pas pour un projet ou un système isole. Pour un projet, C4 ou UML sont plus adaptés. ArchiMate prend sa valeur quand on doit montrer comment un système s'insere dans un SI existant avec des dizaines d'applications.
Quand utiliser quoi¶
Le choix de la notation dépend du public, du contexte et de l'objectif.
| Situation | Notation recommandee | Justification |
|---|---|---|
| Présenter l'architecture à l'équipe | C4 (niveaux 1-3) | Accessible, juste assez de détail |
| Documenter les interfaces précisément | UML composants | Notation formelle, interfaces explicites |
| Cartographier un SI d'entreprise | ArchiMate | Couverture métier + applicatif + technique |
| Planifier un déploiement | UML déploiement | Nœuds, artefacts, contraintes infra |
| Expliquer à la direction | C4 niveau 1-2 | Simple, visuel, pas de notation a apprendre |
| Audit de sécurité | UML déploiement + DFD | Frontieres réseau, flux de données |
| Architecture as code | C4 + Structurizr | Modèle versionne avec le code |
Combinaison des notations¶
En pratique, on combine les notations selon les besoins :
graph TD
C4_1[C4 niveau 1 - Contexte] --"zoom"--> C4_2[C4 niveau 2 - Conteneurs]
C4_2 --"zoom"--> C4_3[C4 niveau 3 - Composants]
C4_3 --"si necessaire"--> UML_COMP[UML Composants - interfaces]
C4_2 --"infrastructure"--> UML_DEP[UML Deploiement]
C4_1 --"enterprise"--> ARCHI[ArchiMate - SI global] L'erreur est de choisir une seule notation pour tout. C4 ne remplacé pas UML déploiement quand on doit planifier l'infrastructure. ArchiMate ne remplacé pas un diagramme de sequence quand on doit comprendre un protocole. Chaque notation a une force — on utilisé la bonne pour la bonne question.
Bonnes pratiques¶
| Pratique | Justification |
|---|---|
| Nommer les composants par responsabilité | "Service Commande" plutôt que "Backend-2" |
| Indiquer la technologie sur les nœuds | "PostgreSQL 15", pas juste "Base de données" |
| Documenter les protocoles sur les connexions | "HTTPS/REST", "gRPC", "AMQP" |
| Distinguer réseau prive et réseau public | Sécurité : ce qui est expose vs ce qui ne l'est pas |
| Versionner les diagrammes avec le code | Structurizr DSL, C4-PlantUML, Mermaid dans le repo |
| Limiter le nombre de composants par diagramme | Au-delà de 15, découper en sous-vues |
Chapitre suivant : Flux de données — DFD, niveaux de détail, data mapping et zones de confiance pour comprendre comment les données traversent le système.