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 do 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.

Dla kogo przeznaczony jest ten dokument?

Dla każdego developera tworzącego aplikacje, które działają jako usługa. Dla każdego Dev-opsa, który wdraża i zarządza takimi aplikacjami.

The Twelve Factors

I. Codebase

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

II. Zależności

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ść pozwalając na szybkie uruchamianie i zatrzymywanie aplikacji

X. Jednolitość środowisk

Utrzymuj konfigurację środowisk jak najbardziej zbliżoną do siebie

XI. Logi

Traktuj logi jako strumień zdarzeń

XII. Zarządzanie aplikacją

Uruchamiaj zadania administracyjne jako jednorazowe procesy