Академический Документы
Профессиональный Документы
Культура Документы
1.Uvod
5. Distribuirani zastoj
6. Oporavak transakcije
7. Rezime
Ovo poglavlje predstavlja distribuirane transakcije – one koje ukljucuju vise od jednog servera.
Distribuidane transakcije mogu biti ili flat or nested.
Protokol atomske obaveze je operativna procedura koja se koristi od skupa server ukljucenih u
distribuiranu transakciju.To omogucava serverima da donesu zajednicku odluku o tome da li se
transakcija moze izvrsiti ili prekinuti. Ovo poglavlje opisuje dvofazni protokol za obaveze,
which is the most commonly used atomic commit protocol.
Serveri koji pruzaju transakcije ukljucuju menadzer za oporavak ciji je zabrinutost da se osigura
da se efekti transakcija na objektima kojima upravlja server moze povratiti kada se zameni nakon
otkaza.
Kada se distribuirana transakcija zavrsi, svojstvo atomicnosti transakcija zahteva das vi ukljuceni
server izvrse transakciju ili da svi prekinu transakciju. Da bi se to postiglo, jedan od server
preuzima ulogu koordinatora, sto porazumeva obezbedjivanje istog ishoda na svim serverima.
Nacin na koji coordinator to postize zavisi od izabranog protokola. Protokol koji je poznat kao
dvofazni protokol za obaveze najcesce se koristi. Ovaj protokol omogucava serverima da
komuniciraju jedni s drugima kako bi postigli zajednicku odluku o tome da li ce se izvrsiti ili
prekinuti.
Pored toga, u garancijama da vrednosti objekata odrzavaju sve promene izvrsene izvrsenim
transakcijama i nijedna od onoh napravljenih od prekinutih.
Transakcija klijenta postoje raspodeljiva ako se poziva na operacije u nekoliko razlicitih. Postoje
dva razlicita nacina na koje se mogu distribuirati transakcije: kao flat transakcije i kao
upletenih transakcija.
U flat transakciju, klijent zahteva na vise server. Na primer, na slici 13.1 (a), transakcija T je flat
transakcija koja poziva operacije na objektima na serverima X, Y i Z. A flat klijentska
transakcija ispunjava svaki od svojih zahteva pre nego sto prodje na sledecu. Prema tome, svaka
transakcija pristupa serverima sekvencijalno. Kada server koriste zakljucavanje, transakcija
moze cekati samo jedan objekat istovremeno.
Serveri koji izvrsavaju zahteve kao deo distribuirane transakcije moraju biti u mogucnosti da
komuniciraju jedni sa drugima kako bi koordinirali svoje radnje kada se transakcija izvrsi.
Svaki od server koji upravlja objektom koji se pristupa transakcijom je ucesnik u transakciji i
obezbedjuje objekat koji zovemo ucesnik. Svaki ucesnik je odgovoran za pracenje svih
nadoplatljivih objekata na tom serveru koji su ukljuceni u transakciju. Ucesnici su odgovorni za
saradnju sa koordinatorom u sprovodjenju protokola o izvrsenju. Tokom napretka transakcije,
koordinator evidentira spisak reference za ucesnike, a svaki ucesnik belezi referencu na
koordinatora.
Interfejs sa koordinatora prikazan na slici 12.3 obezbedjuje dodatni metod, pridruzi se, koji se
koristi kad god novi ucesnik pristupi transakciji .
Koordinator belezi novog ucesnika na listu ucesnika. Cinjenica da koordinator poznaje sve
ucesnike i svaki ucesnik zna koordinator ce im omoguciti da prikupe informacije koje ce biti
potrebne u vreme izvrsavanja.
Slika 13.3 prikazuje klijenta ciji (flat) bankarska transakcija ukljucuje racune. A, B, C i D na
serverima BranchX, BranchY i Branch Z. Transakcija klijenta, T, prenese $4 sa naloga A na
racun C, a zatim prebaci $3 iz naloga B na racun D. Transakcija opisana sa leve strane je
prosirena kako bi pokazala das u otvorena transakcija i bliska transakcija usmereni na
koordinatora, koji bi se nalazio na jednom od server ukljucenih u transakciju. Svaki server se
prikazuje sa ucesnikom koji se pridruzuje transakciji pozivajuci metod pridruzivanja u
koordinatoru. Kada se klijent pozove na jednu od metoda u transakciji, na primer b.povuci(T,3)
objekat koji primi poziv ( B u BranchY u ovom slucaju) informise svog ucesnika da objekat
pripada transakciji T. Ako jos nije obavestio koordinatora, object ucesnika koristi operaciju
pridruzivanja da to ucini. U ovom primeru prikazujemo identifikatora transakcije koji se prenosi
kao dodatni argument, tako da primalac moze da ga prenese na koordinatora. Do trenutka kada
klijent pozove zatvorenu transakciju, koordinator ima preporuke za sve ucesnike.
Ovaj jednostavni jednofazni protokol atomskog izvrsavanja je neadekvatan, jer u slucaju kada
klijent zatrazi obavezu ne dozvoljava serveru da napravi jednostranu odlucku da prekine
transakciju. Razlozi koji sprecavaju server da moze da izvrsi svoj deo transakcije uopsteno se
odnosi na problem kontrole konkurencije. Na primer, ako se koristi zakljucavanje, resenje
zastoja moze dovesti do prekida transakcije bez saznanja klijenta, osim ako ne napravi drugi
zahtev na serveru. Ako se koristi optimisticka kontrola konkurentnosti, neuspeh ispravnosti na
serveru ce dovesti do toga da odluci o transakciji. Koordinator mozda nece znati kada se server
srusio i zamenio tokom napratka distribuirane transakcije – takav server ce morati prekinuti
transakciju. Protokol dvofazne obaveze je dizajniran da omoguci bilo kojem ucesniku da prekine
svoj deo transakcije. Zbog zahteva za atomicnost, ako je jedan deo transakcije prekinut, tada
celokupna transakcija mora biti prekinuta.
U prvoj fazi protokola, svaki ucesnik je glasao za transakciju da bude pocinjena ili obustavljena.
Stoga, pre nego sto ucesnik glasa za izvrsenje transakcije, mora osigurati d ace na kraju moci
izvrsiti svoj deo protokola za izvrsenje, cak i ako to ne uspe i zamenjuje se u medjuvremenu. Za
ucesnika u transakciji se kaze da je u pripremljenom stanju transakciju, ako ce na kraju moci da
je izvrsi. Da bi se uverili u to, svaki ucesnik u trajnom skladistu cuva svoje objekte koje je
izmenio u transakciji, zajedno sa pripremljenim statusom.
U drugoj fazi protokola, svaki ucesnik u transakciji sprovodi zajednicku odluku. Ako bilo koji
ucesnik glasa za prestanak, onda odluka mora da prekine transakciju. Ako svi ucesnici glasaju za
izvrsenje, onda je odluka da se izvrsi transakcija.
Problem je da se osigura das vi ucesnici glasaju id a svi donesu istu odluku. Ovo je prilicno
jednostavno ako se ne dogode nikakve greske, ali protokol mora ispravno raditi cak i kada neki
od server ne uspeju, poruke su izgubljene ili server privremeno nisu u mogucnosti da
komuniciraju jedni sa drugima.
U prvoj fazi dvofaznog protokola o izvrsenju, koordinator trazi od svih ucesnika ako su spremni
da obavezu, a u drugom, kaze im da izvrse (ili prekinu) transakciju. Ukoliko ucesnik moze
izvrsiti svoj deo transakcije, on ce se sloziti cim se evidentiraju promene i njen status u trajnom
skladistu – i spremna je da izvrsi. Koordinator u distribuiranoj transakciji komunicira sa
ucesnicima da izvrse protokol dvofazne obaveze pomocu operacija sumiranih na slici 13.4.
Metode se mogu izvrsiti, izvrsiti ili prekinuti
Dvofazni protokol za izvrsenje se sastoji od faze glasanja i faze zavrsetka kao sto je prikazano na
slici 13.5. Do kraja koraka (2) koordinator i svi ucesnici koji su glasali DA su spremni za
izvrsavanje. Do kraja koraka (3) transakcija je efikasno zavrsena. U koraku (3a) koordinator i
ucesnici su posveceni, tako da koordinator moze prijaviti odluku o obavezivanju klijenta. U
koraku (3b) koordinator obavestava o odluci da prekine klijent. U koraku (4) ucesnici potvrdjuju
da su pocinili tako da koordinator zna kada informacije koje je zabelezio o transakciji vise nisu
potrebne.
Ovaj ocigledno jednostavan protokol bi mogao propasti zbog jednog ili vise server koji se
raspadaju ili zbog razbijanja komunikacije izmedju server. Da bi se resila mogucnost pada, svaki
server cuva informacije koje se odnose na dvofazni protokol za izvrsenje u trajnom skladistenju.
Ove informacije mogu biti preuzete novim procesom koji je zapoceo da zameni sruseni server.
Aspekti oporavka distribuiranih transakcija opisani su u poglavlju 13.6.
Razmena informacija izmedju koordinatora i ucesnika moze biti neuspesna kada jedan od server
pada ili kada se poruka izgubi. Vremenski izlazi se koriste da bi se izbegli procesi blokiranja
zauvek. Kada dodje do nekog vremena u procesu, mora se preduzeti adekvatna akcija. Da bi se
ovo omogucilo, protokol ukljucuje vremenski akciju za svaki korak u kojem process moze
blokirati. Ove akcije su dizajnirane tako da omogucavaju cinjenicu da u asinhtonom sistemu
vremensko izkljucenje mozda ne znaci da je server uspeo.
Akcije isteka u dvofaznom protokolu komande – Postoje razlicite faze protokola kod kojih
koordinator ili ucesnik ne moze napredovati svoj deo protokola dok ne primi novi zahtev ili
odgovor od jedne do drugih.
Prvo razmislite o situaciji u kojoj je ucesnik glasao Da i ceka koordinatora da izvestava o ishodu
glasanja tako sto ce je obavestiti da je izvrsio ili prekinuo transakciju.
Na slici 13.6. Takav ucesnik nije siguran u ishod i ne moze nastaviti dalje dok ne dobije rezultat
glasanja od koordinatora. Ucesnik ne moze jednostrano odluciti sta dalje da radi, a u
medjuvremenu predmeti koje koristi njegova transakcija ne mogu biti objavljeni za koriscenje od
strane drugih transakcija. Ucesnik na zahtev oducuje koordinatora da odredi ishod transakcije.
Kada dobije odgovor, nastavlja protokol u koraku (4) na slici 13.5. Ako
Koordinator moze biti odlozen kada ceka glasaca od ucesnika. Kako jos nije odluceno o sudbini
transakcije, ona moze odluciti da prekine transakciju nakon odredjenog vremenskog perioda.
On mora tada objaviti prestanak za ucesnike koji su vec poslali svoje glasove. Neki zakasnjeni
ucesnici mogu pokusati da glasaju “da “ nakon toga, ali njihovi glasovi bice ignorisani i on ice
uci u neizvesno stanje kao sto je gore opisano.
Performanse protokola za dvofazno izvrsavanje – Pod uslovom da sve ide dobro – to jest, da
koordinator i ucesnici i komunikacija izmedju njih ne propadnu, protokol dvofaznog izvrsavanja
koji ukljucuje N ucesnike moze se zavrsiti, pomocu koje N moze izvrsiti poruke i odgovore, a
zatim N poruke obazeze. To je cena u porukama proporcionalna 3N, a trosak u vremenu je tri
kruga poruka. Obavezne poruke se ne racunaju u procenjenim troskovima protokolima, koji
mogu pravilno funkcionisati bez njih – njihova uloga je omoguciti serverima da brisu
informacije o zastareloj koordinatoru.
Protokoli za tri faze su dizajnirane da ublaze takva kasnjenja. Oni su skuplji u broju poruka
potrebnih krugova za normalan ( slucaj bez otkaza ). Za opis izvrsavanja trofaznih protokola
pogledajte vezbu 13.2.
Otvara novu podtransakciju ciji roditelj je trans i vraca jedinstveni identifikator pretplatnicke
transakcije.
Trazi od koordinatora da izvestava o status transakcije trans. Vraca vrednosti koje predstavljaju
jednu od sledecih: pocinjeni, prekinuti, privremeni.
Na slici 13.1(b), T je transakcija na najvisem nivou T1, T2, T11, T12, T21 i T22 su
podtransakcije. T1 i T2 su deca podtransakcije, koji se obracaju njihovim roditeljima. Slicno
tome, T11 i T12 su deca transakcije T1, a T21 i T22 su deca transakcije T2. Svaka
podtransakcija pocinje nakon svog roditelja i zavrsava se pre njega. Tako na primer. T11 i T12
pocinju posle T1 i zavrsavaju se pre njega.
Kada se potpuna transakcija zavrsi, donosi nezvisnu odluku ili da se izvrsi privremeno ili da se
prekine. Privremena izvrsenja nije isto kao sto je priprema: to je samo lokalna odluka i nije
podrzana trajnim skladistenjem. Ako se server kasnije srusi, njegova zamena nece moci izvrsiti
privremeno izvrsenje. Zbog toga je potreban protokol dvofazne obaveze za upletene transakcije
kako bi omogucio serverima privremeno pocinjenih transakcija koje nisu uspele prekinuti.
Koordinator za podtransakciju obezbedice operaciju otvaranja podtransakcije, zajedno sa
operacijom koja omogucava koordinatoru podtransakcije da se raspituje o tome da li je njegov
roditelj jos uvek pocinio ili obustavio, kao sto je prikazano na slici 13.7.
Klijent zapocinje niz upletenih transakcija otvaranjem transakcije najviseg nivoa sa operacijom
otvorene transakcije koja vraca identifikator transakcije za transakciju na najvisem nivou. Klijent
zapocinje podtransakciju pozivom na operaciju otvorene podtransakcije, ciji argument specificira
svoju roditeljsku transakciju. Nova podtransakcija automatski se pridruzuje roditeljskoj
transakciji, a vracen je identifikator transakcije za podtransakciju.
Identifikator za podtransakciju mora biti prosirenje TID-a svojih roditelja, konstruisanih na takav
nacin da identifikator roditeljske ili najviseg nivoa transakcije moze da se odredi iz sopstvenog
identifikatora transakcije.Pored toga, svi identifikatori pretplacanja trebaju biti globalno
jednostavni. Klijent ciji skup upletenih transakcija do kraja, pozivajuci se na blisku transakciju ili
prekinuti transakciju na koordinatoru najvise transakcije.
Razmotrimo transakciju najviseg nivoa T i njegove podtrensakcije prikazane na Slici 13.8, koja
se zasniva na Slici 13.1 (b). Svaka podtransakcija je ili privremeno pocinjena ili obustavljena. Na
primer, T12 je privremeno pocinio i T11 je prekinut, ali T12 zavisi od njenom roditelju T1 i na
kraju na transakciji najviseg nivoa. Iako su T21 i T22 privremeno pocinjeni, T2 je prekinut i to
znaci da T21 i T22 takodje moraju prekinuti. Pretpostavimo da T odluci da izvrsi uprkos
cinjenici da je T2 prekinut, takodje T1 odluci da izvrsi uprkos cinjenici da je T11 prekinuo.
Kada se transakcija na najvisem nivou zavrsi, njegov koordinator obavlja dvofazni protokol za
izvrsenje. Jedini razlog za podtransakciju ucesnika koji nije u mogucnosti da zavrsi jested a li se
stusila od zavrsetka privremenog izvrsenja. Podsetimo se da je, kada je svaka podtransakcija
stvorena, pridruzila se svojom roditeljskoj transackiji. Prema tome, koordinator svake roditeljske
transakcije ima spisak svojih podtransakcija deteta. Kada se upletena transakcija privremeno
obavezuje, prijavljuje svoj status i status svojih potomaka svom roditelju. Kada upletena
transakcija prekine, ona samo prijavljuje prekid svom roditelju bez davanja bilo kakvih
informacija o svojim potomcima. Na kraju, transakcija na najvisem nivou prima listu svih
podtransakcija na stablu, zajedno sa statusaom svake od njih. Potomci prekinutih
podtransakcijama zapravo su izostavljeni sa ove liste.
Informacije koje svaki koordinator poseduje u primeru prikazanom na slici 13.8 prikazane su na
slici 13.9. Imajte na umu da T12 i T21 dele koordinator dok oba pokrecu na serveru N. Kada je
podtransakcija T2 prekinuta, pojavila je cinjenicu njenom roditelju, T, ali bez prenosa bilo
kakvih informacija o svojim podtransakcijama T21 i T22. Podtransakcija je siroce ako jedan od
njegovih predaka prekine, eksplicitno ili zbog toga sto je koordinator srusen.
U skladu sa TID u drugim argumentom. Na primer, koordinator T12 je takođe koordinator T21,
jer se pokreću na istom serveru, ali kada primi canCommit? poziv, drugi argument će biti T1 i on
će se baviti samo sa T12. Ako učesnik pronađe bilo koje podtransakcije koje odgovaraju drugom
argumentu, priprema objekte i odgovore sa glasom Da. Ako ne pronađe bilo kakvu, onda se
mora srušiti jer je izvršio pretplatu i odgovorio je bez glasova.
Flat dvofazni protokol za izvrsavanje - U ovom pristupu, koordinator transakcije najvišeg nivoa
šalje canCommit? poruke koordinatorima svih podtransakcija na privremenu listu obaveza. U
našem primeru, koordinatorima T1 i T12. Tokom protokola o izvršenju, učesnici se odnose na
transakciju po TID-u najvišeg nivoa. Svaki učesnik pogleda u svoju listu transakcija za svaku
transakciju ili podtransakciju koja odgovara tom TID-u. Na primer, koordinator T12 je takođe
koordinator T21, jer se pokreću na istom serveru (N).
Nažalost, ovo ne pruža dovoljne informacije kako bi omogućile ispravne radnje učesnika kao što
je koordinator na serveru N koji imaju mješavinu privremeno počinjenih i obustavljenih
podtranskakcija. Ako N koordinator bude upitan samo da izvrši T, završiće se tako što će izvršiti
i T12 i T21, jer su, prema svojim lokalnim informacijama, oba su privremeno posvećena. Ovo je
pogrešno u slučaju T21, jer je njegov roditelj, T2, prekinuo. Da dozvolite takve slučajeve,
canCommit? operacija za protokol ravnog urezivanja ima drugi argument koji daje listu
prekinutih podtransakcijama, kao što je prikazano slika 13.11. Ucesnik moze da učini potomke
transakcije na najvišem nivou, osim ako nisu prekinuli pretke. Kada učesnik primi canCommit?
zahteva, to čini sledeće:
Nažalost, ovo ne pruža dovoljne informacije kako bi omogućile ispravne radnje učesnika kao što
je koordinator na serveru N koji imaju mešavinu privremeno počinjenih i obustavljenih
podtranskakcija. Ako N koordinator bude upitan samo da izvrši T, završiće se tako što će izvršiti
T12 i T21, jer su, prema svojim lokalnim informacijama, oba privremeno počinjena. Ovo je
pogrešno u slučaju T21, jer je njegov roditelj, T2, prekinuo. Da dozvolite takve slučajeve,
canCommit? operacija za protokol flat izvrsavanja ima drugi argument koji daje listu prekinutih
podtransakcijama, kao što je prikazano na slici 13.11. Učesnik može da učini potomke
transakcije na najvišem nivou, osim ako nisu prekinuli pretke. Kada učesnik primi canCommit?
zahteva, to čini sledeće:
Ako učesnik ima bilo kakve privremeno izvršene transakcije koje su potomci transakcije na
najvišem nivou, trans:
- proverite da nemaju prekinute pretke u abortListu. Zatim se pripremite za izvršenje
(evidentiranjem transakcije i njegovih predmeta u stalnom skladištenju),
* Ukoliko učesnik nema privremeno posvećenog potomaka transakcije na najvišem nivou, mora
da je propao, pošto je izvršio pod-transakciju i šalje Koordinatoru “Ne” glas.
Poređenje dva pristupa - hijerarhijski protokol ima prednost da u svakoj fazi učesniku treba samo
potražiti podtransakcije svog neposrednog roditelja, dok je flat protokol trebao imati listu aborta
kako bi eliminisao transakcije čiji su roditelji prekinuti. Moss [1985] je preferirao flat algoritma
jer omogućava koordinatoru transakcije na najvišem nivou da komunicira direktno sa svim
učesnicima, dok hijerarhijska varijanta uključuje prenošenje nizova poruka nizu i gore u fazama.
Postoji četvrti korak u kome se podtransakcije mogu odložiti. Razmotriti privremeno počinjene
dečije podtransakcije prekinute podtransakcije; neobavezno se obaveštavaju o ishodu transakcije.
U našem primeru, T22 je takva podtranskakcija - ona je privremeno počinila, ali pošto je njen
roditelj T2 prekinut, on ne postaje učesnik. Da bismo se suočili sa takvim situacijama, svaka
podtranskakcija koja nije primila canCommit? poruka će se izvršiti nakon isteka vremenskog
perioda. Operacija getStatus na slici 13.7 dozvoljava suptransakciji da se raspituje da li je roditelj
počinio ili je prekinut. Da bi se takve istrage mogle obaviti, koordinatori prekinute
podtransakcije trebaju preživjeti u određenom periodu. Ako siročna subtranskakcija ne može da
stupi u kontakt sa roditeljima, eventualno će se prekinuti.
Svaki server upravlja skupom objekata i odgovoran je za osiguranje da ostanu konzistentni kada
se pristupa istovremenim transakcijama. Zbog toga je svaki server odgovoran za primenu
kontrole konkurencije na svoje objekte. Članovi kolekcije servera distribuiranih transakcija su
zajednički odgovorni za obezbeđivanje da su izvršeni na serijski ekvivalentan način.
U distribuiranoj transakciji, brave na objektu se održavaju lokalno (na istom serveru). Lokalni
menadžer zaključavanja može da odluči da li da odobri zaključavanje ili da izvrši zahtevanu
transakciju. Međutim, ne može da pusti bilo kakve zaključke dok ne zna da je transakcija
izvršena ili prekinuta na svim serverima koji su uključeni u transakciju. Kada se zaključavanje
koristi za kontrolu konkurencije, objekti ostaju zaključani i nedostupni za druge transakcije
tokom protokola atomskog izvršenja, iako prekinuta transakcija oslobađa brave posle faze 1
protokola.
Kako menadžeri zaključavanja na različitim serverima postavljaju svoje brave nezavisno jedan
od drugog, moguće je da različiti serveri mogu nametnuti različite porudžbine na transakcijama.
Za postizanje istog porudžbina na svim serverima, koordinatori se moraju složiti oko naručivanja
njihovih vremenskih oznaka. Vremenska oznaka sastoji se od para <local timestamp, server-id>.
Dogovorena porudžbina parova vremenskih oznaka zasnovano je na poređenju u kojem je deo
server-id manji.
Ista porudžbinska transakcija može se postići na svim serverima čak i ako njihovi lokalni satovi
nisu sinhronizovani. Međutim, iz razloga efikasnosti potrebno je da se vremenski žigovi koje
izda jedan koordinator grubo usklađuju sa onima koje izdaju drugi koordinatori. Kada je to
slučaj, naručivanje transakcija generalnoodgovara redosledu započinjanja u realnom vremenu.
Vremenski žigovi se mogu držati grubo sinhronizovanim korišćenjem sinhronizovanih lokalnih
fizičkih časovnika (pogledajte Poglavlje 10).
Pravila validacije u poglavlju 12.5 pretpostavljaju da je validacija brza, što važi za transakcije sa
jednim serverom. Međutim, u distribuiranoj transakciji, protokol dvofaznog izvrsavanja može
potrajati i odložiti druge transakcije da unesu validaciju sve dok se ne dobije rešenje o trenutnoj
transakciji. U distribuiranim optimističkim transakcijama, svaki server primenjuje paralelni
protokol validacije. Ovo je produžetak povratne ili unapred validacije kako bi se omogućilo da
više transakcija bude u fazi validacije istovremeno. U ovom nastavku, treba proveriti pravilo 3,
kao i pravilo 2 za validaciju unazad. To znači da se skup snimanja transakcije koji se validiše
mora proveriti za preklapanja s skupom za pisanje ranijih preklapanja transakcija. Kang i
Robinson [1981] opisuju paralelnu validaciju u svom radu.
Koristi se paralelna validacija, transakcije neće patiti od zastoja u obavezi. Međutim, ako serveri
jednostavno izvršavaju nezavisne potvrde, moguće je da različiti serveri distribuirane transakcije
mogu serijatizovati isti skup transakcija u različitim redosledima, na primer sa T pre U na
serverima X i V pre T na serveru Yu našem primeru.
Drugi pristup je da svi serveri određene transakcije koriste isti globalno jedinstveni broj
transakcije na početku validacije [Schlageter 1982J. Koordinator dvofaznog protokola za
izvrsavanje je odgovoran za generisanje globalno jedinstvenog broja transakcije i prosleđuje ga
učesnicima u canCommitu? poruke. Pošto različiti serveri mogu koordinirati različite transakcije,
serveri moraju (kao u protokolu za raspoređivanje vremenskih oznaka) imati dogovorenu
porudžbinu za brojeve transakcija koje generišu.
Agraval et al. [1987] su predložili varijaciju Rung i Robinsonovog algoritma koji podržava
transakcije samo za čitanje, zajedno sa algoritmom koji se zove MVGV (generalizovano
validiranje višestruke verzije). MVGV je oblik paralelne validacije koja osigurava da brojevi
transakcija odražavaju serijski red, ali zahteva da se vidljivost nekih transakcija odloži nakon
izvršenja. Takođe dozvoljava promenu broja transakcije kako bi se omogućilo da neke
transakcije potvrdjuju inače ne bi uspele. Rad takođe predlaže algoritam za izvršavanje
distribuiranih transakcija. Slično je predlogu Schlagetera u tome što se mora naći globalni broj
transakcije. Na kraju faze pročitavanja, koordinator predlaže vrednost za globalni broj
transakcije i svaki učesnik pokušava da potvrdi svoje lokalne transakcije koristeći taj broj.
Međutim, ako je predloženi globalni broj transakcije premali, neki učesnici možda neće moći da
potvrdjuju svoju transakciju i pregovaraju sa koordinatorom za povećan broj. Ako se ne može
naći odgovarajući broj, onda će učesnici morati prekinuti svoju transakciju. Na kraju, ako svi
učesnici mogu potvrditi svoje transakcije, koordinator će dobiti svaku od njih prijedloge za
brojeve transakcija Ako se pronađu uobičajeni brojevi onda će se izvršiti transakcija.
grafički se u teoriji može konstruisati iz lokalnih. Postoji ciklus u globalnom grafičkom čekanju
koji nije u nekom lokalnom - to jest, može postojati raspodeljeni zastoj. Podsetimo da je grafik
čekanja usmeren graf u kojem čvorovi predstavljaju transakcije i podseća, a ivice predstavljaju
objekat koji drži transakcija ili transakcija čekanja na objekat. Postoji blokada ako i samo ako
postoji ciklus na grafikonu za čekanje.
Kompletni grafik za čekanje na slici 13.13 (a) pokazuje da ciklus zaključavanja sastoji se od
alternativnih ivica, koji predstavljaju transakciju koja čeka objekat i objekat koji drži transakcija.
Pošto svaka transakcija može samo da čeka jedan objekat istovremeno, objekti se mogu ostaviti
van grafikona čekanja, kao što je prikazano na slici 13.13 (b).
Detekcija distribuiranog blokiranog zahteva ciklus koji se može naći u grafičkom čekanju za
globalnu transakciju koja se distribuira među serverima koji su bili uključeni u transakcije.
Lokalni čekati-za grafikonemože da napravi menadžer zaključavanja na svakom serveru, kako je
razmatrano u Poglavlju 12. U prethodnom primeru, lokalni čekovi za grafove servera su:
server U V (added when U requests b. withdraw! JO)) server Z: V —»
W(added when V requests c.withdraw(20)) server X: W —» U (added
when W requests a.withdraw(20))
Kako globalni grafik za čekanje delimično drži svaki od nekoliko uključenih servera,
komunikacija između ovih servera je neophodna za pronalaženje ciklusa na grafikonu.
Kada pronadjen ciklus, odlučuje kako rešiti zastoje i obavještava servere o transakciji koja će biti
prekinuta radi rešavanja zastoja.
Centralizovana detekcija zastoja nije dobra ideja, jer zavisi od jednog servera da bi je izvršio. On
pati od uobičajenih problema povezanih sa centralizovanim rešenjima u distribuiranim sistemima
- lošu dostupnost, nedostatak tolerancije grešaka i nemogućnost skale. Pored toga, trošak čestog
prenosa lokalnih grafikona čekanja je visok. Ako se globalni graf se prikuplja manje učestalo,
mrtve tačke mogu trajati duže da se otkriju.
Phantom zatvaranje Q A zastoj koji je "otkriven", ali zapravo nije zastoj, naziva se fantomskom
zastoj. Kod otkrivanja distribuiranog mrtvog ključa, informacije o čekanju odnosa između
transakcija se prenose sa jednog servera na drugi. Ukoliko dođe do mrtve tačke, neophodne
informacije će se eventualno prikupljati na jednom mjestu i otkriti će se ciklus. Budući da će ova
procedura trajati neko vreme, postoji mogućnost da će jedna od transakcija koja ima blokadu u
međuvremenu to pustiti, u tom slučaju zastoj više neće biti.
Razmotrimo slučaj globalnog detektora za zaustavljanje koji prima lokalne grafičke čekanja sa
servera X i Y, kao što je prikazano na slici 13.14. Pretpostavimo da transakcija U onda oslobađa
objekat na serveru X i zatraži onu koju drži V na serveru Y. Pretpostavimo da je i globalni
detektor primio lokalni grafik servera servera prije servera Ks-a. U ovom slučaju bi otkrio ciklus
T - »U V T, iako ivica T -» U više ne postoji. Ovo je primer fantomskog zastoja.
Čitalac posmatrača će shvatiti da ako transakcije koriste dvofazne brave, ne mogu otpuštati
predmete, a zatim dobiti više objekata, a ciklusi fantomskog zastoja se ne mogu pojaviti na način
kako je gore navedeno. Razmotrite situaciju u kojoj ciklus
Mogućnost otkrivanja fantomskog mrtvog ugla bi se mogla otkriti ako se transakcija čekanja u
ciklusu blokade prekine tokom procedure otkrivanja zastoja. Na primer, ako postoji ciklus T ->
U -> V -> T i U prekida nakon što su sakupljene informacije o U, onda je ciklus već prekinut i
nema zastoja.
Kretanje ivice - Distribuirani pristup otkrivanju blokade koristi tehniku nazvanu obrtanje ivice ili
potiskivanje staze. U ovom pristupu, grafikon za čekanje na globalnom nivou nije konstruisan,
ali svaki uključeni server ima znanje o nekim njegovim ivicama. Serveri pokušavaju pronaći kola
tako što će proslediti poruke zvane proba, koje slijede ivice grafikona kroz distribuirani sistem.
Poruka proba se sastoji od čekanja na transakciji - za odnose koji predstavljaju putanju u
globalnom grafičkom čekanju.
Pitanje je: kada bi server trebao poslati probu? Razmotrite situaciju na serveru X na slici 13.13.
Ovaj server je upravo dodao ivicu W- »U na svoj lokalni grafik za čekanje i u ovom trenutku
transakcija U čeka da pristupi objektu B, koja transakcija V drži na serveru Y. Ova ivica bi
mogla da bude deo ciklusa kao što je V -> T1 -> T2 - V -> U -> V koji uključuje transakcije koje
koriste objekte na drugim serverima. Ovo ukazuje na to da postoji potencijalni distribuirani
ciklus zastoja, koji se može naći s slanjem sonde na server Y.
Sada razmislite o situaciji malo ranije kada je server Z dodao ivicu V - »V na svoj lokalni grafik:
u ovom trenutku VF ne čeka. Stoga, ne bi bilo smisla poslati probu.
Iniciranje: Kada server zapazi da transakcija T počne da čeka drugu transakciju U, gde U čeka da
pristupi objektu na drugom serveru, inicira otkrivanje tako što šalje probu koja sadrži ivicu <T -
> U> na server objekat na kojem je transakcija U blokirana. Ako U deli bravu, proba se šalje
svim držačima brave. Ponekad druge transakcije mogu početi deliti bravu kasnije, u kom slučaju
se proba može poslati i njima.
Na primer, kada server nekog objekta prima probu <T -> U> (koja ukazuje na to da T čeka na
transakciju U koja drži lokalni objekat), ona proverava da li i U čeka. Ako je to, transakcija koju
čeka (na primjer, V) se doda sondi (što ga čini <T-> U -> V>), a ako nova transakcija (V) čeka
na drugi objekt na drugom mjestu, sonda se prosleđuje.
Na ovaj način, staze kroz globalni grafik za čekanje se grade po jednoj ivici istovremeno. Pre
nego što prosledi probu, server proverava da li je transakcija (na primer, T) koja je upravo dodala
izazvala proverivanje da sadrži ciklus (na primer, <T U -> V -> T>). Ako je to slučaj, pronašao
je ciklus u grafikonu i otkriven je zastoj.
U našem primeru, sledeći koraci opisuju kako se otkriva blokada i provere koje se prosleđuju
tokom odgovarajuće faze otkrivanja.
* Server X započinje otkrivanje slanjem probe <W -> U> na server B (Server
Y).
* Server Y prima probu <W -> U>, napominje da je B držao V i dodao V u probu da proizvede
<W -> U -> V>, napominje da V čeka C na serveru Z. Ova proba se prosleđuje na server Z.
*Server Z prima probu <W->U-> V> i napomene C drže W i dodajuW probu da bi proizveli
<W-> U -> V-> W>.
Ova putanja sadrži ciklus. Server otkriva zastoj. Jedna od transakcija u ciklusu mora biti
prekinuta da bi prekinula zaustavljanje. Transakcija koja se može prekinuti može se odabrati
prema prioritetima transakcije, koji će biti opisani uskoro.
Slika 13.15 prikazuje napredak poruke probe od inicijacije od strane servera A do detekcije
blokade od strane servera C. Probe su prikazane kao teške strelice, objekti kao kružic i
koordinatori transakcija kao pravougaoni. Svaka proba je prikazana direktno od jednog objekta
do drugog.U stvarnosti, pre nego što server pošalje probu na drugi server, konsultuje
koordinatora poslednje transakcije na putu da sazna da li drugi čeka drugi objekat na drugom
mestu. Na primer, pre nego što server B prenosi probu <W -> U -> V> konsultuje koordinatora
V da bi se utvrdilo da V čeka C. U većini algoritama za obradu ivice, serveri objekata šalju probe
koordinatorima transakcija, a zatim ih prosleđuju (ako transakcija čeka) na server objekta za
koga se traži transakcija. U našem primeru, server B prenosi probu <W-> U -> V> u koordinator
V, koji ga zatim prosleđuje serveru C. Ovo pokazuje da kada je proba napred, potrebne su dve
poruke.
Gore navedeni algoritam bi trebao pronaći bilo kakav zastoj zaključak koji se javlja, pod
uslovom da transakcije čekanja ne prestaju i ne postoje neuspesi kao što su izgubljene poruke ili
pucanje servera. Da biste to razumeli, razmotrite ciklus zastoja u kojem poslednja transakcija, W,
počinje da čeka i završava ciklus. Kada W počne da čeka objekat, server pokreće probu koja ide
na server objekta koji se drži svake transakcije koju W čeka. Primaoci proširuju i prosleđuju
probu na servere objekata koji zahtevaju sve transakcije čekanja koje pronađu. Stoga svaka
transakcija koju W čeka direktno ili indirektno će biti dodata u prohe ukoliko se ne otkrije
zastoj. Kada postoji zastoj, W čeka na sebe indirektno. Dakle, proba će se vratiti objektu koji W
drži. Stoga svaka transakcija koju čeka direktno ili indirektno će biti dodata u prohe ukoliko se
ne otkrije zastoj. Kada postoji zastoj, W čeka na sebe indirektno. Dakle, sonda će se vratiti
objektu koji W drži.
Izgleda da se veliki broj poruka šalje kako bi otkrio zastoje. U gornjim primerima, vidimo dve
poruke probe za otkrivanje ciklusa koji uključuju tri transakcije. Svaka od probnih poruka je
generalno dve poruke (od objekta do koordinatora, a zatim od koordinatora do objekta).
Sonda koja otkriva ciklus sa N transakcijama će se proslediti koordinatorima transakcija (N- 1)
putem (N- 1) servera objekata, koji zahtijevaju 2 (N - 1) poruke.
Na sreću, većina zastoj blokova uključuje cikluse koji sadrže samo dve transakcije, a nema
potrebe za nepotrebnom zabrinutošću na više poruka. Ovo zapažanje je napravljeno iz studija
baza podataka. Takođe se može reći i uzimajući u obzir verovatnoću konfliktnog pristupa
objektima. Vidi Bernstein et al. 119871.
Možda se čini da bi se prioriteti transakcija mogli koristiti i za smanjenje broja situacija koje
dovode do otkrivanja mrtvog zatvora, koristeći pravilo da se otkrivanje pokreće samo kada
transakcija višeg prioriteta počne da čeka na niži prioritet. U našem primeru na slici 13.16, kada
bi se T> U poslala inicirajuća sonda <T -> U>, ali kao W <V, inicirajuća proba <W -> V> neće
biti poslata. Ako pretpostavimo da kada transakcija počne da čeka drugu transakciju, jednako je
verovatno da će transakcija čekanja imati viši ili niži prioritet od čekanja za transakciju, onda će
upotreba ovog pravila verovatno smanjiti broj probi za oko polovine .
Prioriteti transakcija takođe se mogu koristiti za smanjivanje broja probi koje se prosleđuju.
Opšta ideja je da probe trebaju putovati "nizbrdo" - to jest, iz transakcija sa većim prioritetima
na transakcije sa nižim prioritetima. Da bi to uradili, serveri koriste pravilo da ne prosleđuju
nikakvu probu nosiocu koji ima veći prioritet od inicijatora. Argument za to je da ako vlasnik
čeka drugu transakciju onda je morao pokrenuti detekciju slanjem probe kada je počela sa
čekanjem.
Međutim, postoji i zamka koja je povezana sa ovim očiglednim poboljšanjima. U našem primeru
na slici 13.15 transakcije U, V i W izvršavaju se u redosljedu u kojem U čeka V i V čeka W kad
W počne da čeka U. Bez prioritetnih pravila, otkrivanje se pokreće kada W počne da čeka
slanjem sonde <W -> U>. Prema pravilu prioriteta, ova proba neće biti poslata, jer W <U i zastoj
neće biti otkrivena.
Problem je u tome što redosled kojim transakcije počinju sa čekanjem mogu utvrditi da li će biti
otkriven zastoj zaključak. Iznad zamku se može izbeći korištenjem šeme u kojem koordinatori
čuvaju kopije svih probi primljenih u ime svake transakcije u redovima probe. Kada transakcija
počne sa čekanjem na objekat, ona prosleđuje probu u svoj red do servera objekta, koji propagira
probe na putu nizbrdo.
U našem primeru na slici 13.15, kada U počne da čeka V, koordinator V će sačuvati sondu <U->
V>. Vidi sliku 13,17 (a). Zatim, kada V počne da čeka W, koordinator W će sačuvati <V-> W> i
V će proslediti svoj red provere <U -> V> do W. Pogledajte sliku 13.17 (b), u kojoj W tip za
proveravanje ima <U -> V> i <V-i W>. Kada W počne da čeka A, to će proslediti njegov red
provere <U -> V -> W> na server A, koji takođe beleži novu zavisnost W - > U i kombinuje je sa
informacijama u probi koja je primljena da bi se utvrdilo da je U -> V -> W -> U. Zastoj je
otkriven.
Kada algoritam zahteva provere koje se čuvaju u redovima provere, takodje zahtijeva aranžmane
za prenošenje provere na nove vlasnike i odbacivanje provere koji se odnose na transakcije koje
su izvršene ili obustavljene. Ukoliko su relevantne provere odbačene, mogu se pojaviti
neotkrivene mrtve tačke i ako se zadrže zastarele provere, mogu se otkriti lažne blokade. Ovo
mnogo doprinosi složenosti bilo kog algoritma. Čitaoci koji su zainteresovani za detalje o takvim
algoritmima bi trebali videti Sinha i Natarajan [1985] i Choudhari et al. [1989], koji predstavljaju
algoritme za upotrebu sa ekskluzivnim bravama. Ali videće da Choudhari et al. pokazali su da je
Sinha i Natarajanov algoritam netačan i ne uspeva da otkrije sve blokade i čak može prijaviti
lažne blokade. Kshemkaliani i Singhal [1991] su ispravili algoritam Choudhari etala. (koja ne
uspeva da otkrije sve blokade i može prijaviti lažne blokade) i obezbediti dokaz ispravnosti
ispravljenog algoritma. U sledećem članku,
Kshemkaliani i Singhal [1994] tvrde da distribuirani blokovi nisu dobro razumljivi jer ne postoji
globalno stanje ili vreme u distribuiranom sistemu. Zapravo, svaki ciklus koji je sakupljen može
sadržati delove snimljene u različito vreme. Pored toga, sajtovi mogu čuti zbog zastoja, ali ne
čuju da su rešeni sve do slučajnih kašnjenja. Rad opisuje raspoređene blokade u smislu sadržaja
distribuirane memorije, koristeći kauzalne veze između događaja na različitim lokacijama.
Iako serveri datoteka i serveri baze podataka održavaju podatke u stalnom skladištenju, drugim
vrstama servera povratnih objekata ne treba to učiniti, osim u svrhu oporavka. U ovom poglavlju
pretpostavljamo da kada se pokreće server drži sve svoje objekte u svojoj nestabilnoj memoriji i
evidentira svoje posvećene objekte u datoteku za oporavak ili pločice. Dakle, oporavak se sastoji
od vraćanja servera najnovijim izvršenim verzijama svojih objekata iz trajnog skladištenja. Baze
podataka moraju da se bave velikim količinama podataka. Oni obično drže objekte u stabilnom
skladištenju na disku sa kešom u nestabilnoj memoriji.
Dva zahteva za izdržljivost i atomsku neuspjehu nisu stvarno nezavisni jedna od druge i može se
rešiti samo jednim mehanizmom - menadžerom za oporavak. Zadatak menadžera za oporavak je:
Lista namera – bilo koji server koji obezbedjuje transakcije mora da čuva praćenje objekta
kojima se pristupa praćenje klijenata. Podsećanje na 12 poglavlje gde su klijenti otvarali
transakcije, server prvo pruža nove transakcije i vraća ih klijentu. Svaki sledeći zahtev klijenta
unutar transakcije uključuje počiniti ili prekinuti zahtev obuhvata identifikovanje transakcije kao
dokaz. U toku napredka transakcije ažurirane operacije su primenjene na privatni skup osetljivih
verzija objekata koji pripadaju transakciji.
Na svakom server , jedna lista namera je zabeležila sve trenutne aktivnosti transakcije - jedna
lista namera posebne transakcije sadrži listu napomena u vrednosti svih objekata koji su
preuredjeni transakcijom. Kada je transakcija posvećena ta transakcija lista namera je korišćena
da identifikuje objekte na koje je to uticalo. Posvećena verzija svakog objekta je ponovljena
probnom verzijom napravljena od te transakcije, i nova vrednost je napisana na datoteku za
oporavak server. Kada transakcija prekida, server koristi listu namera da obriše sve privremene
verzije objekta napravljene od transakcije.
Podsetite in a to da distribuciona transakcija mora da izvrši protocol atomskog izvršenja pre nego
što bude počinjen ili obustavljen. Naša diskusija oporavka je bazirana na dve faze izvršnog
protokola, gde svi učesnici u transakciji najpre kažu šta su spremni da izvrše i kasnije ako su svi
učesnici saglasni, svi oni sprovode stvarno izvršenje akcije. Ako se učesnici ne slože moraće se
prekinuti transakcija.
U trenutku kada učesnik kaže da je pripremljen da izvrši transakciju njegov menađer za oporavak
mora da je sačuvao svoju listu namera za tu transakciju, a predmeti u toj nameri popisuju u
svojoj datoteki za oporavak, tako da će moći izvršiti zadatak transakcije kasnije, čak i ako se u
medjuvremenu srušio.
Stavke u datoteku za oporavak se bave obnavljenjem servera koji može biti uključen u
distribuiranje transakcija, dodatne informacije pored vrednosti predmeta, su i prodavnica
oporavka. Ove informacije su briga statusa svake transakcije bilo da je izvršeno, odbačeno ili
pripremljeno za izvršenje. Dodatno, svaki objekt u obnavljanju je povezan sa posebnim
transakcijama čuvanjem liste namera u fajl za oporava. Brojka 13,18 pokazuje sumu tipova
ulaza uključeni u datoteku za oporavak
Vrednosti statusa koje se odnose na protokol dvostepenog učešće govori se u odelju 13.6.4 o
oporavku dve faze izvršnog protokola. Mi trebamo sada opisati dva pristupa korišćenja
obnovljivih fajlova: učitavanje i senčenje.
13.6.1 Učitavanje
U tehnici učitavanja datoteka, fajl za oporavak prikazuje istoriju svih transakcija koje izvršava
server.
U toku normalne operacije servera, njegov menađer za oporavak se poziva kad god se transakcija
priprema za prijem, izvršenje ili prekid transakcije. Kada se server sprema za izvršenje
transakcije, menađer za oporavak dodaje sve objekte u listi namera u datoteku za oporavak,
nakon čega sledi status curenja te transakcije zajedno sa njenom listom namera. Kada je
transakcija eventualno izvešena ili odbijena, menađer za oporavak dodaje odgovarajući status
transakcije u datoteku za oporavak. Pretpostavlja se da je operacija dodavanja atomska u smislu
da piše jedan ili više kompletnih unosa u datoteku za recenziju. Ako server ne uspe, samo
poslednji zapis može biti nepotpun. Da bi se efikasnije koristio disk, nekoliko narednih zapisa
može biti bufirirano i zapisano kao samostalno pisno na disku. Dodatna prednost učitavajuće
tehnike kao sekvencijalnog zapisa na disku je brži od zapisa slučajne lokacije. Posle pada, svaka
transakcije neće imati prihvaćen status u dnevniku. Kada je transakcija prihvaćena , njen
prihvaćen status mora biti forsiran na dnevniku koji je , pisan dnevnik zajedno sa svakim drugim
puferiraniom unosu.
Figura 13,19 ilustruje dnevnički mehanizan bankarskog servisa transakcija. T i U u figure 12,7.
Dnevnik je uglavnom reorganizovan, ulaz levo dvostruke linije predstavlja fotografiju vrednosti
A,B i C pre započete transakcije T i U. U dinajgamu , mi koristimo imena A,B i C kao
jedinstvenu identifikaciju za objekat. Mi pokazujemo situaciju gde trajsakcija T je izvršena i
transakcija U je pripremljena ali ne i izvršena. Kada se transakcija T pripremi za izvršenje ,
vrednost objekta A i B je zapisana kao pozicija P1 i P2 u dnevniku praćenom statusom
pripremljene transakcije T sa listom namera (<A ,P1>,<B,P2>). Kada transakcija T izvrši,
izvršena transakcija ulaznog statusa za T je stavljena u poziciji P4. Onda kada je transakcija U
Svaki status transakcije sadrži pokazivač na poziciju u datoteku oporavka prethodne unosa
statusa transakcije kako bi omogućio upravniku oporavka da prati stavke statusa transakcije u
obrnutom redosledu kroz datoteku oporavka. Zadnji pokazivač u nizu stavkog statusa transakcije
ukazuje na kontrolnu tacku.
Oporavak objekata - Kada se server zameni posle kvara, prvo postavlja početne vrednosti
početnih vrednosti za svoje objekte, a zatim predaje upravljaču za oporavak. Menadžer za
oporavak je odgovoran za vraćanje objekata servera tako da uključuju sve efekte svih izvršenih
transakcija izvršenih u ispravnom redosledu i nijedan od efekata nepotpunih ili prekinutih
transakcija.
Ako server ne uspe na mestu na slici 13.19, njegov menadžer za oporavak će oporaviti objekte na
sledeći način. Počinje na poslednjoj transakciji statusa o prijavljivanju (na P7) i zaključuje da se
transakcija U nije izvršila i da se njegovi efekti ignorišu. Zatim se pomera na prethodni unos
statusa transakcije u prijavu (na P4) i zaključuje da je transakcija T počinila. Da biste povratili
predmete na koje se odnosi transakcija T, pomera se na prethodni unos statusa prijave (na P3) i
pronađe listu namera za T (<A, P1>, <B, P2>). Zatim vraća objekte A i B iz vrednosti u P1 i P
2;. Kako još nije obnovio C, ona se vraća na P0, koja je kontrolna tacka i vraća C.
Kontrolisanje može se izvršiti odmah nakon oporavka, ali pre početka novih luka. Međutim,
oporavak se možda ne javlja vrlo često. Prema tome, možda će biti potrebno kontrolno tackiranje
s vremena na vreme tokom normalnog rada servera. Kontrolna tačka je upisana u buduću
datoteku za oporavak, a trenutna datoteka za oporavak ostaje u upotrebi sve dok kontrola nije
završena. Kontrolna tačka se sastoji od "dodavanja oznake" u datoteku za oporavak kada
započne kontrolna tacka, pisanje predmeta poslužitelja u buduću datoteku za oporavak, a zatim
kopiranje (1) unosa pre marke koje se odnose na još nerešene transakcije i (2) sve unose nakon
oznaku u datoteku za oporavak u buduću datoteku za oporavak. Kada je kontrolna tačka
popunjena, buduća datoteka za oporavak postaje datoteka za oporavak.
Sistem oporavka može smanjiti upotrebu prostora tako što će odbaciti staru datoteku za
oporavak. Kada menadžer za oporavak izvršava proces oporavka, može se susretati sa
kontrolnim tackama u datoteci oporavka. Kada se ovo desi, može odmah vratiti sve izvanredne
objekte sa kontrolnih tacaka.
Tehnika evidencije evidentira zapise statusa transakcije, liste namera i objekte sve u istoj datoteci
- dnevnik. Tehnika senke verzija je alternativni način organizovanja datoteke za oporavak.
Koristi mapu da locira verzije objekata servera u pločici nazvanu skladište verzija. Mapa
povezuje identifikatore objekata servera sa pozicijama svojih trenutnih verzija u prodavnici
verzije. Verzije koje su napisale svake transakcije su senke prethodnih izdvojenih verzija. Liste
statusa transakcija i liste namera se obrađuju odvojeno. Prvo su opisane senke verzije.
Kada je transakcija spremna za izvršenje, bilo koji od objekata koji su promenjeni za transakciju
dodaju se u skladište verzije, ostavljajući odgovarajuće izvršene verzije nepromenjene. Ove nove
verzije koje se još uvek očekivaju nazivaju se “senke” verzije. Kada se transakcija izvrši, nova
mapa se pravi kopiranjem stare mape i unosom pozicija senke verzije. Da biste dovršili proces
učitavanja, nova mapa zamenjuje staru mapu.
Za vraćanje objekata kada se server zameni nakon pada, njegov menadžer za oporavak čita mapu
i koristi informacije na mapi da locira objekte u prodavnici verzije.
Ova tehnika je ilustrovana sa istim primerom koji uključuje transakcije T i U na slici 13.20. Prva
kolona u tabeli pokazuje mapu pre transakcija T i U, kada su računi A, B i C 100, 200 i 300
USD. Druga kolona prikazuje mapu nakon izvršenja transakcije T.
Mapa uvek mora biti upisana na dobro poznato mesto (na primjer, na početku spremišta verzije
ili odvojene datoteke), tako da se može pronaći kada sistem treba da se oporavi.
Prebacivanje sa stare mape na novu mapu mora se izvršiti u jednom atomskom koraku. Da bi se
ovo postiglo, neophodno je da se za mapu koristi stabilno skladištenje, tako da se garantuje
validna mapa čak i kada operacija pisanja datoteka ne uspe. Metoda senke verzija obezbeđuje
brži oporavak od evidencije jer su položaji aktuelnih počinjenih objekata zabeleženi na mapi, a
oporavak iz evidencije zahteva pretraživanje čitavog dnevnika za objekte. Prijavljivanje bi
trebalo biti brže od senskih verzija tokom normalne aktivnosti sistema. To je zato što
prijavljivanje zahteva samo niz operacija dodavanja iste datoteke, dok senke verzije zahtijevaju
dodatno stabilno pisanje (uključujući dva nepovezana blokada diska).
Sama verzija samih nije dovoljna za server koji obrađuje distribuirane transakcije. Unosi statusa
transakcija i liste namera se čuvaju u datoteki koja se zove datoteka statusa transakcije. Svaka
lista namera predstavlja deo karte koji će se promeniti transakcijom kada se izvrši. Datoteka
statusa transakcije može, na primer, biti organizovana kao prijavljivanje.
Donja slika prikazuje mapu i datoteku statusa transakcije za naš trenutni primer kada je T izvršio
i U je spreman da izvrši.
Postoji šansa da se server može srušiti između trenutka kada je registrovan status upisan u
datoteku statusa transakcije i vrijeme ažuriranja mape - u tom slučaju klijent neće biti potvrđen.
Menadžer za oporavak mora dozvoliti ovu mogućnost kada se server zameni nakon pada, na
primer proverom da li su na mapi uključeni efekti poslednje izvršene transakcije u datoteku
statusa transakcije. Ukoliko to nije slučaj, onda se ta druga označava kao prekinuta.
13.6.3 Potreba za statusom transakcija i namerama unosi se u pločicu za oporavak
Moguće je kreirati jednostavnu datoteku za oporavak koja ne uključuje unose za stavke statusa
transakcije i liste namera. Ova vrsta datoteke za oporavak može biti pogodna kada su sve
transakcije usmerene na jedan server. Upotreba stavkog statusa transakcija i namera lista u
datoteci oporavka je od suštinskog značaja za server koji namerava da učestvuje u distribuiranim
transakcijama. Ovaj pristup može biti korisan i za servere ne-distribuiranih transakcija iz
različitih razloga, uključujući sledeće:
* Ako transakcije koriste veliki broj velikih objekata, njihova potreba za njihovim
unosom u datoteku za oporavak može komplikovati dizajn servera. Kada se objekti referišu iz
liste namera, oni se mogu naći gde god da se nalaze.
* U vremenskoj kontroli koja vrši kontrolu konkurentnosti, server ponekad zna da će
transakcija na kraju moći da izvrši i potvrđuje klijenta - u ovom trenutku objekti su upisani u
datoteku za oporavak (pogledajte Poglavlje 12) kako bi osigurali njihovu trajnost. Međutim,
transakcija možda mora da čeka da se izvrši dok se ranije transakcije ne izvrše. U takvim
situacijama odgovarajuće stavke statusa transakcija u datoteki oporavka će čekati da se izvrše, a
zatim se obavezuju da osiguraju naredbu za određivanje vremenskih oznaka izvršenih transakcija
u datoteki oporavka, 'datoteka'. Nakon oporavka, bilo koja transakcija čekanja na izvršenje može
se dozvoliti da se izvrši, jer
oni koji su čekali ili su upravo počinili ili ako ne moraju biti prekinuti zbog neuspeha servera.
U fazi 1 protokola, kada je koordinator spreman da izvrši (i već je dodao pripremljen statusni
unos u datoteku za oporavak), njegov menadžer za oporavak dodaje koordinatni unos u datoteku
za oporavak. Pre nego što učesnik može glasati sa “Da”, mora se već pripremiti za izvršenje
(i mora već dodati pripremljen statusni zapis u datoteku za oporavak). Kada glasuje Da, njegov
menadžer za oporavak beleži unos učesnika i dodaje neizvesni status transakcije u datoteku za
oporavak kao prisilno pisanje. Kada učesnik glasuje Ne, dodaje status prestanak transakcije u
datoteku za oporavak.
U fazi 2 protokola, menadžer za oporavak koordinatora dodaje ili zavedeni ili prekinuti status
transakcije u datoteku za oporavak, prema odluci. Ovo mora biti prisilno pisanje. Menadžeri za
oporavak učesnika dodaju status preuzimanja ili prekidanja statusa transakcije u datoteke za
oporavak prema poruci dobijenoj od koordinatora. Kada koordinator dobije potvrdu od svih
svojih učesnika, njegov menadžer za oporavak dodaje završen status transakcije u datoteku za
oporavak - to ne mora biti prisiljeno. Upisani statusni status nije deo protokola, ali se koristi kada
se datoteka za oporavak reorganizuje. Slika 13.21 prikazuje unose u dnevnik za transakciju T, u
kojoj je server igrao ulogu koordinatora i za transakciju U, u kojoj je server igrao
uloga učesnika. Za obe transakcije, prvo je uneto stanje transakcije. U slučaju koordinatora sledi
zapis koordinatora i posvećenost statusa transakcije. Urađeni unos statusa transakcije nije
prikazan na slici 13.21. U slučaju učesnika, pripremljeni unos statusa posla prati unos učesnika
čije je stanje neizvesno, a zatim posvećen ili ukinut unos statusa transakcije.
Kada se server zameni posle srušenja, menadžer za oporavak mora da se bavi i dvofaznim
protokolom za uštedu, pored obnavljanja objekata. Za svaku transakciju gde je server igrao ulogu
koordinatora, trebalo bi da pronađe unos koordinatora i skup stavki statusa transakcije. Za bilo
koju transakciju gde je server igrao ulogu učesnika, trebalo bi da pronađe unos učesnika i skup
stavki statusa transakcije. U oba slučaja, najnovija postavka statusa transakcije - to jest ona koja
je najbliža kraju dnevnika određuje status transakcije u trenutku neuspeha. Akcija menadžera za
oporavak u odnosu na protokol dvofazne obaveze za bilo koju transakciju zavisi od toga da li je
server koordinator ili učesnik i njegov status u trenutku neuspjeha, kao što je prikazano na slici
13.22.
Datoteka za reorganizaciju ili oporavak - Morase preduzeti kada vršite kontrolnu tacku kako
biste osigurali da unosi koordinatora bez izvršenog statusa ne budu uklonjeni iz datoteke za
oporavak. Ove unose moraju biti zadržane sve dok svi učesnici ne potvrdjuju da su završili svoje
transakcije. Unosi sa statusom mogu biti odbačeni. Ulazi učesnika sa statusom transakcije
neizvesni moraju takođe biti zadržani.
Kada prva pod transakcija u nizu upletenih transakcija pristupi objektu, dobija se obična verzija
koja je kopija trenutne posvećene verzije objekta. Ovo se smatra da je na vrhu stack-a, ali
ukoliko se nekom drugom subtran saetiju pristupi istom objektu, stack se neće materijalizovati.
Kada jedna od njegovih podtranska akcija pristupi istom objektu, ona kopira verziju na vrhu
stack-a i gura u stack. Sve te ispravke podtransakcije primenjuju se na probnu verziju na vrhu
stack-a. Kada se podtransakcija privremeno obavezuje, njena roditeljka nasledi novu verziju. Da
bi se to postiglo, i verzija podtransakcije i verzija njegovog roditelja se odbacuju iz stekla, a
potom nova verzija podtransakcije se vraća u stack (efikasno zamenjuje verziju roditelja). Kada
prekinu transakciju, njegova verzija na vrhu stuba se odbacuje. Na kraju, kada se izvrši
transakcija na najvišem nivou, verzija na vrhu stakla (ako postoji) postaje nova posvećena
verzija.
Na primer, na slici 13.23 pretpostavimo da transakcije T1. T11, T12 i T2 svi pristupaju istom
objektu. A, u redosledu T1; T11; T12 i T2- Pretpostavimo da se njihove probne verzije nazivaju
A1, A11, A12 i A2. Kada T1 počne da se izvršava, A1 se zasniva na posvećenoj verziji A i gurne
se u stack. Kada T11 započne sa radom, bazira svoju verziju A11 na A1 i potiskuje ga na stack,
kada završi, zamenjuje roditeljske
13.7 Rezime
U opštem slučaju, transakcija klijenta će zahtevati rad na objektima na nekoliko različitih
servera. Distribuirana transakcija je svaka transakcija čija aktivnost uključuje nekoliko različitih
servera. Ugrađena struktura transakcija može se koristiti da bi se omogućila dodatna
konkurentnost i nezavisno izvršavanje od strane servera u distribuiranoj transakciji.
Osobina atomičnosti transakcija zahteva da serveri koji učestvuju u distribuiranoj transakciji ili
ih sve učine ili ih sve prekinu. Protokoli atomskog urezivanja su dizajnirani da postignu ovaj
efekat, čak i ako serveri padnu tokom njihovog izvršenja. Dvofazni protokol za obavezivanje
dozvoljava serveru da odluči da se jednostrano prekine. To uključuje i vremenske akcije kako bi
se izbeglo kašnjenja zbog palog servera. Dvofazni protokol za obavezivanje može uzeti
neograničeno vreme za završetak, ali je garantovano da će se na kraju završiti.
Vežbe
13.1 U decentralizovanoj varijanti dvofaznog protokola za učešće učesnika komuniciraju
direktno jedni s drugima umesto indirektno putem koordinatora. U fazi 1, koordinator šalje svoj
glas svim učesnicima. U fazi 2, ako glasanje koordinatora nije, učesnici su samo prekinuli
transakciju; ako jeste, svaki učesnik šalje svoj glas koordinatoru i ostalim učesnicima, a svaki od
njih odlučuje o ishodu prema glasanju i izvrsi ga. Izračunajte broj poruka i broj potrebnih
krugova. Koje su njegove prednosti ili mane u poređenju sa centralizovanom varijantom?
Faza 3; koordinator prikuplja priznanja. Kada su svi primljeni, obavezuje i šalje doCommit
učesnicima. Učesnici čekaju zahtev za doCommit. Kada stigne, počinju.
Objasnite kako ovaj protokol izbegava odlaganje učesnika u svom "neizvesnom" periodu zbog
neuspeha koordinatora ili drugih učesnika. Pretpostavimo da komunikacija nije uspela.
13.3 Objasnite kako dvofazni protokol za izvršenje upletenih transakcija osigurava da ako se
transakcija na najvišem nivou izvrši, svi desni potomci su počinjeni ili obustavljeni.
13.4 Navedite primer preklapanja dve transakcije koje su serijski ekvivalentne svaki server, ali
nije serijski ekvivalentan na globalnom nivou.
13.5 Procedura odluke o getDecision definisana na slici 13.4 obezbeđuju samo koordinatori.
Definišite novu verziju getDecision koju će učesnici obezbediti za korišćenje od strane drugih
učesnika koji treba da dobiju odluku kada koordinator nije dostupan.
Pretpostavimo da bilo koji aktivni učesnik može da napravi zahtev za dobivanje na bilo koji
drugi aktivni učesnik. Da li to rešava problem kašnjenja tokom "neizvesnog" perioda? Objasnite
svoj odgovor. Na koji tačku u protokolu dvofazne obaveze koordinator će obavijestiti učesnike o
identitetima drugih učesnika (kako bi se omogućila ova komunikacija)?
13.8. Server koristi vremenske narudzbine za lokalnu kontrolu konkurencije. Koje promene
moraju biti napravljene kako bi se prilagodili za korištenje sa distribuiranim transakcijama? Pod
kojim uslovima bi se moglo tvrditi da je dvofazni protokol za obavezivanje redundantan sa
naručivanjem vremenskih oznaka?
13.9 Razmotrite distribuiranu optimističku kontrolu konkurentnosti u kojoj svaki server izvršava
lokalnu naknadnu validaciju sekvencijalno (to jest, sa samo jednom transakcijom u fazi
validacije i ažuriranja u jednom trenutku), u odnosu na vaš odgovor na sliku 13.6. Opišite
moguće ishode kada se dve transakcije pokušaju izvršiti. Kakva je razlika ako serveri koriste
paralelnu validaciju?
13.11 Razmotrimo algoritam za obradu ivica (bez prioriteta). Navedi primere kako bi pokazao da
može otkriti fantomske blokade.
13.12 Server upravlja objektima a1, a2 ... an. Obezbeđuje dve operacije za svoje klijente:
T:x=Read(i); Write(j,44);
U:Write(i, 55); Write(j,66);
V:Write(k,77), Write(k,88);
Opišite informacije napisane u evidenciju u ime ove tri transakcije ako se koristi striktno
dvofazno zaključavanje i U stiče ai i aj prije T. Opišite kako će upravitelj za oporavak koristiti
ove informacije da biste povratili efekte T, U i V kada se server zameni nakon pada. Koji je
značaj redosleda unosa komande u log fajlu?
13.13 Dodavanje unosa u datoteku prijavljivanja je atomsko, ali dodati operacije iz različitih
transakcija može se prepletati. Kako to utiče na odgovor na Vežbu 13.12?
13.14 Transakcije T, U i V vežbe 13.12 koriste striktno dvofazno zaključavanje i njihovi zahtevi
se prepliću na sledeći način:
Pod pretpostavkom da upravitelj za oporavak prilagodi unos podataka koji odgovara svakoj
operaciji upisivanja u datoteku prijavljivanja, umesto da čeka do kraja transakcije, opisati
informacije koje su zapisane u datoteku evidencije u ime transakcija T, U i V. Da li je rano
pisanje utiče na tačnost postupka oporavka? Koje su prednosti i mane ranog pisanja?
13.17 Pretpostavimo da se koordinator transakcije sruši nakon što je zabeležio unos liste namera,
ali pre nego što je zabeležio listu učesnika ili poslali canCommit? zahteva. Opišite kako učesnici
rešavaju situaciju. Šta će koordinator uraditi kada se oporavi? Da li bi bilo bolje bilo da snimite
listu učesnika pre unosa liste namera?