The Twelve-Factor App

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 :

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. Build, release, run

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