Hajautettujen järjestelmien perusteet Vikasietoisuus 2013 Kari Systä OHJ-5010; hajautettujen perusteet 1
Lopuista luennoista 29.4 6.5 Kertaus vikasietoisuudesta Service discovery Esimerkki järjestelmiä WEB UPnP / DLNA Corba? Saa ehdottaa Kertausta (mm. tenttiä varten) 2013 Kari Systä OHJ-5010; hajautettujen perusteet 2
Kaikki liittyy kaikkeen Vikasietoisuus Transaktiot Replikointi 2013 Kari Systä OHJ-5010; hajautettujen perusteet 3
Sisältö Peruskäsitteitä Häiriömallit Maskaaminen redundanssilla Päätöksenteko vikaantuneessa järjestelmässä Asiakkaan ja palvelimen kommunikoinnista Joukkojen kommunikoinnista 2013 Kari Systä OHJ-5010; hajautettujen perusteet 4
Perusvaatimuksia Saatavuus (availability) Järjestelmä on välittömästi käytettävissä Todennäköisyys sille, että järjestelmä on käytettävissä ajanhetkellä t Luotettavuus (reliability) Järjestelmä toimii katkoksetta Toimintavarma järjestelmä toimii todennäköisesti pitkän ajan häiriöittä 2013 Kari Systä OHJ-5010; hajautettujen perusteet 5
Perusvaatimuksia Turvallisuus (safety) Viittaa tilanteeseen, jossa mitään katastrofaalista ei tapahdu vaikka järjestelmään tulee häiriö Ylläpidettävyys (maintainability) Mitta sille miten helppoa järjestelmässä olevien virheiden korjaaminen on 2013 Kari Systä OHJ-5010; hajautettujen perusteet 6
Error-Fault-Failure Virhe (error) on ulkoinen tai ihmisen tekemä möhläys, esim. paketin hukkuminen tai ohjelmointivirhe Kun virheellinen kohta suoritetaan se saattaa aiheuttaa vian (fault) Järjestelmä on tilassa, joka ei ole määrittelyn mukainen Vika voi aiheuttaa häiriön (failure), joka tarkoittaa vian ilmenemistä järjestelmän ulkoisessa käyttäytymisessä 2013 Kari Systä OHJ-5010; hajautettujen perusteet 7
Vikasietoisuus Perustuu vikojen kontrolloimiseen estetään, poistetaan, ennustetaan Vikasietoinen järjestelmä pystyy tarjoamaan palvelunsa vikaantuneenakin Vikojen luokittelu Hetkelliset viat (transient) Lintu mikroaaltosäteen edessä Toistuvat viat (intermittent) Huono liitin Pysyvät viat (permanent) Kone rikki Mihin luokkiin softaviat? 2013 Kari Systä OHJ-5010; hajautettujen perusteet 8
Häiriömallit Kaatuminen (crash) Palvelin pysähtyy ja toimii oikein siihen asti Häiriö viestinnässä (omission failure) Palvelin epäonnistuu vastaamaan viestiin Vastaanoton puuttuminen (receive omission) Lähetyksen puuttuminen (send omission) Ajoitushäiriö (timing failure) Palvelin ei vastaa aikarajojen puitteissa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 9
Häiriömallit Vastaushäiriö (response failure) Palvelimen vastaus väärin Arvohäiriö (value failure) Arvo väärin Tilasiirtymähäiriö (state transition failure) Palvelin reagoi ennakoimattomalla tavalla pyyntöön Mielivaltainen häiriö (arbitrary failure, Byzantine failure) Palvelimelta tulee mielivaltainen vastaus mielivaltaisena ajankohtana 2013 Kari Systä OHJ-5010; hajautettujen perusteet 10
Häiriön havaitseminen Fail-stop Palvelin lakkaa toimimasta siten. että muut huomaavat sen (esim. CRASH-viesti) Fail-silent Hiljaisuus merkitsee kaatumista Fail-safe Palvelin sekoaa selkeällä tavalla, jonka voi huomata 2013 Kari Systä OHJ-5010; hajautettujen perusteet 11
Maskaaminen redundanssilla Informaation redundanssi Esim. dataan lisätään ylimääräisiä bittejä Aikaredundanssi Aktio suoritetaan tarvittaessa moneen kertaan Esim. transaktiossa Fyysinen redundanssi Järjestelmään lisätään ylimääräisiä laitteita ja prosesseja 2013 Kari Systä OHJ-5010; hajautettujen perusteet 12
Informaation redundanssi (koodausteorian alkeet ) Virheen tunnistaminen (error detection) Pariteettibitti yksinkertaisin esimerkki Tarkistussumma (cyclic-redundancy check) Hajautusfunktio Virheen korjaaminen (error correction) Lisää tarkistusinformaatiota Eräs tunnettu esimerkki Hamming code Tarkistusinformaatio 2013 Kari Systä OHJ-5010; hajautettujen perusteet 13
Hamming koodauksesta Jos halutaan lähettää yksi bitti, mutta lähetetään se kolmeen kertaan (siis 111 tai 000 ) mikä tahansa yhden bitin virhe voidaan korjata äänestämällä. Jos lähetetään 7 bittiä, virheen paikka voidaan ilmaista 3 bitillä. (Jos bittivirheen paikka tiedetään se voidaan korjata) Yleisesti yhden bitin virheen saa korjatuksi jos Bittien määrä Dataa Korjausta 3 1 2 7 4 3 15 11 4 31 26 5 2013 Kari Systä OHJ-5010; hajautettujen perusteet 14
Hamming korjauksesta uteiliaille (http://en.wikipedia.org/wiki/hamming_code) Bit position 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Encoded data p1 p2 d1 p4 d2 d3 d4 p8 d5 d6 d7 d8 d9 d10 d11 p16 d12 d13 d14 d15 bits p1 X X X X X X X X X X p2 X X X X X X X X X X Parity bit p4 X X X X X X X X X coverage p8 X X X X X X X X p16 X X X X X... Jos kaikki pariteettibitit oikein, ei virhettä Jos bitit 1, 2 ja 8 näyttäisi olevan väärin, virhe on bitissä 1+2+8 = 11. 2013 Kari Systä OHJ-5010; hajautettujen perusteet 15
Fyysinen redundanssi (esimerkkinä Triple modular redundancy ) A B C A1 V1 B1 V4 C1 V7 A2 V2 B2 V5 C2 V8 A3 V3 B3 V6 C3 V9 2013 Kari Systä OHJ-5010; hajautettujen perusteet 16
Prosessijoukon käyttö vikasietoisuuteen Prosessijoukon toipuminen Identtisistä prosesseista kootaan joukko Kaikki saavat samat viestit Joukot ovat dynaamisia Joukkoa käsitellään yhtenä abstraktiona Asiakas ei tiedä montako prosessia on Latteat ja hierarkkiset joukot Kollektiiviset päätökset vs. koordinaattori 2013 Kari Systä OHJ-5010; hajautettujen perusteet 17
Latteat ja hierarkkiset joukot Lattea Hierarkkinen 2013 Kari Systä OHJ-5010; hajautettujen perusteet 18
Joukon jäsenyys Keskitetty ratkaisu: joukkopalvelin, jolta jäsenyyttä pyydetään Hajautettu ratkaisu Esim. joukkoon haluava prosessi lähettää viestin kaikille joukon prosesseille Joukosta eroamisen vaihtoehdot Eroviesti kaikille Muut huomaavat prosessin kaatuneen ja poistavat sen 2013 Kari Systä OHJ-5010; hajautettujen perusteet 19
Joukon jäsenyys 1. Liittyvän prosessin on saatava alusta alkaen kaikki viestit 2. Eroava prosessi ei saa saada yhtään viestiä eron jälkeen Siksi joukkoon liittymisen ja eroamisen täytyy tapahtua synkronoidusti muihin viesteihin nähden Kokonaan kaatuneen joukon uudelleen perustaminen haastavaa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 20
Vikojen maskaaminen joukoilla Joukkojen idea: korvataan yksi haavoittuva prosessi vikasietoisella joukolla Primääriperustainen protokolla ~ hierarkkinen joukko Replikoitu kirjoittaminen ja äänestys ~ lattea joukko 2013 Kari Systä OHJ-5010; hajautettujen perusteet 21
Vikojen maskaaminen joukoilla K-vikasietoinen järjestelmä sietää k vikaa Fail-silent-tyyppisessä järjestelmässä tarvitaan k+1 prosessia Bysanttisessa järjestelmässä tarvitaan 2k+1 sillä k prosessia voisi liittoutua ja tuottaa yhtenäisen virheellisen tuloksen Todellisuudessa järjestelmää pitää analysoida tilastollisesti k-vikasietoisuuden osoittamiseksi 2013 Kari Systä OHJ-5010; hajautettujen perusteet 22
Päätökset vikaantuneissa järjestelmissä Joukkojen on päädyttävä sopuun, vaikka osa prosesseita olisikin vikaantuneita Vikaantumattomien prosessien pitää tehdä päätös äärellisellä määrällä askelia Kahden armeijan ongelma Punainen armeija laaksossa Sininen kahdessa leirissä vuorilla Sinisten ongelma: hyökätäänkö 2013 Kari Systä OHJ-5010; hajautettujen perusteet 23
Päätökset/Lamport ja kumppanit Bysanttisten kenraalien ongelma Siniset n leirissä, m petturia Viestintä kahdenvälistä Viestissä kerrotaan hyökätäänkö vai ei Tavoite: jokainen kokoaa vektorin V, jossa v i on leirin i vastaus Vektorin perusteella päätetään lähdetäänkö hyökkäämään Oletukset Prosessit synkronisia Unicast, joka säilyttää järjestyksen Viive rajoitettu k vikaantunutta prosessia 2013 Kari Systä OHJ-5010; hajautettujen perusteet 24
Päätökset/Lamport ja kumppanit Lamportin ratkaisu 1.Kaikki kertovat vastauksensa kaikille 2.Vastaukset kootaan vektoriksi 3.Vektorit välitetään muille 4.Mikäli saatujen vektorien alkiolla i on olemassa enemmistö, niin se on oikein 2013 Kari Systä OHJ-5010; hajautettujen perusteet 25
Lamportin ratkaisu bysanttiseen ongelmaan (neljä leiriä) 2 1 2 Vektorit kaikille 1 X 3 viallinen Y Z 2 4 4 2 4 4 1 Got (1, 2,X,4) 2 Got (1, 2,Y,4) 3 Got (1, 2,3,4) 4 Got (1, 2,Z,4) 1 Gets 2>(1,2,Y,4) 3>(A,B,C,D) 4>(1,2,Z,4) 2 Gets 1>(1,2,X,4) 3>(E,F,G,H) 4>(1,2,Z,4) Tulokset enemmistöpäätöksillä 4 Gets 1>(1,2,X,4) 2>(1,2,Y,4) 3>(I,J,K,L) 2013 Kari Systä OHJ-5010; hajautettujen perusteet 26
Lamportin ratkaisu bysanttiseen ongelmaan (neljä leiriä) 2 1 2 Vektorit kaikille X 1 Y 2 1 Gets 2>(1,2,Y) 3>(A,B,C) 2 Gets 1>(1,2,X) 3>(E,F,G) 3 Ei enemmistöä 1 Got (1, 2,X) 2 Got (1, 2,Y) 3 Got (1, 2,3) 2013 Kari Systä OHJ-5010; hajautettujen perusteet 27
Lamportin ratkaisu Toimii, jos järjestelmässä on 2k+1 vikaantumatonta prosessia kun vikaantuneita on k Toisin sanoen yli 2/3 prosesseista vikaantumattomia Tässä oletettu (akateemisesti), että prosessit ovat joko yhteistyöhaluisia tai bysanttisia 2013 Kari Systä OHJ-5010; hajautettujen perusteet 28
Häiriön huomaaminen Prosessit kertovat itse olevansa elossa Prosessit kyselevät muilta ovatko ne elossa ping Mistä tiedetään onko prosessi kaatunut, jos se ei vastaa pingiin? Huhuilu (gossiping) Kerrotaan eteenpäin tietoa elossa olevista prosesseista 2013 Kari Systä OHJ-5010; hajautettujen perusteet 29
Asiakkaan ja palvelimen kommunikoinnista Vika voi liittyä myös kommunikointiin Kommunikointikanavien virheitä Viestejä voi monistua Viestejä voi hävitä Yleensä viestit eivät voi muuttua tai ilmestyä tyhjästä TCP maskaa virheitä Omissio-viat ack- ja uudelleenlähetysviesteillä Rikkoontunutta kommunikointiväylää sekään ei maskaa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 30
RMI:n ja RPC:n häiriöt Tarkastellaan viittä erilaista häiriötä 1. Asiakas ei pysty paikantamaan palvelinta 2. Pyyntöviesti hukkuu 3. Palvelin kaatuu otettuaan vastaan pyyntöviestin 4. Vastausviesti asiakkaalle hukkuu 5. Asiakas kaatuu lähetettyään viestin 2013 Kari Systä OHJ-5010; hajautettujen perusteet 31
Palvelinta ei löydy Palvelin esimerkiksi kaatunut tai stubin ja skeletonin versiot eivät synkassa Heitetään poikkeus Kaikissa kielissä ei ole poikkeuksia (C) Rikkoo käsittelytuntumattomuuden Mitä tarkoittikaan käsittelytuntumattomuus? 2013 Kari Systä OHJ-5010; hajautettujen perusteet 32
Hukkunut pyyntöviesti Ratkaisu: Kun stub:n ajastin laukeaa, niin lähetetään viesti uudelleen Mitä tapahtuu, jos ajastin ei lauennutkaan siksi, että pyyntö oli hukkunut? Ehkä palvelin olikin vain hidas 2013 Kari Systä OHJ-5010; hajautettujen perusteet 33
Palvelin kaatuu Kolme eri skenaariota 2013 Kari Systä OHJ-5010; hajautettujen perusteet 34
Miten asiakas varautuu siihen, että palvelin kaatuu Vähintään-kerran-semantiikka Jatketaan pyyntöviestien lähettämistä Enintään-kerran-semantiikka Luovutetaan heti Ei-taata-mitään-semantiikka Jotain edellisten välillä Tavoite olisi tasan-kerran-semantiikka Ei mahdollinen 2013 Kari Systä OHJ-5010; hajautettujen perusteet 35
Tulostinesimerkki Tulostuspalvelin lähettää tiedon työn valmistumisesta (ACK-viesti) asiakkaalle Joko ennen kuin tulostus käynnistetään tai tulostamisen jälkeen Tulostin tiedottaa asiakkaita kaatumisesta bootatessaan Tulostamattomat työt ovat jonossa bootin jälkeen Asiakaan strategiat kun palvelin tiedottaa toipumisesta Ei koskaan lähetetä pyyntöä uudestaan Aina lähetetään pyyntö uudestaan Uusitaan pyyntö, jos ACK-viesti ei tullut Uusitaan pyyntö, jos ACK-viesti on tullut 2013 Kari Systä OHJ-5010; hajautettujen perusteet 36
Palvelimen häiriöskenaariot M = ACK-viestin lähetys, P = tulostus, C = kaatuminen 1. M P C 2. M C( P) 3. C( M P) 4. P M C 5. P C( M) 6. C( P M) 2013 Kari Systä OHJ-5010; hajautettujen perusteet 37
Strategioiden kombinaatiot Asiakas Palvelin Strategia M P Strategia P M Uudelleenlähetysstrategia MPC MC(P) C(MP) PMC PC(M) C(PM) Aina kaksi OK OK kaksi kaksi OK Ei koskaan OK nolla nolla OK OK nolla Vain kun saatu ACK Vain kun ei saatu ACK kaksi OK nolla kaksi OK nolla OK nolla OK OK kaksi OK 2013 Kari Systä OHJ-5010; hajautettujen perusteet 38
Vastausviestin hukkuminen Luotetaan ajastimeen Uusitaan palvelupyyntö Toimii vain, jos operaatiot idempotentteja Jos operaatiot eivät ole idempotentteja, niin lisätään pyyntöihin sarjanumero Pyyntöviesteihin voidaan myös lisätä yksi bitti kertomaan, että kyseessä on uudelleenlähetys 2013 Kari Systä OHJ-5010; hajautettujen perusteet 39
Asiakkaan kaatuminen Asiakas lähettää pyynnön ja kaatuu Orpo (orphan) laskenta Orvot varaavat resursseja Mitä, jos orvon laskenta päättyy vasta asiakkaan noustua pystyyn 2013 Kari Systä OHJ-5010; hajautettujen perusteet 40
Asiakkaan kaatuminen Ratkaisu: tuhoaminen Stub pitää lokia kutsuista Pystyyn noustessa lokissa olevat laskennat tuhotaan (orphan extermination) Ongelmia Levylle kirjoittaminen (raskasta) Lapsenlapsiorvot Verkon partitioituminen (tuhoaminen ei onnistu) 2013 Kari Systä OHJ-5010; hajautettujen perusteet 41
Asiakkaan kaatuminen Ratkaisu: jälleensyntyminen (reincarnation) Aika jaetaan epookkeihin Asiakkaan noustessa pystyyn, se viestittää kaikkia uuden epookin alkamisesta Palvelimen saadessa epookkiviestin se tuhoaa kaikki asiakkaan (vanhat) palvelulaskennat Verkon partitioituminen voi edelleen aiheuttaa ongelmia Vastausviestissä epookin numero, joten menneisyyden pyynnöt voidaan suodattaa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 42
Asiakkaan kaatuminen Ratkaisu: ekspiroituminen Asiakas antaan aikaraja T, jonka puitteissa RMI:n pitää palata Jos laskenta kestää yli T:n, niin pyydetään lisää aikaa Kaaduttuaan asiakas saa nousta aikaisintaan T:n päästä Miten T:n arvo valitaan? 2013 Kari Systä OHJ-5010; hajautettujen perusteet 43
Joukkojen kommunikoinnista Yleensä käytössä on point-to-pointkommunikointi ei multicastia Viestit lähetetään kahdenvälisinä Luotettava multicast: viestit toimitetaan kaikille joukon prosesseille Mitä jos prosessi p liittyy kesken joukkoon? Pitääkö p:n saada viesti? Mitä, jos lähettäjä kaatuu kesken lähetyksen? 2013 Kari Systä OHJ-5010; hajautettujen perusteet 44
Kommunikoinnista Luotettava multicast: taataan, että kaikki kunnossa olevat prosessit saavat viestit Mikä näkemys joukosta on lähettäjällä? Entä muilla? Helppo ratkaisu: Oletus: Prosessit toimivat moitteetta Oletus: Prosesseja ei liity joukkoon kesken kaiken Lähettävä prosessi liittää sarjanumeron viesteihin 2013 Kari Systä OHJ-5010; hajautettujen perusteet 45
Helppo ratkaisu 2013 Kari Systä OHJ-5010; hajautettujen perusteet 46
Kommunikoinnin skaalautuvuus Helppo ratkaisu, mutta ei skaalaudu N vastaanottajaa N kpl ACK-viestejä Ratkaisu: NACK (Negative ACK) Lähettäjä pitää vanhoja viestejä muistissa Esim.: Scalable Reliable Multicast (SRM) Jätetään vastaanottajan huoleksi huomata, että viestiä ei ole tullut NACK lähetetään kaikille 2013 Kari Systä OHJ-5010; hajautettujen perusteet 47
Scalable Reliable Multicasting Vastaanottajat huomaavat, että viesti puuttuu. Jokainen valmistelee NACK viestin, mutta ajastaa sen satunnaisen ajan päähän. Sender T=4 T=3 T=1 T=2 NACK NACK NACK NACK Kun aika on kulunut, lähetetään NACK kaikille. Lähettämättömät viestit perutaan. 2013 Kari Systä OHJ-5010; hajautettujen perusteet 48
Scalable Reliable Multicasting Skaalautuu paremmin, mutta silti ongelmia: Sen takaaminen, että vain yksi NACK lähetetään haastavaa - viipeiden mitoitus suuressa järjestelmässä NACK keskeyttää joskus turhaan vastaanottajan Kaikki saa NACK viestin Isoissa järjestelmissä tarvitaan hierarkkista SRM:ää Kullakin alueella oma koordinaattori 2013 Kari Systä OHJ-5010; hajautettujen perusteet 49
Atominen multicast Viestit välitetään joko kaikille tai ei kenellekään Enää ei oleteta virheettömiä prosesseja Moista tarvitsee esim. replikoitu tietokanta Esim. jos tietokantaan tulee sarja päivityksiä Replikan r kaaduttua kesken kaiken, se nousee pystyyn samassa tilassa kuin se oli Osa päivityksistä saattaa puuttua Haaste saada uudestaan samaan tilaan 2013 Kari Systä OHJ-5010; hajautettujen perusteet 50
Atominen multicast Atominen multicast takaa, että kaikki joukon jäsenet saavat samat viestit Tietokantaesimerkissä joko Joukon ei-kaatuneet päättävät, että r ei kuulu enää joukkoon ja suorittavat päivityksiä tai yksikään prosessi ei suorita päivityksiä R:n on pidettävä huolta joukkoon liittymisestä oikeassa tilassa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 51
Atominen multicast: Virtuaalinen synkronisuus VS perustuu näkemykseen joukosta (group view), jolle viestit lähetetään kaikilla osapuolilla sama näkemys Muutokset viestitään erityisellä view change viestillä Multicast voi epäonnistua vain, jos lähettäjä kaatuu kesken lähetyksen joko kaikki saavat viestin, tai kukaan ei saa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 52
Atominen multicast: Virtuaalinen synkronisuus Virtuaalisen synkronisuuden periaate 2013 Kari Systä OHJ-5010; hajautettujen perusteet 53
Viestien järjestyksestä Virtuaalinen synkronisuus ei vielä takaa järjestystä FIFO järjestynyt multicast Vastaanottajat saavat tietyn prosessin lähettämät viestit samassa järjestyksessä kuin lähetetty Kausaalinen multicast Jos m1 on kausaalisesti ennen m2:ta vaikka olisivatkin eri prosesseista vastaanottajat saa ne samassa järjestyksessä Täysin järjestetty multicast Viestit vastaanotetaan aina samassa järjestyksessa 2013 Kari Systä OHJ-5010; hajautettujen perusteet 54
Isis esimerkki virtuaalisesta synkronoinnista Käyttää luotettavaa TCP (point-to-point) protokollaa Yksittäinen lähetys siis onnistuu, mutta lähettäjä saattaa kaatua kesken lähettelyn Isis takaa että viesti m ryhmälle G on toimitettu kaikille kunnossaoleville G:n jäsenille ennen kuin G saa muuttua Kaikki säilyttää viestin m kunnes tietävät että se on kaikilla. Kun viesti on kaikilla se on stable. Kun tulee ryhmän muutos viesti, prossesit lähettävät eistabiilit viestit muille. 2013 Kari Systä OHJ-5010; hajautettujen perusteet 55
Esimerkki 2 1 5 2 1 5 4 View change 6 4 6 0 7 4 huomaa että 7 on kuollut 3 4 2 1 5 6 0 7 3 Kun flush tullut kaikilta korjataan näkemys ryhmästä Non-stable m 0 7 3 Flush 2013 Kari Systä OHJ-5010; hajautettujen perusteet 56
Distributed commit Yhden vaiheen commit (one-phase c) Koordinaattori käskee muita suorittamaan operaation Two-phase commit Koordinaattori lähettää VOTE_REQUEST; vastaukset joko VOTE_COMMIT tai VOTE_ABORT Tulosten perusteella koordinaattori lähettää GLOBAL_COMMIT tai GLOBAL_ABORT Ongelmia Kaatumiset kesken prosessin Liika odottaminen Three-phase commit 2013 Kari Systä OHJ-5010; hajautettujen perusteet 57