Felhőbeli kihívások: Hibatűrés

Befejeződött

A felhőket és más elosztott rendszereket az egyprocesszoros rendszerektől megkülönböztető egyik alapvető jellegzetesség a részleges meghibásodás fogalma. Ez azt jelenti, hogy ha egy elosztott rendszer egy csomópontja vagy összetevője meghibásodik, a teljes rendszer továbbra is működőképes maradhat. Ezzel szemben ha egy egyprocesszoros rendszer egy összetevője (például a RAM) meghibásodik, akkor a teljes rendszer meghibásodik. Az elosztott rendszerek/programok tervezésének egyik lényeges célkitűzése egy olyan összeállítási mód, amely automatikusan, a teljesítmény jelentős befolyásolása nélkül elviseli a részleges meghibásodásokat. Az elosztott rendszerek hibáinak elrejtésére használt egyik fő technika a hardveres redundancia, például a RAID technológia használata (lásd e kurzus 3. képzési tervét). Az elosztott programok azonban a legtöbb esetben nem függhetnek kizárólag az elosztott rendszerek mögöttes hardverének hibatűrési technikáitól. Az elosztott programok által alkalmazható népszerű technikák egyike a szoftveres redundancia.

Two classical ways to employ task redundancy. (a) A flat group of tasks. (b) A hierarchical group of tasks with a central process (that is, T0, where T1 stands for task 1)..

15. ábra: A feladatredundancia alkalmazásának két klasszikus módja. (a) Egyenrangú tevékenységcsoport. (b) A tevékenységek hierarchikus csoportja egy központi folyamattal (azaz T0, ahol a T1 az 1. feladatot jelenti).

A szoftveres redundancia egyik elterjedt típusa a tevékenységredundancia (más néven ellenállóképesség vagy replikáció), amely a tevékenységek hibáival és lassúságával szemben nyújt védelmet. A tevékenységek a 15. ábrán bemutatott példának megfelelően egyenrangú vagy hierarchikus csoportokként replikálhatók. Egyenrangú csoportokban (15.(a) ábra) minden tevékenység azonos abból a szempontból hogy mind ugyanazt a munkát végzik. Végül csak egy tevékenység eredménye lesz elfogadva, a többi eredményt a rendszer elveti. Az egyenrangú csoportok nyilvánvalóan szimmetrikusak és kizárják a rendszerkritikus meghibásodási pontok jelenlét: ha egy tevékenység összeomlik, az alkalmazás továbbra is működni fog, bár a csoport a helyreállásig kisebb lesz. Ha azonban egy alkalmazás döntéshozatalt (például zárolást) igényel, szavazási mechanizmusra lehet szükség. Már volt szó arról, hogy a szavazási mechanizmusok bonyolultabbá teszik az implementációt, valamint kommunikációs késésekkel és a teljesítményt érintő többletmunkával járnak.

A hierarchikus csoportok (15.(b) ábra) általában egy koordinátor-tevékenységet alkalmaznak, a többi tevékenységet pedig feldolgozóként sorolják be. Ebben a modellben a felhasználói kérések a koordinátornak vannak továbbítva, amely eldönti, hogy melyik feldolgozó a legalkalmasabb a kérés teljesítésére. A hierarchikus és az egyenrangú csoportok nyilván ellentétes tulajdonságokat is mutatnak. A koordinátor például rendszerkritikus meghibásodási pont, és a teljesítményt érintő szűk keresztmetszetté válhat (különösen nagyméretű, több millió felhasználóval rendelkező rendszerek esetében). Amíg azonban a koordinátor védve van, addig az egész csoport működőképes marad. Emellett a döntéshozatal is egyszerű, amelyet egyedül a koordinátor végez anélkül, hogy a feldolgozókat befolyásolná, vagy kommunikációs késéseket és teljesítményt érintő többletmunkát okozna. A Hadoop MapReduce az egyenrangú és hierarchikus tevékenységcsoportok hibridjeit alkalmazza, de csak a tevékenységhibák kezelésére. Ennek részleteit a Hadoop MapReduce-t ismertető szakasz tartalmazza.

Demonstrating distributed checkpointing. D1 is a valid distributed checkpoint, while D2 is not because it is inconsistent. Specifically, the D2 checkpoint at Q indicates that m2 has been received, while the D2 checkpoint at P does not indicate that m2 has been sent.

16. ábra: Az elosztott ellenőrzőpontok bemutatása. D1 egy érvényes elosztott ellenőrzőpont, D2 viszont nem az, mert inkonzisztens. A Q D2 ellenőrzőpontja azt jelzi, hogy m2 érkezett, míg a P-néla D2 ellenőrzőpont nem jelzi, hogy m2 lett elküldve.

Elosztott programokban a hibatűrés célja nem csupán a hibák átvészelése, hanem a meghibásodások utáni helyreállítás. Az alapötlet a hibás állapot hibamentes állapotra cserélése, ennek a célnak az elérésére pedig a visszamenőleges helyreállítás az egyik módszer. Ehhez a stratégiához az szükséges, hogy az elosztott program vagy rendszer a jelenlegi hibás állapotából átvihető legyen egy korábbi helyes állapotba, ehhez pedig bizonyos időközönként minden folyamatban rögzíteni kell a rendszer állapotát, egy úgynevezett ellenőrzőpont rögzítésével. Meghibásodás esetén a helyreállítás az utolsó rögzített helyes állapotról, elterjedt nevén helyreállítási vonalról indítható.

Az egy elosztott rendszerben, egy elosztott program különböző folyamataiban rögzített ellenőrzőpontok elosztott ellenőrzőpontot alkotnak. Az elosztott ellenőrzőpontok rögzítése egy lényeges okból adódóan nem egyszerű. Egy elosztott ellenőrzőpontnak ugyanis konzisztens globális állapotot kell rögzítenie, tehát rendelkeznie kell azzal a tulajdonsággal, hogy ha egy $P$ folyamat rögzítette egy $m$ üzenet nyugtázását, akkor léteznie kell egy másik, $Q$ folyamatnak, amely az $m$ küldését rögzítette. Az $m$ üzenetnek végső soron egy ismert folyamattól kell származnia. A 16. ábrán bemutatott két elosztott ellenőrzőpont egyike, $D_{1}$ konzisztens globális állapotot rögzít, a másik, $D_{2}$ viszont nem. A $Q$ folyamat $D_{1}$ ellenőrzőpontja azt jelzi, hogy $Q$ fogadott egy $m_{1}$ üzenetet, a $P$ folyamat $D_{1}$ ellenőrzőpontja pedig jelzi, hogy $P$ elküldte az $m_{1}$ üzenetet, tehát $D_{1}$ konzisztens. Ezzel ellentétben a $Q$ folyamat $D_{2}$ ellenőrzőpontja jelzi az $m_{2}$ beérkezését, a $P$ $D_{2}$ ellenőrzőpontja viszont nem jelzi, hogy $m_{2}$ el lett volna küldve a $P$ folyamatból. Emiatt $D_{2}$ inkonzisztensnek minősül, és nem használható helyreállítási vonalként.

The domino effect that might result from rolling back each process (e.g., processes P and Q) to a saved, local checkpoint in order to locate a recovery line. D1, D2, and D3 are not recovery lines because they exhibit inconsistent global states.

17. ábra: A dominóeffektus, amely az egyes folyamatok (azaz a P és A folyamatok) egy mentett helyi ellenőrzőpontra való visszagördüléséből eredhet a helyreállítási vonal megkeresése érdekében. A D1, D2 és D3 nem helyreállítási vonalak, mert inkonzisztens globális állapotokat mutatnak.

Az egyes folyamatokat az utoljára mentett állapotra visszaállítva egy elosztott program/rendszer megvizsgálhat egy lehetséges elosztott ellenőrzőpontot, hogy megállapítsa annak konzisztenciáját. Ha a lokális állapotok együttesen konzisztens globális állapotot alkotnak, akkor a rendszer helyreállítási vonalat talált. Például a 16. ábrán bemutatott rendszer egy hiba után visszaáll a $D_{1}$ ellenőrzőpontig. Mivel $D_{1}$ globálisan konzisztens állapotot tükröz, a rendszernek van helyreállítási vonala. Az egymást követő visszaállítások folyamata sajnos problémát okozhat, mert dominóhatást idézhet elő. A 17. ábrán látható konkrét esetben például nem található helyreállítási vonal. A 17. ábrán az összes elosztott ellenőrzőpont ténylegesen inkonzisztens. Ez a buktató költséges műveletté teszi az elosztott ellenőrzőpont-kezelést, amely nem mindig konvergál elfogadható helyreállítási megoldáshoz. Éppen ezért sok hibatűrő elosztott rendszer üzenetnaplózással kombinálja az ellenőrzőpont-kezelést, tehát a folyamatok összes üzenetét rögzíti annak elküldése előtt, és egy ellenőrzőpont rögzítése után. Ez a taktika megoldja például a 16. ábra $D_{2}$ ellenőrzőpontjának problémáját. Pontosan az történik, hogy a $P$ folyamat $D_{2}$ ellenőrzőpontjának rögzítése után az $m_{2}$ küldése jelezve lesz a $P$ egy naplóüzenetében, amely a $Q$ $D_{2}$ ellenőrzőpontjával egyesítve már globálisan konzisztens állapotot alkothat. Maga a Hadoop elosztott fájlrendszer (HDFS) is az elosztott ellenőrzőpont-kezelés (a lemezképfájl) és az üzenetnaplózás (a szerkesztési fájl) kombinációját használja a NameNode-hibák utáni helyreállításhoz (lásd e kurzus harmadik képzési tervét). A későbbi szakaszokban bemutatott Pregel és GraphLab csak elosztott ellenőrzőpont-kezelést használ.

Tesztelje tudását

1.

Tekintsük a P és a Q folyamat által végrehajtott, az alábbi ábrán látható műveleteket:

  • A nyilak a folyamatok között átadott üzeneteket ábrázolják.
  • A P ellenőrzőpontjai P1-től P5-ig vannak jelölve.
  • A Q ellenőrzőpontjai Q1-től Q3-ig vannak jelölve.

Sequence diagram between process P and Q showing several back-and-forth interactions: from Q to P before checkpoint p1 and back to Q, then from P to Q before checkpoint q1 and back to P before checkpoint p2, then from Q to P and back to Q before checkpoint p3 and then checkpoint q2, then from Q to P before checkpoint p4 and back to Q before checkpoint q3, then four more from P to Q before checkpoint p5, then a failure occurs on Q.
A P és Q mely ellenőrzőpontjai alkotnak olyan helyreállítási vonalat, amelyig a P és a Q folyamat visszaállítható?