The Twelve-Factor App

IX. Zahoditeľnosť

Maximalizácia robustnosti rýchlym štartom a vhodným vypnutím

Procesy dvanásť faktorovej aplikácie sú zahoditeľné, čo znamená, že sa kedykoľvek dajú spustiť alebo zastaviť. Umožňuje to elastické škálovanie, rýchly vývoj kódu alebo zmeny v konfigurácii, a robustnosť produkčných nasadení.

Procesy by sa mali snažiť minimalizovať čas spustenia. Ideálne, procesu zaberie len pár sekúnd od spustenia príkazu do kým je proces pripravený prijímať požiadavky alebo úlohy. Krátky čas spustenia poskytuje väčšiu agility pre release proces a škálovanie; a pomáha tiež robustnosti, lebo manažér procesov, môže jednoduchšie presúvať procesy na nové fyzické stroje v prípade potreby.

Procesy sa vhodne vypnú po prijatí signálu SIGTERM od správcu procesov. Pre webový proces, vhodné vypnutie znamená, že prestane počúvať na porte (teda začne odmietať nové požiadavky), aktuálne bežiace požiadaviek nechá dobehnúť a vypne sa. V tomto modeli predpokladáme, že HTTP požiadavky sú krátke (nie viac ako pár sekúnd). V prípade dlhotrvajúcich spojení by sa mal klient vedieť po strate spojenia znova pripojiť.

Pre proces workera, je vhodné vypnutie dosiahnuté vrátením aktuálnej úlohy do pracovnej fronty. For a worker process, graceful shutdown is achieved by returning the current job to the work queue. Napríklad pri RabbitMQ worker môže poslať NACK; pri Beanstalkd sa úloha vrátiť do fronty keď sa worker odpojí. Systéme postavené na zamkýnaní, ako napr. Delayed Job musia uvoľniť zamknutie pre záznam svojej úlohy. V tomto modeli predpokladáme, že všetky úlohy sú opakovateľné, čo sa zvyčajne dosiahne obalením výsledkov do transakcie alebo spravením operácie idempotentnou.

Procesy by mali byť tiež robustné proti náhlej smrti, v prípade zlyhanie hardvéru. Aj keď je toto vyskytuje oveľa menej často ako vypnutie signálom SIGTERM, môže sa to stať. Odporúčaný prístup je použitie robustnej fronty, ako napr. Beanstalkd, ktorá vracia úlohy do fronty pri odpojení klienta alebo vypršaní časového limitu. V každom prípade, dvanásť faktorová aplikácia je navrhnutá, aby zvládla neočakávané, nevhodné ukončenia. Crash-only design tento koncept vedie k logickým záverom.