8. Egyidejűség
Skálázódás a folyamatmodell segítségével¶
Bármely számítógépes programot, amelyet egyszer elindítanak, egy vagy több folyamat képvisel. A webalkalmazások különböző folyamatkivitelezési formákat használnak. Például a PHP folyamatok az Apache gyermekfolyamataiként futnak, a kérésszám függvényében szükség szerint kérésenként indítva. A Java folyamatok ellentétes megközelítést alkalmaznak, a JVM egy hatalmas uberfolyamatot biztosít, amely elinduláskor nagy erőforrásblokkot (CPU és memória) foglal le, a konkurenciát pedig belsőleg kezeli szálak segítségével. Mindkét esetben a futó folyamat(ok) csak minimálisan láthatóak az alkalmazás fejlesztőinek.
A skálázódást a futó folyamatokkal fejezzük ki, a munkaterhelés sokfélesége pedig a folyamattípusokkal.
A tizenkét tényezős alkalmazásban a folyamatok elsőrendű szereplők. A tizenkét tényezős alkalmazásban a folyamatok erőteljesen követik a unix folyamatmodellt a futó szolgáltatásdémonok számára. Ezt a modellt használva a fejlesztő megtervezheti az alkalmazást úgy, hogy a különböző munkaterheléseket különböző folyamattípusokhoz rendelje. Például a HTTP kéréseket egy webes folyamat kezelheti, míg hosszan tartó háttérfeladatokat egy munkafolyamat.
Ez nem zárja ki az egyes folyamatok saját belső multiplexálását a futási VM-ben lévő szálak segítségével, vagy az async/eseményvezérelt modellt, amely megtalálható az olyan eszközökben, mint az EventMachine, a Twisted vagy a Node.js. Azonban egy egyedi VM csak bizonyos mértékig növelhető (vertikális skálázás), így az alkalmazásnak képesnek kell lennie több folyamatot futtatni több fizikai gépen.
A folyamatmodell igazán előtérbe kerül a skálázódás során. A tizenkét tényezős alkalmazások folyamatainak megosztás nélküli, vízszintes partícionálható jellege azt jelenti, hogy a nagyobb egyidejűség hozzáadása egyszerű és megbízható művelet. A folyamattípusok tömbje és az egyes típusokhoz tartozó folyamatok száma a folyamatképződésnek nevezett képződmény.
A tizenkét tényezős alkalmazások folyamatai soha nem kell, hogy daemonizálódjanak vagy PID fájlokat írjanak. Ehelyett a működésrendszer folyamatkezelőjére (például a systemd-re, egy felhőplatformon elosztott folyamatkezelőre, vagy a fejlesztés során a Foreman nevű eszközre) kell támaszkodni a kimeneti adatfolyamok kezeléséhez, a leállt folyamatokra való reagáláshoz, valamint a felhasználó által indított újraindításokhoz és leállításokhoz.