Kihagyás

9. Megsemmisíthetőség

Maximalizáld a robosztusságot gyors indítással és méltóságteljes leállással

A tizenkét tényezős alkalmazások folyamatai megszüntethetők, azaz pillanatok alatt elindíthatók vagy leállíthatók. Ez lehetővé teszi a gyors rugalmas skálázódást, a kód vagy konfigurációs változások gyors telepítését és a termelési telepítések robosztusságát.

A folyamatoknak törekedniük kell a minimális indítási idő elérésére. Ideális esetben egy folyamat néhány másodperc alatt elindul a parancs végrehajtása után, és készen áll a kérések vagy feladatok fogadására. Az alacsony indítási idő több rugalmasságot biztosít a kiadási folyamatnak és a skálázásnak, valamint elősegíti a robosztusságot, mert a folyamatkezelő könnyebben áthelyezheti a folyamatokat új fizikai gépekhez, amikor szükséges.

A folyamatok méltóságteljesen leállnak, amikor egy SIGTERM jelzést kapnak a folyamatkezelőtől. Egy webfolyamat esetén a méltóságteljes leállás akkor valósul meg, amikor megszűnik a szolgáltatási porton történő figyelés (ezáltal elutasítva az új kéréseket), lehetővé téve, hogy az aktuális kérések befejeződjenek, majd kilép. Ebben a modellben benne foglaltatik, hogy az HTTP-kérések rövidek legyenek (legfeljebb néhány másodpercig tartanak), vagy hosszú várakozás esetén a kliens automatikusan újra kell kapcsolódjon, amikor megszakad a kapcsolat.

Egy munkafolyamat esetén a méltóságteljes leállás akkor valósul meg, amikor a jelenlegi feladat visszakerül a munkafeladat-sorba. Például a RabbitMQ esetén a munkafolyamat küldhet egy NACK-t; a Beanstalkd esetén a feladat automatikusan visszakerül a sorba, amikor a munkafolyamat lekapcsolódik. A lock-alapú rendszerek, mint például a Delayed Job, biztosítaniuk kell, hogy felszabadítsák a zárat a feladat rekordjáról. Ez a modell azt feltételezi, hogy az összes feladat újra beléphető, amit általában tranzakcióba csomagolva vagy idempotens művelettel érnek el.

A folyamatoknak ellenállóknak is kell lenniük hirtelen meghibásodás esetén, például a hardver hibájának esetén. Habár ez sokkal kevésbé gyakori, mint a méltóságteljes leállás SIGTERM jelzéssel, mégis előfordulhat. Egy ajánlott megközelítés a robosztus sorkezelő backend, például a Beanstalkd használata, amely visszahelyezi a feladatokat a sorba, amikor a kliensek lekapcsolódnak vagy időtúllépés történik. Mindenképpen a tizenkét tényezős alkalmazásokat úgy tervezték, hogy kezeljék a váratlan, nem méltóságteljes leállásokat. A kizárólagos üzemmódú tervezés ezt a koncepciót a logikai következtetéséig viszi.