Das diesem Dokument zugrundeliegende Vorhaben wurde mit Mitteln des Bundesministeriums für Bildung und Forschung
unter dem Förderkennzeichen 16OH22005 gefördert.
Die Verantwortung für den Inhalt dieser Veröffentlichung liegt beim Autor/bei der Autorin.
Wir bilden Zukunft.
12 Factor App
Wir bilden Zukunft.
Einleitung
Die 12 Factor App ist eine vom PaaS-Anbieter Heroku entwickelte Methodik für die Entwicklung von Cloud- Anwendungen, vor allem für PaaS-Lösungen
Sie besteht aus 12 Prinzipien, die
– deklarative Formate für Automatisierung
– eine klare Abgrenzung zur darunterlegenden Technologie haben – Maximale Portierbarkeit ermöglichen
– In modernen Cloud-Umgebunden bereitgestellt werden
– Minimale bis keine Unterschiede zwischen Entwicklungs- und Produktivumgebung haben
– Continuous Deployment ermöglichen
– Ohne (signifikante) Änderungen skaliert werden können
Wir bilden Zukunft.
Einleitung
Die 12 Prinzipien sind
1. Codebase
2. Dependencies 3. Config
4. Backing Services 5. Build, Release, Run 6. Processes
7. Port Binding 8. Concurrency 9. Disposability 10. Dev/prod arity 11. Logs
Wir bilden Zukunft.
1 – Codebase
Der Code einer 12 Factor App wird immer von einem Versionskontrollsystem verwaltet
Zu einer Codebase gehört immer eine
Anwendung. Ein Code wird nicht genutzt, um mehrere verschiedene Anwendungen
bereitzustellen
Ein Deploy ist eine ausgeführte Instanz der Anwendung
Wir bilden Zukunft.
2 – Dependencies
Eine 12 Factor App deklariert Abhängigkeiten explizit
Sie hängt niemals implizit von vorhandenen Systemressourcen ab
– All Abhängigkeiten werden lokal in der Anwendung installiert
Abhängigkeiten werden in einem Dependency Manifest, einer deklarativen Konfiguration,
festgehalten
Dieses Vorgehen macht die Anwendung
unabhängig von Betriebssystem und anderen Einflüssen
Wir bilden Zukunft.
3 – Config
Die Konfiguration ist das einzige, das zwischen verschiedenen Deployments unterschiedlich ist
Konfiguration muss strikt vom Code getrennt werden
– Das ermöglicht es, Code in verschiedenen
Umgebungen deployen zu können, ohne Änderungen an der eigentlichen App vornehmen zu müssen
Konfiguration wird in Umgebungsvariablen abgelegt
– Diese können leicht konfiguriert werden und sind technologieunabhängig
Wir bilden Zukunft.
4 – Backing Services
Ein Backing Service ist ein externer Dienst, der über ein Netzwerk genutzt wird
Der Zugriff findet mittels URL aus der Konfiguration statt
Es findet keine Unterscheidung zwischen
Diensten auf anderen oder lokalem Rechner statt
Wir bilden Zukunft.
5 – Build, release, run
Das Deployment einer Anwendung besteht aus drei Schritten
– In der Build-Phase wird der Code in ein ausführbares Artefakt transformiert
– Während der Release-Phase wird dieses Artefakt mit der Konfiguration zu einem Release kombiniert
– In der Run-Phase wird das Release in der Zielumgebung ausgeführt
Es gibt eine strikte Trennung der Phasen
– Z.B. kann der Code eines Releases nicht angepasst werden
Jedes Release hat eine eindeutige Kennung
Wir bilden Zukunft.
6 – Processes
Eine Anwendung wird als ein oder mehrere Prozesse ausgeführt
Im einfachsten Fall handelt es sich um eine einfache Skript-Datei; bei komplizierteren Setups können mehrere Prozesse gestartet werden
Jeder Prozess ist stateless und teilt sich keine Daten mit anderen Prozessen
– Keine Dateien schreiben
– Speicherung aller Daten in Backing Services
Wir bilden Zukunft.
7 – Port Binding
Viele Anwendungen basieren darauf, in einem Web-Container ausgeführt zu werden
Bei einer 12 Factor App bringt die Anwendung selbst den HTTP-Server mit
– Sie ist self contained, basiert nicht auf externen Abhängigkeiten
– Gilt auch für andere Netzwerkdienste
Der genutzte Port wird über die Konfiguration gesetzt
Wir bilden Zukunft.
8 – Concurrency
Die Prozesse einer 12 Factor App sind First Class Citizens; sie sind in sich geschlossen,
repräsentieren eine komplette Anwendung oder einen strikt separierten Teil davon
Jedem Prozess wird ein Typ zugewiesen
– Z.B. web für HTTP(S)-Dienste
Die Unabhängigkeit erlaubt einfache Skalierung
Wir bilden Zukunft.
8 – Concurrency
Grafische Darstellung dreier Prozesstypen und deren unterschiedlicher Skalierung
Wir bilden Zukunft.
9 – Disposability
Prozesse einer 12 Factor App sind disposable – sie können zu jedem Moment gestartet oder
gestoppt werden
– Dadurch können sie schnell und flexibel provisioniert werden, was automatische Skalierung ermöglicht
Ziel von Prozessen sollte es sein, die Startzeit möglichst gering zu halten
Weiterhin sollten sie auf Prozesssignale reagieren und sich beenden, sobald vom Betriebssystem angezeigt
Wir bilden Zukunft.
10 – Dev/prod arity
Bei vielen Anwendungen gibt es große Unterschiede zwischen Entwicklung und Produktion, vor allem in den Bereichen
– Zeit; Entwickler arbeiten an Code, der erst Tage, Wochen oder gar Monate braucht, bis er in die Produktion geht
– Personal; Entwickler entwickeln, Operators deployen – Tools; lokale Entwicklung nutzt andere Technologien
als die Produktivumgebung
Wir bilden Zukunft.
10 – Dev/prod arity
Bei einer 12 Factor App werden diese Unterschiede minimiert oder eliminiert
Dadurch wird das Verhalten der Anwendung vorhersagbar
Auch Backing Services sollten in allen Phasen des Lebenszyklus die gleichen sein
Wir bilden Zukunft.
11 – Logs
Logs ermöglichen es, das Verhalten sichtbar zu machen und zu verstehen
In viele Umgebungen werden Logs in Dateien geschrieben
– Dies ist aber nur ein Ausgabeformat
– Eigentlich handelt es sich bei Logs um einen Stream von zusammengefassten, zeitlich sortierten Events – Meisten liegen diese in einem Textformat vor, mit
einem Eintrag pro Zeile
Wir bilden Zukunft.
11 – Logs
Für eine 12 Factor App gilt diesbezüglich: sie kümmert sich nicht um das Bereitstellen,
Verwalten oder Speichern von Logs
– 12 Factor Apps schreiben ihre Logs auf Standard Out (stdout)
– In der Entwicklung können diese Ausgaben dann in der lokalen Konsole gesehen werden
– In Deployment-Umgebungen werden wie abgefangen und in ein zentrales Logging-System übertragen
(Grafana, Netdata, …)
Wir bilden Zukunft.
12 – Admin processes
Neben den Prozessen, die die Anwendung ausmachen, müssen auf auch administrative Tätigkeiten durchgeführt werden
– Schwer zu automatisierende Setup-Aufgaben – Audits im laufenden Betrieb
– REPL-Arbeiten
Diese Aufgaben werden in sogenannten One Off-Prozessen ausgeführt
– Dabei wird die gleiche Umgebung und die gleiche Konfiguration wie für die ausgeführte Instanz genutzt
Wir bilden Zukunft.
Zusammenfassung
Die Prinzipien der 12 Factor App ermöglichen es, Anwendungen so zu entwickeln, dass sie umgebungsunabhängig deployed und einfach skaliert werden können
Während dieses Prinzip aus dem PaaS-Bereich kommt, ist es generell ein guter Wegweiser für Cloud-Anwendungen
Verbindung mit Automatisierung und
Containerisierung werden viele Schwierigkeiten klassischer Softwareentwicklung umgangen