Aller au contenu

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 :

  1. Communication avec les ops : les équipes d'exploitation ont besoin de savoir ce qui tourne ou, avec quelles dépendances.
  2. Analyse d'impact : quand un composant change, quels autres composants sont affectes ?
  3. 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.