Programiranje

Naredite prostor za JavaSpaces, 1. del

Ta članek začne drugo nit Jiniologija serije. Junija je začel Bill Venners Jiniologija s pregledom tehnologije Jini - močne nove infrastrukture za izgradnjo in uvajanje porazdeljenih sistemov, ki so organizirani kot zveze storitev. Ta nit, ki bo v tem stolpcu predstavljena vsak drugi mesec, se osredotoča na JavaSpaces, osnovna storitev Jini podjetja Sun Microsystems, ki zagotavlja visoko raven sredstev za ustvarjanje skupnih in distribuiranih aplikacij. Če gradite aplikacije z Jini, boste želeli vedeti, kako uporabljati JavaSpaces za koordinacijo udeležencev v federaciji Jini. Pomembno pa je tudi vedeti, da lahko JavaSpaces uporabljate ločeno od Jinija kot orodje za gradnjo splošno porazdeljenih sistemov v Javi. V obeh primerih je vredno pogledati JavaSpaces, saj lahko bistveno olajša načrtovanje in kodiranje porazdeljenih aplikacij.

Naredite prostor za JavaSpaces: preberite celotno serijo!

  • Del 1. Olajšajte razvoj porazdeljenih aplikacij z JavaSpaces
  • Del 2. Zgradite računalniški strežnik z JavaSpaces
  • Del 3. Uskladite svoje Jini aplikacije z JavaSpaces
  • Del 4. Raziščite Jini-jeve transakcije z JavaSpaces
  • Del 5. Naredite svoj računalniški strežnik zanesljiv in prilagodljiv

V tej seriji vam bomo predstavili edinstveni programski model JavaSpaces, ki se precej razlikuje od drugih omrežnih in distribuiranih orodij, s katerimi ste morda seznanjeni. V naslednjih člankih bomo zajeli podrobnosti API-ja JavaSpaces in kako ga lahko uporabite za lepljenje procesov v porazdeljeno aplikacijo ter opisujemo, kako JavaSpaces sodeluje z drugimi komponentami Jini-ja. Skozi celotno serijo boste videli, da je JavaSpaces preprost (API je sestavljen iz le nekaj operacij), ekspresiven (z JavaSpaces je mogoče rešiti veliko težav) in zmogljiv (z majhnimi količinami lahko zgradite dovršene distribuirane sisteme kode JavaSpaces).

Začnimo.

Nov model porazdeljenega računalništva

Izdelava porazdeljenih aplikacij z običajnimi omrežnimi orodji običajno vključuje prenos sporočil med procesi ali klicanje metod na oddaljenih predmetih. V aplikacijah JavaSpaces pa procesi ne komunicirajo neposredno, temveč usklajujejo svoje dejavnosti z izmenjavo predmetov prek a vesolje, ali skupni pomnilnik. Postopek lahko piši novi predmeti v prostor, vzemite predmeti iz prostora ali preberite (naredite kopijo) predmetov v prostoru; Slika 1 prikazuje več procesov (ki jih predstavlja Dukes) v interakciji s prostori s pomočjo teh operacij. Pri zajemanju ali branju predmetov procesi uporabljajo preprosto ujemanje na podlagi vrednosti polj, da bi našli predmete, ki so jim pomembni. Če ujemajočega se predmeta ni mogoče najti takoj, lahko postopek počaka, dokler ne pride. V JavaSpaces v nasprotju z običajnimi shrambami objektov procesi ne spreminjajo predmetov v prostoru ali neposredno prikličejo svojih metod - medtem ko so predmeti le pasivni podatki. Če želite spremeniti predmet, ga mora postopek izrecno odstraniti, posodobiti in znova vstaviti v prostor.

Spaces so shrambe predmetov z več pomembnimi lastnostmi, ki prispevajo k temu, da JavaSpaces postane močno, izrazno orodje. Oglejmo si podrobneje:

  • Prostori si delijo: Številni oddaljeni procesi lahko sočasno komunicirajo s prostorom - prostor sam obdeluje podrobnosti sočasnega dostopa, tako da se lahko osredotočite na oblikovanje protokolov na visoki ravni med svojimi procesi.

  • Prostori so trajni: Prostori zagotavljajo zanesljivo shranjevanje predmetov. Ko shranite predmet v prostor, bo ostal tam za nedoločen čas, dokler ga ne odstranite. Lahko tudi zahtevate a čas zakupa med katerim je treba shraniti predmet. Ko je predmet shranjen v prostoru, bo ostal tam, dokler ne poteče čas zakupa (ki ga je mogoče podaljšati) ali dokler ga postopek izrecno ne odstrani. O najemih bomo podrobneje razpravljali kasneje v tej seriji.

  • Prostori so asociativni: Predmeti v prostoru se nahajajo prek asocijativno iskanje, ne po lokaciji pomnilnika ali po identifikatorju. Asociativno iskanje omogoča preprosto iskanje predmetov, ki vas zanimajo, glede na njihovo vsebino, ne da bi morali vedeti, kako se imenuje predmet, kdo ga je ustvaril ali kje je shranjen. Če želite poiskati predmet, ustvarite predloga (objekt z nekaterimi ali vsemi polji, nastavljenimi na določene vrednosti, druga pa ostanejo kot nič da deluje kot nadomestni znak). Predmet v prostoru se ujema s predlogo, če se natančno ujema z navedenimi polji predloge. Videli boste, da lahko z asociativnim iskanjem enostavno izrazite poizvedbe za predmete, na primer "Ali je treba izračunati kakšno nalogo?" ali "Ali obstajajo odgovori na glavni faktor, ki sem ga zahteval?"

  • Prostori so transakcijsko varni: JavaSpaces uporablja storitev transakcije Jini, da zagotovi, da je operacija v prostoru atomska (ali je operacija uporabljena ali pa ni). Transakcije so podprte za posamezne operacije z enim presledkom, pa tudi za več operacij nad enim ali več presledki (bodisi so uporabljene vse operacije bodisi nobena). Kot boste videli kasneje v nadaljevanju, so transakcije pomemben način za obvladovanje delnih okvar.

  • Spaces vam omogočajo izmenjavo izvršljive vsebine: V prostoru so predmeti le pasivni podatki - ne morete jih spreminjati ali priklicati njihovih metod. Ko pa objekt preberete ali vzamete iz prostora, se ustvari lokalna kopija predmeta. Kot pri katerem koli drugem lokalnem objektu lahko tudi vi spremenite njegova javna polja in prikličete njegove metode, tudi če takega predmeta še niste videli. Ta zmožnost vam daje močan mehanizem za razširitev vedenja vaših aplikacij skozi vesolje.

Ko bo ta serija napredovala, vam bomo pokazali, kako imajo te lastnosti ključno vlogo pri ustvarjanju porazdeljenih aplikacij, ki dobro delujejo v okolju Jini, kjer je mreženje pogosto spontano, procesi pa se dinamično pridružijo in zapustijo izračun, včasih zaradi naprave ali okvara omrežja.

Izvor JavaSpaces

JavaSpaces smo opisali kot nov model porazdeljenega računalništva, vendar njegov izvor lahko zasledimo na univerzi Yale v zgodnjih osemdesetih letih. Tam je dr. David Gelernter razvil orodje z imenom Linda za ustvarjanje porazdeljenih aplikacij. Linda je sestavljena iz majhnega števila operacij v kombinaciji s trajno shrambo, imenovano a prostor za tuple. Te operacije so pravokotne glede na določen programski jezik; so del a koordinacijski jezik ki se lahko doda kateri koli drugi računski jezik. Rezultat raziskave Linda je bil presenetljiv: z uporabo shrambe predmetov skupaj z majhnim številom preprostih operacij lahko enostavno uporabite velik razred vzporednih in porazdeljenih problemov s pomočjo tehnik, ki ublažijo številne pasti gradnje omrežnih sistemov. Z drugimi besedami, vesoljski sistemi niso samo preprosti (zahtevajo le nekaj operacij), ampak so tudi izraziti (dobro se znajo rešiti številnih porazdeljenih problemov).

Delo dr. Gelernterja je navdihnilo Sunino storitev JavaSpaces in vplivalo tudi na zasnovo komponent iskanja in odkrivanja osnovne tehnologije Jini (ki jo boste videli kot Jiniologija serija napreduje). Medtem ko je JavaSpaces podedoval vesoljski model od Linde, so oblikovalci JavaSpaces na pomemben način posodobili model in izkoristili moč objektov Java, Jini, RMI in serializacijo objektov.

JavaSpaces v kontekstu

Naš opis je bil do zdaj nekoliko abstrakten, zato si oglejmo nekaj primerov resničnih porazdeljenih aplikacij, ki jih lahko modelirate kot procese, ki izmenjujejo predmete skozi presledke.

Klepetalni sistemi

Razmislimo o preprostem sistemu za več uporabniških klepetov, v katerem prostor služi kot klepet, v katerem so vsa sporočila, ki tvorijo razpravo. Za pogovor udeleženec odloži sporočila v prostor. Vsi člani klepeta počakajo, da se pojavijo novi predmeti sporočil, jih preberejo in prikažejo njihovo vsebino. Poznejši prihodi lahko pregledajo obstoječe predmete sporočil v prostoru in pregledajo prejšnjo razpravo. Ker je prostor vztrajen, si lahko nov udeleženec diskusijo ogleda še dolgo po tem, ko so vsi ostali odšli, udeleženci pa se lahko celo vrnejo veliko pozneje, da pogovorijo tam, kjer so končali. Seznam udeležencev klepeta lahko tudi shranite v prostoru in ga posodobite, kadar koli se nekdo pridruži pogovoru ali ga zapusti.

Izračunajte strežnike

Zdaj razmislite o analizi podatkov v realnem času radijskih teleskopov za znake nezemeljskega življenja (podobno kot to počne projekt SETI @ home). Takšni podatki so obsežni in njihova analiza je računsko intenzivno delo, ki je zelo primerno za vzporedno računanje z računalniško mrežo - z drugimi besedami, "računski strežnik". S pomočjo tehnologije JavaSpaces se v prostor zapiše vrsta nalog - na primer ena naloga na kos podatkov, ki jih je treba analizirati. Vsak sodelujoči računalnik išče prostor za nalogo, jo odstrani, opravi potrebno računsko delo, rezultat spusti nazaj v prostor in nato nadaljuje z iskanjem več nalog. Ta pristop se naravno spreminja: deluje enako, ne glede na to, ali je na voljo 10 računalnikov ali 1000. Pristop zagotavlja tudi naravno uravnoteženje obremenitve, saj vsak delavec v določenem času pobere natanko toliko dela, ko počasni računalniki delajo manj, hitri računalniki pa več.

Posredniški sistemi

Tretji primer je spletna dražba, ki združuje kupce in prodajalce blaga in storitev. Recimo, da kot potencialni kupec opišete izdelek (na primer avto), ki ga želite kupiti, in ceno, ki ste jo pripravljeni plačati, podatke zavijete v vnos in napišete nastali vnos, ki ga želite kupiti v prostor. Hkrati potencialni prodajalci nenehno spremljajo prostor za prihod vnosov, ki jih želite kupiti, ki se ujemajo s predmeti iz njihovega inventarja. Na primer trgovci Mazde nadzirajo prostor za vnose, ki opisujejo Mazde, trgovci z rabljenimi avtomobili pa prostor za vse zahteve za rabljene avtomobile. Ko se najde in prebere ustrezna zahteva, potencialni prodajalec v prostor vpiše ponudbo in navede ceno ponudbe. Kot potencialni kupec nenehno spremljate prostor za ponudbe na svojih neizpolnjenih zahtevah in ko najdete sprejemljivo ponudbo, odstranite ponudbe in se obrnete na prodajalca (po možnosti prek prostora prek drugega vnosa).

Kratek pregled API-ja

Zdaj je čas, da predstavimo API JavaSpaces. Kot smo že povedali, je preprosto; pravzaprav bomo v nadaljevanju tega članka zajeli vse, kar morate vedeti (razen nekaterih manjših podrobnosti) o njem. Preden pa opišemo JavaSpace vmesnika in njegovih metod, se moramo najprej pogovoriti o vnosih.

Vnosi

Predmet, ki je shranjen v prostoru, se imenuje

vstop.

Da bi bil predmet vnos, mora samo implementirati

Vstop

vmesnik. Kot primer določimo vnos sporočila, ki ga lahko zapišete v presledek:

import net.jini.core.entry.Entry;

javni razred Sporočilo izvaja Entry {public String content;

// javno sporočilo konstruktorja no-arg () {}}

Tu smo določili a Sporočilo razred z nizom polja, ki bo vsebovalo vsebino sporočila. Ker želimo ta razred uporabiti s presledki, moramo vmesnik implementirati net.jini.core.entry.Entry, ki je v paketu net.jini.core.entry. Pomembno je poudariti to Vstop je označevalni vmesnik; z drugimi besedami, vmesnik ne vsebuje konstant ali metod in zato ne zahteva posebnega dela, razen dodajanja izvaja Vstop po definiciji vašega razreda.

Poleg izvajanja Vstop vmesnika, obstaja še nekaj konvencij, ki jih morajo upoštevati naši vnosi. O razlogih bomo lahko povedali več v kasnejših člankih, za zdaj pa si bomo ogledali le splošne obrise. Vnos mora imeti javni konstruktor, ki ne sprejme nobenih argumentov (tako imenovani no-arg konstruktor); ta zahteva izhaja iz osnovne serializacije, ki se pojavi, ko se vnosi prenašajo v presledke in iz njih. Upoštevajte, da je naša definicija Sporočilo vsebuje ne-arg konstruktor. Druga konvencija je, da je treba prijaviti polja vnosa javnosti; to omogoča, da drugi procesi najdejo vaše vnose v presledkih s pomočjo asociativnega iskanja na podlagi vrednosti teh polj. Tretja konvencija je, da morajo polja vnosa vsebovati sklice na predmete in ne na primitivne tipe (to je, če morate določiti polje primitivnega tipa, kot je npr. int, uporabite ustrezen razred ovitka Celo število namesto tega). Za zagotovitev, da pri opredeljevanju vnosov pokrivate vse svoje osnove, priporočamo, da se sklicujete na Načela, vzorci in praksa JavaSpaces,ali za podrobnosti v specifikaciji Sun Microsystems JavaSpaces. Kot smo že omenili, se bomo dotaknili tudi nekaterih podrobnejših točk v kasnejših člankih.

Razen teh zahtev je vnos podoben kateremu koli drugemu razredu Java; lahko ga ustvarite v instanci, prikličete njegove metode in dodelite vrednosti njegovim javnim poljem. Zdaj, ko smo določili a Sporočilo vstopni razred, poglejmo, katere operacije so na voljo za interakcijo z vnosi v presledkih.

Vmesnik JavaSpace

Za interakcijo s prostorom morate pridobiti dostop do predmeta, ki izvaja JavaSpace vmesnik. Obstaja veliko načinov za dostop do takega predmeta (lahko na primer uporabite iskanje Jini ali register RMI), podrobnosti o tem pa bomo obravnavali v naslednjem članku. Za zdaj se bomo osredotočili na JavaSpace sam vmesnik.

$config[zx-auto] not found$config[zx-overlay] not found