Twelve-Factor App – 12 zasad rozwoju aplikacji

Współcześnie rozwój aplikacji internetowych czy mobilnych to nie tylko sam proces kodowania, lecz szereg aspektów związanych z programowaniem takich jak zarządzanie kodem źródłowym, testowanie, wdrażanie czy monitorowanie. W ciekawym sposób powyższe zagadnienia zostały opisane w dokumencie Twelve-Factor App, w którym zebrano 12 zasad rozwoju aplikacji. Poniżej krótko opiszę każdy z wymienionych aspektów. 

1. System kontroli wersji

Kod aplikacji powinien być zarządzany w systemie kontroli wersji Git czy SVN. Pojedynczy program powinien mieć jedno źródło kodu, w przypadku systemów rozproszonych źródeł kodu może być wiele, jednak nie powinno być sytuacji, gdy wiele aplikacji dzieli ten sam kod.

2. Zależności

Wszystkie zależności od innych bibliotek i framework’ów powinny być jasno zdefiniowane, aplikacja nie może zależeć od bibliotek zainstalowanych dla całego systemu.

3. Konfiguracja

Między różnymi wdrożeniami aplikacji (produkcja, środowisko testowe, środowisko deweloperskie) jedyną różnicą powinna być konfiguracja (połączenia do baz danych, dane uwierzytelniające itd.) zapisana poza kodem źródłowym aplikacji np. w zmiennych środowiskowych lub w dedykowanych plikach.

4. Usługi wspierające

Usługi wspierające (bazy danych, systemy kolejek, systemu cachowania pamięci) powinny być traktowane przez aplikacje jako zasoby dostępne np. za pomocą określonego URL, które nie są trwale z aplikacją związane np. można zmienić bazę danych z testowej na produkcyjną.

5. Buduj, publikuj, uruchamiaj

Wdrażając aplikację wykonywane są 3 etapy:

  • budowanie kody wynikowego (np. kompilowanie),
  • publikowanie aplikacji (dołączenie do kodu wynikowego konfiguracji),
  • uruchomienie aplikacji.

6. Procesy

Aplikacja powinny być uruchamiane jako pojedynczy proces lub kilka procesów, które są bezstanowe i nie współdzielające. W przypadku potrzeby zapisu / odczytu danych należy korzystać z zasobów zewnętrznych takich jak np. bazy danych.

7. Przydzielanie portów

Aplikacja internetowa umożliwia komunikację z użyciem protokołów takich jak HTTP(S) czy FTP przez przydzielenie portu, na który inne systemy będą wysyłać żądania.

8. Współbieżność

Aplikacja uruchomiona w 1 procesie może wykorzystywać wątki w maszynie wirtualnej Javy czy też asynchroniczny model wydarzeń dostępny w Node.js, by część zadań realizować równolegle i przyśpieszyć działania całej aplikacji, a także wykorzystać efektywnie dostępne zasoby sprzętowe.

9. Zbywalność

Aplikacja może być uruchomiona lub zatrzymana w dowolnym momencie czasu. Czas uruchomienia aplikacji powinien być minimalnie krótki, natomiast jej zamknięcie powinno być bezproblemowe. Aplikacja powinna po otrzymaniu sygnału SIGTERM zatrzymać proces i zakończyć pracę.

10. Jednolitość środowisk

Środowiska deweloperskie, testowe oraz produkcyjne powinny być do siebie jak najbardziej podobne, by było możliwe bardzo częste uruchamiania implementowanej aplikacji w każdym z środowisk w krótkim czasie.

11. Logi

Aplikacja powinna traktować generowane logi jako strumień zdarzeń i nie powinna odpowiadać za ich przekierowywanie i zapis. Zaleca się, by korzystać z narzędzi do obsługi logów (takich jak Logplex lub Fluent).

12. Zarządzanie aplikacją

Zadania administracyjne powinny być realizowane za pomocą pojedynczych procesów np. do migracji bazy danych czy uruchomienia konsoli. Kod zadania administracyjnego powinien być dołączony do kodu aplikacji. W zakresie możliwości dostępu do konsoli zaleca się używanie takich języków programowania, które udostępniają powłokę REPL np. poprzez wywołanie interpretera bez dodatkowych argumentów (np. python lub perl).

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Time limit is exhausted. Please reload CAPTCHA.