Twelve-Factor App: Zwölf Regeln für Cloud-Anwendungen
Kurz: Eine Sammlung von zwölf Grundsätzen, nach denen sich Anwendungen leicht in der Cloud betreiben, skalieren und ausliefern lassen.
Genauer: Die „Twelve-Factor App“ wurde um 2011 von Entwicklern der Plattform Heroku formuliert. Sie beschreibt, wie man Software als Dienst baut, die sich ohne Handarbeit auf neuen Servern starten, parallel mehrfach betreiben und häufig aktualisieren lässt. Viele Regeln gelten heute für Container und Kubernetes unverändert.
Im Detail
Die zwölf Faktoren in Kürze
- Codebasis: eine Codebasis in Versionskontrolle, viele Deployments.
- Abhängigkeiten: ausdrücklich deklarieren und isolieren (z. B.
package.json). - Konfiguration: in Umgebungsvariablen, nicht im Code.
- Unterstützende Dienste: Datenbank, Mail usw. als austauschbare, angeschlossene Ressourcen behandeln.
- Build, Release, Run: strikt trennen.
- Prozesse: zustandslos, Daten in einem Dienst speichern.
- Port-Bindung: der Dienst stellt sich selbst über einen Port bereit.
- Nebenläufigkeit: skalieren durch mehr Prozesse.
- Einweggebrauch: schnell starten, sauber beenden.
- Dev/Prod-Gleichheit: Umgebungen so ähnlich wie möglich.
- Logs: als Strom von Ereignissen nach stdout schreiben.
- Admin-Prozesse: einmalige Aufgaben (Migrationen) als eigene Prozesse.
Beispiel: Konfiguration
Statt die Datenbankadresse in den Code zu schreiben:
const db = connect(process.env.DATABASE_URL);Derselbe Code läuft so lokal, im Test und in Produktion; nur die Umgebungsvariable unterscheidet sich. Geheimnisse gehören nicht ins Repository.
Warum zustandslos wichtig ist
Speichert ein Prozess Sitzungen im eigenen Arbeitsspeicher, geht beim Neustart etwas verloren, und ein Load Balancer kann Anfragen nicht beliebig verteilen. Ist der Zustand in einer Datenbank oder in Redis, lassen sich Prozesse beliebig starten und beenden.
Einordnung
Die Regeln sind Leitlinien, keine Gesetze. Gerade bei Faktor 11 (Logs) und Faktor 3 (Umgebungsvariablen) gibt es Weiterentwicklungen, etwa strukturierte Logs und Secret-Verwaltung statt vieler Umgebungsvariablen.
Siehe auch: Umgebungsvariablen, Docker, CI/CD-Pipeline, Health-Checks und Graceful Shutdown