The Twelve-Factor App

Wprowadzenie

We współczesnym świecie oprogramowanie jest powszechnie wytwarzane w formie usługi, nazywane software-as-service (SaaS) lub aplikacjami internetowymi. Dwanaście aspektów aplikacji jest metodologią budowania aplikacji SaaS, które:

Metodologia dwunastu aspektów może być stosowana do aplikacji napisanych w każdym języku programowania i wykorzystujących dowolną kombinację usług wspierających (bazy danych, kolejki, cache pamięci etc).

Background

Kontrybutorzy tego dokumentu byli bezpośrednio zaangażowani w tworzenie i wdrażanie setek aplikacji i pośrednio byli świadkami produkcji, działania i skalowania setek tysięcy aplikacji dzięki naszej pracy na platformie Heroku.

Ten dokument jest podsumowaniem całego naszego doświadczenia i obserwacji szerokiej gamy aplikacji SaaS. Jest on połączeniem idealnych praktyk developmentu, zwracania szczególnej uwagi na naturalny rozrost aplikacji w czasie, dynamiki współpracy developerów pracujących nad jednym codebase'm, oraz unikania kosztów gnijącego oprogramowania.

Naszym celem jest podniesienie poziomu świadomości o podstawowych problemach, które dostrzegliśmy przy tworzeniu nowoczesnych aplikacji, zapewnienie wspólnego słownictwa dp rozmowy o tych problemach oraz zaoferowanie ogólnych rozwiązań dla tych problemów wraz z towarzyszącą terminologią. Format dokumentu jest inspirowany książkami Martina Fowlera Patterns of Enterprise Application Architecture oraz Refactoring.

The Twelve Factors

I. Codebase

Jedno źródło kodu śledzone systemem kontroli wersji, wiele wdrożeń

II. Dependencies

Jawnie zadeklaruj i wydziel zależności

III. Konfiguracja

Przechowuj konfigurację w środowisku

IV. Usługi wspierające

Traktuj usługi wspierające jako przydzielone zasoby

V. Buduj, publikuj, uruchamiaj

Oddzielaj etap budowania od uruchamiania

VI. Procesy

Uruchamiaj aplikację jako jeden lub więcej bezstanowych procesów

VII. Przydzielanie portów

Udostępniaj usługi przez przydzielanie portów

VIII. Współbieżność

Skaluj przez odpowiednio dobrane procesy

IX. Zbywalność

Zwiększ elastyczność aplikacji przez szybki start i bezproblemowe zamknięcie

X. Jednolitość środowisk

Utrzymuj środowisko developerskie, stagingowe i produkcyjne tak podobne jak tylko możliwe

XI. Logi

Traktuj logi jako strumień zdarzeń

XII. Zarządzanie aplikacją

Uruchamiaj zadania administracyjne jako jednorazowe procesy