Mre ¾no raunarstvo

  • View
    39

  • Download
    1

Embed Size (px)

DESCRIPTION

Mre žno računarstvo. 18. glava: Remote Method Invocation (RMI). Mreže imaju 2 fundamentalne primene: Prva primena je premeštanje fajlova i podataka između hostova i tiče se FTP, SMTP, HTTP, NFS, IMAP, POP i mnogih drugih protokola - PowerPoint PPT Presentation

Text of Mre ¾no raunarstvo

Mreno raunarstvo

Mreno raunarstvo18. glava: Remote Method Invocation (RMI) Mree imaju 2 fundamentalne primene:Prva primena je premetanje fajlova i podataka izmeu hostova i tie se FTP, SMTP, HTTP, NFS, IMAP, POP i mnogih drugih protokolaDruga primena je omoguavanje jednom hostu da izvrava programe na drugom hostu. Tradicionalno, to rade Telnet, rlogin, RemoteProcedureCall (RPC) i mnogo database middleware-a.RMI (Remote Method Invocation) je primer druge primene mrea: izvravanje programa na hostu udaljenom od lokalne maineRMIDelovi jednog programa izvravaju se na lokalnom raunaru, dok se drugi delovi istog programa izvravaju na udaljenom hostu.RMI stvara iluziju da se ovaj distribuirani program izvrava na jednom sistemu sa jednim memorijskim prostorom koji sadri sav kod i podatke koriene na bilo kojoj od strana stvarne fizike konekcijeta je Remote Method Invocation?RMI doputa da Java objekti na razliitim hostovima meusobno komuniciraju na nain slian onome na koji komuniciraju objekti koji se izvravaju na istoj VM: pozivanjem metoda objekataUdaljeni objekat (remote object) ivi na serveru. Svaki udaljeni objekat implementira udaljeni interfejs (remote interface) koji odreuje koji od njegovih metoda moe biti pozvan od strane klijenata.Klijenti pozivaju metode udaljenog objekta skoro isto kao to pozivaju lokalne metode.PrimerObjekat koji se izvrava na lokalnom klijentu moe proslediti upit bazi kao String argument metoda objekta baze koji se izvrava na udaljenom serveru da ga zamoli da sumira niz slogova.Server moe vratiti rezultat klijentu kao double.Ovo je efikasnije nego download-ovati sve slogove i sumirati ih lokalno.Primer 2: Java-kompatibilni web serveri mogu implementirati udaljene metode (remote methods) koji doputaju klijentima da trae kompletan indeks javno dostupnih fajlova na sajtu. Ovo moe dramatino smanjiti vreme koje server provodi popunjavajui zahteve web spider-a kao to je Google.Sa programerske take gledita, udaljeni objekti i metodi funkcioniu u velikoj meri kao lokalni objekti i metodi na koje smo navikli. Svi detalji implementacije su sakriveni.Samo importujemo jedan paket, potraimo udaljeni objekat u registry-ju (to je 1 linija koda), i obezbedimo da se hvata RemoteException kada pozivamo metode objekta. Od te take nadalje moemo koristiti udaljeni objekat skoro slobodno i jednostavno kao to koristimo objekat koji se izvrava na naem sopstvenom sistemu.Apstrakcija nije savrena. Remote method invocation je mnogo sporiji i manje pouzdan negoli regularan local method invocation. Stvari mogu poi, i polaze naopako sa remote method invocation koje ne utiu na local method invocation. (RemoteExceptions). Meutim, RMI pokuava da sakrije razliku izmeu local i remote method invocation to je mogue vie. Udaljeni objekatFormalnije, udaljeni objekat je objekat sa metodima koji mogu biti pozvani sa druge VM u odnosu na onu na kojoj sam objekat ivi, uopteno, sa VM koja se izvrava na drugom raunaru.Svaki udaljeni objekat implementira 1 ili vie udaljenih interfejsa koji deklariu koji metodi udaljenog objekta mogu biti pozvani od strane drugog sistemaPrimerPretpostavimo da je weather.centralpark.org PC konektovan na Internet u Central Park weather station, koji prati temperaturu, vlanost vazduha, vazduni pritisak, brzinu i smer vetra i sline informacije kroz konekcije sa raznim instrumentima, i treba da uini ove podatke dostupnim udaljenim raunarimaJava program koji se izvrava na tom PC-ju moe ponuditi interfejs koji obezbeuje tekue vrednosti podataka o vremenu:Weather.java (udaljeni interfejs)import java.rmi.*;import java.util.Date;

public interface Weather extends Remote{ public double getTemperature() throws RemoteException; public double getHumidity() throws RemoteException; public double getPressure() throws RemoteException; }

Uobiajeno, ovaj interfejs je ogranien na druge programe koji se izvravaju na istom PC-ju, zapravo u istoj VM.Meutim, remote method invocations doputaju da druge VM, koje se izvravaju na drugim raunarima, u drugim krajevima sveta, pozivaju ove metode kako bi dobile podatke o vremenu.Npr. Java program koji se izvrava na stallion.elharo.com moe potraiti tekui Weather objekat u RMI registry na weather.centralpark.orgRegistry e mu poslati referencu na objekat koji se izvrava na VM na weather.centralpark.orgProgram na stallion.elharo.com moe potom koristiti ovu referencu kako bi pozvao metod getTemperature(). Ovaj metod e se izvriti na serveru u Central Park-u, ne na lokalnoj maini.Meutim, vratie double vrednost lokalnom programu (koji se izvrava u Bruklinu).Ovo je jednostavnije nego dizajnirati i implementirati novi soket-zasnovan protokol za komunikaciju izmeu meteoroloke stanice i njenih klijenata. Detalji uspostavljanja konekcija izmeu hostova i transfera podataka su skriveni u RMI klasama.Za sada, zamislili smo javni, svima dostupan, servis.Meutim, postoje neki metodi za koje ne elimo da svako moe da ih pozivaVeina RMI aplikacija ima strogo ogranien skup doputenih korisnika.Sam RMI ne obezbeuje nikakva sredstva ograniavanja kome je doputen pristup RMI serverima.Ove mogunosti mogu se dodati RMI programima pomou Java Authentication and Authorization Service (JAAS). Serijalizacija objekataKada se objekat prosledi Java metodu ili ga metod vrati, ono to je zaista preneseno je referenca na objekat. Referenca je dvostruki indirektni pokaziva na lokaciju objekta u memoriji.Prosleivanje objekata izmeu dve maine zbog toga stvara neke probleme. Udaljena maina ne moe itati ta je u memoriji lokalne maine. Referenca koja je validna na jednoj maini, besmislena je na drugoj.***Postoje dva naina za reavanje ovog problema.Prvi je da se objekat konvertuje u niz bajtova i ti bajtovi poalju udaljenoj maini. Udaljena maina prima bajtove i rekonstruie ih u kopiju objekta. Meutim, promene na kopiji se ne odraavaju automatski na originalni objekat.Drugi nain je proslediti specijalnu udaljenu referencu na objekat. Kada udaljena maina pozove metod za ovu referencu, poziv putuje natrag kroz Internet do lokalne maine koja je originalno kreirala objekat. Promene uinjene na bilo kojoj maini odraavaju se na oba kraja konekcije jer oni dele isti objekat.***Konvertovanje objekata u sekvencu bajtova je tee nego to se to ini na prvi pogled, jer polja objekta mogu biti reference na druge objekte; objekte na koje ova polja ukazuju takoe treba iskopirati kada se kopira taj objekat. A ovi objekti mogu pokazivati na neke druge objekte, koje takoe treba kopirati.Serijalizacija objekata je ema kojom se objekti mogu konvertovati u bajtove i proslediti drugoj maini koja izgrauje originalni objekat iz bajtova. Ovi bajtovi se takoe mogu upisati na disk i kasnije proitati otuda, doputajui nam da sauvamo stanje itavog programa u jednom jedinom objektu***Iz bezbednosnih razloga, Java ima neka ogranienja na to koji objekti mogu biti serijalizovani.Svi primitivni tipovi mogu biti serijalizovani.Neudaljeni Java objekti mogu biti serijalizovani samo ako implementiraju java.io.Serializable interfejsKlase String i Component implementiraju gaKontejnerske klase poput Vector su serijabilne (serializable) ako su takvi i svi objekti koje sadre.Dalje, potklasa serijabilne klase je i sama serijabilna. Npr. java.lang.Integer i java.lang.Float su serijabilne jer je klasa iz koje su izvedene, java.lang.Number, takva. ***Izuzeci, greke i drugi throwable objekti su uvek serijabilni.Veina AWT i Swing komponenata, kontejnera i dogaaja je serijabilnoMeutim, adapteri dogaaja, filteri slika i peer klase nisuTokovi, itai i pisai i veina drugih I/O klasa nijeWrapper klase tipova su serijabilne osim za VoidKlase u paketu java.math su serijabilneKlase u java.lang.reflect nisu.Klasa URL jesteMeutim, Socket, URLConnection i veina drugih klasa u java.net nijeCORBARMI nije jedina mogunost kada se radi o distribuiranim objektnim sistemima. Njegovo najvee ogranienje je to se mogu pozivati samo metodi napisani u Javi.ta ako ve imamo aplikaciju napisanu u nekom drugom jeziku, npr. C++, i elimo da komuniciramo sa njom?Najuoptenije reenje za distribuirane objekte je CORBA, the Common Object Request Broker Architecture.Corba doputa da objekti napisani u razliitim jezicima meusobno komunicirajuRMI kako funkcionieJava krije mnoge stvari od nas. Meutim, ne kodi nikada da se razume kako stvari zaista funkcioniuKljuna razlika izmeu udaljenih i lokalnih objekata je to su udaljeni objekti u drugoj VM.Uobiajeno, objekti argumenti se prosleuju metodima i objekti povratne vrednosti bivaju vraeni od metoda da referiu na neto u odreenoj VM. To se zove prosleivanje reference.Meutim, ovakav pristup ne funkcionie kada pozivajui i pozvani metod nisu u istoj VM. Razliite VM mogu implementirati reference na potpuno razliite i nekompatibilne naineKoriste se 3 razliita mehanizma za prosleivanje argumenata i vraanje rezultata udaljenih metoda u zavisnosti od tipa prosleenih podataka.Primitivni tipovi (int, boolean, double, ...) se prosleuju po vrednosti, kao i u pozivu lokalnih Java metodaReference na udaljene objekte (tj. objekti koji implementiraju Remote interfejs) se prosleuju kao udaljene reference koje omoguavaju da primalac pozove metode udaljenih objekata. Slino kao to se reference na lokalne objekte prosleuju lokalnim Java metodimaObjekti koji ne mogu biti serijalizovani ne mogu biti prosleeni udaljenim metodima.Udaljeni objekti se izvravaju na serveru, ali mogu biti pozvani objektima koji se izvravaju na klijentuNeudaljeni, serijabilni objekti izvravaju se na klijentskom sistemu.***Da bi se proces uinio to je mogue vie transparentnim za programera, komunikacija izmeu klijenta i servera je implementirana nizom slojeva:Server Program ------------------- Client ProgramSkeleton StubRemote Reference Layer Remote ReferenceL.Transpor Layer ------------------- Transport LayerProgrameru izgleda kao da se klijent direktno obraa serveru. Zapravo, klijent komunicira samo sa Stub objektom koji je zamena za stvarni