12.08.2013 Views

konspekt - Tartu Ülikool

konspekt - Tartu Ülikool

konspekt - Tartu Ülikool

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Peatükk 6<br />

Kaugprotseduurid<br />

Kuigi klient-server-mudel annab meile mugava vahendi hajussüsteemi struktueerimiseks,<br />

on tal üks oluline probleem: protsessidevaheline suhtlemine sõltub sisend/väljund<br />

(edaspidi S/V) primitiividest. Kuna meie eesmärk on kujundada hajussüsteem<br />

võimalikult lähedaseks tsentraliseeritud süsteemile ja S/V ei ole tsentraliseeritud<br />

süsteemides just kõige olulisem osa, siis hajussüsteemi ehitamine S/V<br />

ümber ei ole ilmselt kõige õigem tee.<br />

Sellel probleemil polnud pikka aega lahendust, kuni Birell ja Nelson pakkusid<br />

1984 aastal välja lihtsa idee. Nende soovitus oli lubada programmidel kasutada<br />

teistes arvutites asuvaid protseduure. Kui protsess masinas kutsub protseduuri<br />

masinast , siis protsess masinas peatatakse ja täidetakse protseduuri masinas<br />

. Informatsiooni masinate vahel saab vahetada protseduuri parameetrite ja tagastatava<br />

väärtusega. Programmeerija ei oma otsest juurdepääsu teadete edastamise<br />

või S/V mehhanismidele. Seda meetodit tuntakse kaugprotseduuride meetodina<br />

(remote procedure call), edaspidi RPC.<br />

Kuigi see idee on lihtne ja elegantne, kaasneb ikkagi terve rida probleeme.<br />

Esiteks, protseduurid (väljakutsuja ja väljakutsutav) asuvad potensiaalselt eri masinates<br />

ja neid täidetakse eri aadressruumides. Parameetrid ja tagastatavad väärtused<br />

tuleb edastada eri masinate vahel, mis võib olla komplitseeritud, eriti, kui<br />

meil on tegu erinevate arhitektuuridega. Lisaks võib üks masinatest seiskuda, mis<br />

toob omakorda kaasa erinevaid probleeme.<br />

6.1 RPC omadused<br />

Esitame siinkohal RPC semantika põhilised aspektid.<br />

¯ Kaugprotseduuride definitsioonis sisalduvad sisend ja väljundparameetrid.<br />

Sisendparameetritega edastatakse protseduuri argumentide väärtuseid. Väljundparameetritega<br />

edastatakse serverist andmed protseduuri väljakutsuja<br />

45<br />

keskkonda.<br />

¯ Iga RPC süsteem sisaldab liidese defineerimise keelt. Lokaalsete protseduuride<br />

väärtusi edastavatele parameetritele vasted kaugprotseduurides on<br />

sisendparameetrid. Väärtuste viidete korral aga tuleb kaasata andmete struktuuri<br />

kohta lisainformatsiooni, mis koostatakse liidese defineerimise keele<br />

abil.<br />

¯ Kaugprotseduuri keskkond on protseduuri kasutaja keskkonnast erinev. Serveris<br />

töötav kaugprotseduur ei oma juurdepääsu kliendi keskkonna muutujatele.<br />

¯ Kaugprotseduuriga ei oma mõtet viida edastamine. Kuna kaugprotseduuri<br />

keskkond on protseduuri kasutaja keskkonnast erinev, siis viitade kasutamine<br />

sisend/väljundparameetrite andmestruktuurides ei oma mõtet.<br />

6.2 Disaini probleemid<br />

6.2.1 RPC süsteemide klassid<br />

RPC süsteemid jagunevad kahte klassi:<br />

¯ RPC on integreeritud programmeerimiskeelde.<br />

¯ Serveri-kliendi vaheliste liideste kirjeldamiseks kasutatakse spetsiaalset keelt.<br />

6.2.2 Liidese defineerimise keel<br />

RPC liidese definitsioon määrab klientidele nähtavate serveri protseduuride karakteristikud.<br />

Määratakse protseduuride nimed ja parameetrite tüübid. Ka peab<br />

olema iga parameetri jaoks näidatud, kas tegu on sisend-, väljund- või mõlemat<br />

tüüpi parameetriga. Liides määrab ka teenuse nime, mida kasutavad kliendid ja<br />

serverid viitamaks teenusele, mis koosneb protseduuride hulgast, mis osutavad<br />

antud teenust.<br />

6.2.3 Vigade käsitlemine<br />

RPC kasutamine võib ebaõnnestuda, kui ei õnnestu kontakteeruda serveriga, tavaliselt<br />

siis, kui server on maas või liiga hõivatud. Seega peab RPC olema võimeline<br />

teatama võimalikest vigadest, mis võivad tekkida suhtlemisel või protseduuri täitmisel.<br />

46

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!