Accueil
Introduction¶
À l'époque actuelle, les logiciels sont régulièrement délivrés en tant que services : on les appelle des applications web (web apps), ou logiciels en tant que service (software-as-a-service). L'application 12 facteurs est une méthodologie pour concevoir des logiciels en tant que service qui :
- Utilisent des formats déclaratifs pour mettre en oeuvre l'automatisation, pour minimiser le temps et les coûts pour que de nouveaux développeurs rejoignent le projet;
- Ont un contrat propre avec le système d'exploitation sous-jacent, offrant une portabilité maximum entre les environnements d'exécution;
- Sont adaptés à des déploiements sur des plateformes cloud modernes, rendant inutile le besoin de serveurs et de l'administration de systèmes;
- Minimisent la divergence entre le développement et la production, ce qui permet le déploiement continu pour une agilité maximum;
- et peuvent grossir verticalement sans changement significatif dans les outils, l'architecture ou les pratiques de développement;
La méthodologie 12 facteurs peut être appliquée à des applications écrites dans tout langage de programmation, et qui utilisent tout type de services externes (base de données, file, cache mémoire, etc.).
Contexte¶
Les contributeurs de ce document ont été directement impliqués dans le développement et le déploiement de centaines d'applications, et ont vu, indirectement, le développement, la gestion et le grossissement de centaines de milliers d'applications via le travail fait sur la plateforme Heroku.
Ce document fait la synthèse de toutes nos expériences et observations sur une large variété d'applications software-as-a-service. C'est la triangulation de pratiques idéales pour le développement d'applications, en portant un soin tout particulier aux dynamiques de la croissance organique d'une application au cours du temps, les dynamiques de la collaboration entre les développeurs qui travaillent sur le code de l'application, en évitant le coût de la lente détérioration du logiciel dans un environnement qui évolue (en).
Notre motivation est de faire prendre conscience de certains problèmes systémiques que nous avons rencontrés dans le développement d'applications modernes, afin de fournir un vocabulaire partagé pour discuter ces problèmes, et pour offrir un ensemble de solutions conceptuelles générales à ces problèmes, ainsi que la terminologie correspondante. Le format est inspiré par celui des livres de Martin Fowler Patterns of Enterprise Application Architecture (en) et Refactoring (en).
Qui devrait lire ce document ?¶
Tout développeur qui construit des applications qui fonctionnent en tant que service, ainsi que les personnes qui déploient et gèrent de telles applications.
Les 12 facteurs¶
I. Base de code¶
Une base de code suivie avec un système de contrôle de version, plusieurs déploiements
II. Dépendances¶
Déclarez explicitement et isolez les dépendances
III. Configuration¶
Stockez la configuration dans l'environnement
IV. Services externes¶
Traitez les services externes comme des ressources attachées
V. Assemblez, publiez, exécutez¶
Séparez strictement les étapes d'assemblage et d'exécution
VI. Processus¶
Exécutez l'application comme un ou plusieurs processus sans état
VII. Associations de ports¶
Exportez les services via des associations de ports
VIII. Concurrence¶
Grossissez à l'aide du modèle de processus
IX. Jetable¶
Maximisez la robustesse avec des démarrages rapides et des arrêts gracieux
X. Parité dev/prod¶
Gardez le développement, la validation et la production aussi proches que possible
XI. Logs¶
Traitez les logs comme des flux d'évènements
XII. Processus d'administration¶
Lancez les processus d'administration et de maintenance comme des one-off-processes