Discipline qui consiste à concevoir la structure fondamentale d’un système logiciel en définissant ses composants, leurs interactions, les principes de communication, les contraintes techniques, et les compromis entre performance, maintenabilité, évolutivité, sécurité et coût.
Contrairement au simple codage, l’architecture logicielle répond à des questions stratégiques :
- Comment découper le système pour qu’il soit modulaire et résilient ?
- Où placer la logique métier, les données, l’interface utilisateur ?
- Quels protocoles garantissent interopérabilité et durabilité ?
- Le système respecte-t-il les principes de souveraineté, de non-extractivisme, ou de découvrabilité sémantique ?
Technologies et outils associés à l’architecture logicielle
1. Paradigmes architecturaux courants
| Modèle | Description | Cas d’usage pertinent |
|---|---|---|
| Monolithique | Toute l’application dans un seul processus | Petits sites WordPress bien organisés, prototypes rapides |
| Microservices | Découpage en services indépendants, communicants via API | Plateformes complexes (ex. : e-commerce + LMS + forum) |
| Serverless / FaaS | Exécution sans gestion de serveur (AWS Lambda, etc.) | À éviter si souveraineté requise (dépendance cloud) |
| Event-Driven | Communication via événements asynchrones (queues, streams) | Systèmes réactifs (notifications, pipelines ETL) |
| Hexagonale / Ports & Adapters | Séparation stricte entre cœur métier et interfaces externes | Applications critiques, durables, testables (ex. : outils de gouvernance) |
| JAMstack | Front statique + APIs + CDN | Sites culturels performants, sécurisés, déployables sur IPFS/Netlify |
2. Langages & frameworks (orientés maîtrise et pérennité)
- Backend :
- Python (FastAPI, Django) → clarté, richesse en libs data/IA, auto-hébergeable
- Node.js (Express, Hono) → léger, bon pour APIs REST/GraphQL
- PHP (Symfony, Laravel) → incontournable pour WordPress avancé ou plugins documentaires
- Go → performance, binaires statiques, idéal pour microservices légers
- Frontend :
- Vanilla JS + Web Components → minimalisme, pas de framework imposé
- Svelte / Astro → génération statique efficace, proches de la philosophie JAMstack
- React (avec prudence) → utile si intégration avec outils comme Metabase ou Grafana
3. Outils de modélisation & documentation
- Mermaid.js : schémas d’architecture directement dans Markdown (Git-friendly).
- C4 Model (Context, Containers, Components, Code) : méthode standardisée pour documenter l’architecture à plusieurs niveaux.
- PlantUML / Diagrams.net (Draw.io) : diagrammes techniques versionnables.
- OpenAPI / Swagger : spécification contractuelle des APIs (indispensable pour l’interopérabilité).
- ArchUnit (Java) / Depends (Python) : vérification automatisée des règles architecturales.
4. Infrastructure & DevOps léger (auto-hébergement compatible)
- Docker : conteneurisation pour isoler services (WordPress, Metabase, RAG, etc.).
- Podman : alternative sans daemon, plus légère que Docker.
- Traefik : reverse proxy moderne avec Let’s Encrypt intégré, idéal pour exposer plusieurs services sur un NAS ou VPS.
- Ansible : automatisation de déploiement sans agent (ex. : configurer un serveur O2Switch-like local).
- Portainer : interface de gestion visuelle pour conteneurs (utile sur Synology).
5. Principes d’architecture
- Préférer le fichier au service : stocker les données en Markdown, CSV, JSON-LD → pérennité, versionnement Git.
- Éviter le vendor lock-in : pas de fonctions AWS/Azure/GCP dans le cœur métier.
- APIs ouvertes > UI fermées : favoriser les systèmes interrogeables par d’autres.
- Moins de couches = plus de contrôle : éviter les abstractions superflues qui obscurcissent la logique documentaire.