A hosszú vagy átmenetileg megbízhatatlan műveleteket helyezze a háttérbe, hozzon létre stabil feladatrekordot és ellenálló feldolgozást. Határozza meg az állapotokat, az idempotenciát, az időtúllépést, az ismétlést, a prioritásokat és az egyidejűségi korlátokat, majd mutassa meg a felhasználónak az előrehaladást, az eredményt, a biztonságos megszakítást és a hiba kezelésének lehetőségét.
Az export, az import, a dokumentumgenerálás vagy egy lassú külső rendszer hívása nem feltétlenül kell, hogy blokkolja a nyitott webes kérést. A háttérfeladat lehetővé teszi, hogy az alkalmazás gyorsan visszaigazolja a beérkezést, és a munkát önállóan fejezze be. Ezzel azonban új állapot jön létre: az eredmény még nincs kész, és a felhasználónak tudnia kell, mi történik a kérésével.
A várakozási sor önmagában nem oldja meg a megbízhatóságot. A feldolgozás megismétlődhet, a worker leállhat egy művelet közepén, és az egyes feladatok versenghetnek a kapacitásért. A jó terv ötvözi az állapotmodellt, az idempotenciát, a szabályozott újrapróbálkozást, a prioritásokat, a megfigyelhetőséget és egy olyan felhasználói felületet, amely nem rejti el a hibát egy végtelen betöltésjelző mögé.
Döntse el, mi legyen aszinkron
A háttérfeladat akkor megfelelő, ha a művelet kiszámíthatatlanul sokáig tart, külső szolgáltatásra vár, nagyobb adatmennyiséget dolgoz fel, vagy nyitott böngésző nélkül is folytatódhat. Egy rövid, helyi módosításnak nem kell sorba állítva futnia csupán az architekturális divat miatt. Az aszinkronitás növeli azoknak az állapotoknak a számát, amelyeket tárolni, magyarázni, tesztelni és üzemeltetni kell.
Határozza meg a felelősségvállalás pillanatát. Ha az alkalmazás jelzi, hogy fogadta a kérést, léteznie kell egy tartós rekordnak, amelyből a feldolgozás helyreállítható. A bemenetet még a felhasználónak adott válasz előtt mentse el, vagy biztonságosan hivatkozzon rá. Érzékeny fájloknál az ideiglenes munkapéldányokra is állítsa be a hozzáférést és a megőrzési időt.
Modellezze az állapotot és az idempotens feldolgozást
Az állapotok megkülönböztethetik a várakozást, a feldolgozást, a sikert, a kezelhető hibát, a végleges kudarcot és a megszakítást. Az átmeneteket explicit módon határozza meg, hogy két worker ne hajthassa végre egyszerre ugyanazt a hatást. A rekord tartalmazza a feladat típusát, a felelőst, a bemeneti hivatkozást, a próbálkozás számát, az időkorlátot és az üzleti objektummal való korrelációt. Érzékeny tartalmat ne helyezzen közvetlenül a sor általános naplójába.
A workernek számolnia kell az ismétléssel a kapcsolat megszakadása vagy a folyamat összeomlása után. A stabil idempotenciakulcs, a meglévő eredmény ellenőrzése és a tranzakciós határok megakadályozzák a duplikált számlát vagy az ismételt elküldést. Egy nagy feladat lépésekre bontható, de mindegyiknek saját állapotra és egyértelmű szabályra van szüksége a részleges siker utáni folytatáshoz.
- egyértelmű azonosító és a feladat felelőse
- engedélyezett állapotátmenetek
- időkorlát és újrapróbálkozási szabály
- idempotens hatás és visszakövethető eredmény
Szabályozza az újrapróbálkozásokat, a prioritásokat és a kapacitást
Egy átmeneti hálózati hiba indokolhat újabb próbálkozást növekvő várakozási idővel és véletlenszerű szórással. Az érvénytelen bemenet ismétléssel nem javul, ezért magyarázható eredménnyel kell lezárulnia. A szolgáltató megadhatja, mennyi idő után lehet újra próbálkozni. Korlátozza a próbálkozások számát, a kimerült feladatokat pedig helyezze át egy ellenőrzött, diagnosztikai célú folyamatba.
Egy sürgős felhasználói kérés ne várjon egy terjedelmes éjszakai export mögött. Válassza szét a sorokat vagy a prioritásokat a hatás szerint, és állítson be párhuzamossági korlátokat az adatbázisra és a külső API-kra is. A visszanyomás (backpressure) megakadályozza, hogy a rendszer gyorsabban fogadjon munkát, mint ahogy el tudja végezni. A workerek skálázásának tiszteletben kell tartania a rate limitet, a memóriát és a műveletek sorrendjét.
Mutassa a felhasználónak a valós előrehaladást
Beküldés után jelezze, hogy a feladat várakozik vagy feldolgozás alatt áll, és tegye lehetővé az oldal biztonságos bezárását. Ha nem tudja kiszámítani a pontos százalékot, állapotlépéseket használjon egy hamisan pontos mutató helyett. A feladatközpont megjelenítheti a létrehozás idejét, a szerzőt, az eredményt és a kimenetre mutató linket. Az állapothoz és az eredményfájlhoz való jogosultságot mindig ellenőrizze újra.
A megszakításhoz meghatározott szemantika szükséges. Bizonyos munkákat a kezdés előtt le lehet állítani, másokat csak megjelölni, hogy ne folytatódjanak a következő lépéssel. A felhasználónak tudnia kell, hogy keletkezett-e már részleges hatás. Hiba esetén érthető megoldást kínáljon, lehetőséget a bemenet javítására vagy az ügyfélszolgálat megkeresésére biztonságos azonosítóval, ne nyers kivétellel.
Figyelje a sort, és gyakorolja be az üzemeltetési beavatkozásokat
Kövesse nyomon a legrégebben várakozó feladat korát, a sor hosszát típusonként, a feldolgozási időt, az ismétléseket, a hibákat és a kimerített tételeket. Az üzenetek puszta száma természetes módon ingadozhat; a riasztást a hatáshoz és a növekvő késleltetéshez kösse. A korrelációs azonosító a teljes tartalom naplózása nélkül kapcsolja össze a felhasználói kérést, a feladatot, a külső hívást és az eredményt.
Az üzemeltetési eljárás elmagyarázza, hogyan lehet szüneteltetni egy problémás típust, módosítani a kapacitást, biztonságosan megismételni egy elemet és értékelni a részleges hatást. Az ellenőrzés nélküli tömeges újraindítás súlyosbíthatja az incidenst. Kódmódosítás után ellenőrizze a már várakozó üzenetekkel való kompatibilitást. A felelős rendszeresen eltávolítja az elavult típusokat, és ellenőrzi a bemenetek és az eredmények megőrzési idejét.
Gyakori kérdések
Minden lassabb műveletnek sorba kell kerülnie?
Nem. Mérlegelje az időtartamot, a függőségek megbízhatóságát, az oldal bezárása utáni folytatás szükségességét és az új állapot költségeit. Egy egyszerű, rövid művelet maradhat a szokásos kérés része.
Miért futhat le egy háttérfeladat többször is?
A worker végrehajthatja a hatást, de elveszítheti a visszaigazolást, vagy leállhat a feldolgozás közepén. Ezért a sor gyakran újra kézbesíti az elemet. Az idempotens kialakítás megakadályozza a duplikált üzleti eredményt.
Megjeleníthető pontosan a teljesítés százaléka?
Csak ha a munka mérhetően fel van osztva, és ismert a hátralévő terjedelem. Kiszámíthatatlan külső lépésnél őszintébbek a megnevezett állapotok és a várakozásról szóló tájékoztatás, mint a kitalált pontosság.