Oslobodite prostor za JavaSpaces, 1. dio

Ovaj članak započinje drugu nit serije Jiniology . U lipnju je Bill Venners pokrenuo Jiniology s pregledom Jini tehnologije - moćne nove infrastrukture za izgradnju i primjenu distribuiranih sustava koji su organizirani kao federacije usluga. Ova nit, koja će biti prikazana svaki drugi mjesec u ovom stupcu, usredotočena je na JavaSpaces,osnovna Jini usluga tvrtke Sun Microsystems koja pruža visokokvalitetna sredstva za stvaranje suradničkih i distribuiranih aplikacija. Ako gradite aplikacije s Jinijem, morat ćete znati kako koristiti JavaSpaces za koordinaciju sudionika u Jini federaciji. Ali također je važno imati na umu da JavaSpaces možete koristiti odvojeno od Jinija, kao alat za izgradnju općenito distribuiranih sustava u Javi. U oba slučaja JavaSpaces vrijedi pogledati, jer može značajno olakšati dizajn i kodiranje distribuiranih aplikacija.

Napravite mjesta za JavaSpaces: Pročitajte cijelu seriju!

  • Dio 1. Olakšajte razvoj distribuiranih aplikacija s JavaSpacesom
  • Dio 2. Izradite računski poslužitelj s JavaSpacesom
  • Dio 3. Koordinirajte svoje Jini aplikacije s JavaSpacesom
  • Dio 4. Istražite Jini transakcije s JavaSpacesom
  • Dio 5. Učinite svoj računalni poslužitelj robusnim i skalabilnim

U ovoj ćemo seriji započeti upoznavanjem jedinstvenog programskog modela JavaSpaces, koji se prilično razlikuje od ostalih mrežnih i distribuiranih alata s kojima ste možda upoznati. U sljedećim člancima pokriti ćemo detalje JavaSpaces API-ja i kako ga možete koristiti za lijepljenje procesa u distribuiranu aplikaciju i opisat ćemo kako JavaSpaces komunicira s drugim komponentama Jini-a. Kroz cijelu seriju vidjet ćete da je JavaSpaces jednostavan (API se sastoji od samo nekoliko operacija), izražajan (velik broj problema može se riješiti pomoću JavaSpacesa) i moćan (možete izgraditi sofisticirane distribuirane sustave s malim količinama JavaSpaces koda).

Započnimo.

Novi model raspodijeljenog računanja

Izgradnja distribuiranih aplikacija pomoću konvencionalnih mrežnih alata obično podrazumijeva prosljeđivanje poruka između procesa ili pozivanje metoda na udaljenim objektima. Suprotno tome, u JavaSpaces aplikacijama procesi ne komuniciraju izravno, već koordiniraju svoje aktivnosti razmjenom predmeta kroz prostor ili zajedničku memoriju. Proces može writenove predmete u prostor, takepredmete iz prostora iliread(napraviti kopiju) objekata u prostoru; Na slici 1. prikazano je nekoliko procesa (koje predstavljaju Dukes) u interakciji s prostorima pomoću ovih operacija. Prilikom uzimanja ili čitanja objekata, procesi koriste jednostavno podudaranje, na temelju vrijednosti polja, kako bi pronašli predmete koji su im važni. Ako se odgovarajući objekt ne pronađe odmah, postupak može pričekati dok ne stigne. U JavaSpacesu, za razliku od konvencionalnih spremišta objekata, procesi ne mijenjaju objekte u prostoru niti se izravno pozivaju na njihove metode - dok su tamo objekti samo pasivni podaci. Da bi modificirao objekt, proces ga mora izričito ukloniti, ažurirati i ponovo umetnuti u prostor.

Prostori su spremišta objekata s nekoliko važnih svojstava koja doprinose tome da JavaSpaces postane moćan, izražajan alat. Pogledajmo izbliza:

  • Prostori se dijele: Mnogi udaljeni procesi mogu istovremeno komunicirati s prostorom - sam prostor obrađuje detalje istodobnog pristupa, ostavljajući vam da se usredotočite na dizajn protokola na visokoj razini između vaših procesa.

  • Prostori su postojani: Prostori pružaju pouzdano spremište predmeta. Kad objekt pohranite u prostor, ostat će tamo neograničeno dok ga ne uklonite. Također možete zatražiti vrijeme najma tijekom kojeg bi objekt trebao biti pohranjen. Jednom pohranjen u prostoru, objekt će ostati tamo sve dok ne završi vrijeme najma (koje se može obnoviti) ili dok ga postupak izričito ne ukloni. Kasnije ćemo u ovoj seriji razmotriti zakupe.

  • Prostori su asocijativni: Objekti u prostoru nalaze se putem asocijativnog pretraživanja, a ne prema memorijskom mjestu ili prema identifikatoru. Asocijativno pretraživanje pruža jednostavno sredstvo za pronalaženje objekata koji vas zanimaju prema njihovom sadržaju, a da ne morate znati kako se objekt zove, tko ga je stvorio ili gdje je pohranjen. Da biste potražili objekt, stvorite predložak (objekt s nekim ili svim poljima postavljenim na određene vrijednosti, a ostalima je preostalo nullda djeluju kao zamjenski znakovi). Objekt u prostoru odgovara predlošku ako se točno podudara s navedenim poljima predloška. Vidjet ćete da pomoću asocijativnog pretraživanja lako možete izraziti upite za objekte poput "Ima li zadataka za izračunavanje?" ili "Postoje li odgovori na glavni faktor koji sam tražio? "

  • Prostori su transakcijski sigurni: JavaSpaces koristi Jinijevu uslugu transakcija kako bi osigurao da je operacija na prostoru atomska (ili je operacija primijenjena ili nije). Transakcije su podržane za pojedinačne operacije na jednom prostoru, kao i za više operacija nad jednim ili više prostora (ili su primijenjene sve operacije ili nijedna nije). Kao što ćete vidjeti kasnije u nizu, transakcije su važan način rješavanja djelomičnih neuspjeha.

  • Razmaci omogućuju razmjenu izvršnog sadržaja: Dok su u prostoru, objekti su samo pasivni podaci - ne možete ih mijenjati ili pozivati ​​na njihove metode. Međutim, kada čitate ili uzimate objekt iz prostora, stvara se lokalna kopija predmeta. Kao i kod bilo kojeg drugog lokalnog objekta, možete izmijeniti njegova javna polja i pozvati se na njegove metode, čak i ako nikada prije niste vidjeli takav objekt. Ova sposobnost daje vam moćan mehanizam za proširivanje ponašanja vaših aplikacija kroz prostor.

Kako ova serija bude napredovala, pokazat ćemo vam kako ta svojstva igraju ključnu ulogu u omogućavanju stvaranja distribuiranih aplikacija koje dobro rade u Jini okruženju, gdje je umrežavanje često spontano, a procesi se dinamički pridružuju i napuštaju računanje, ponekad zbog uređaja ili kvar na mreži.

Podrijetlo JavaSpaces

Opisali smo JavaSpaces kao novi distribuirani računalni model, ali njegovo podrijetlo može se pratiti do Sveučilišta Yale ranih 1980-ih. Tamo je dr. David Gelernter razvio alat nazvan Linda za stvaranje distribuiranih aplikacija. Linda se sastoji od malog broja operacija u kombinaciji s trajnom trgovinom koja se naziva prostor korice. Te su operacije ortogonalne bilo kojem određenom programskom jeziku; dio su koordinacijskog jezika koji se može dodati bilo kojem drugom računskom jeziku.Rezultat istraživanja Linde bio je iznenađujući: pomoću spremišta predmeta, uz mali broj jednostavnih operacija, lako možete implementirati veliku klasu paralelnih i distribuiranih problema koristeći tehnike koje ublažavaju mnoge zamke izgradnje mrežnih sustava. Drugim riječima, sustavi temeljeni na svemiru nisu samo jednostavni (zahtijeva samo nekoliko operacija), već su i izražajni (dobro se mogu riješiti mnogih distribuiranih problema).

Rad dr. Gelerntera nadahnuo je Sunovu uslugu JavaSpaces, a također je utjecao na dizajn komponenata pretraživanja i otkrivanja osnovne Jini tehnologije (što ćete vidjeti kako Jiniology serija bude napredovala). Iako je JavaSpaces naslijedio svemirski model od Linde, dizajneri JavaSpacesa ažurirali su model na značajne načine, iskorištavajući snagu Java objekata, Jini, RMI i serializaciju objekata.

JavaSpaces u kontekstu

Naš je opis do sada bio pomalo apstraktan, pa razmotrimo nekoliko primjera stvarnih distribuiranih aplikacija koje možete modelirati kao procese koji razmjenjuju objekte kroz razmake.

Sustavi za chat

Razmotrimo jednostavan višekorisnički sustav za chat, u kojem prostor služi kao chat područje u kojem se nalaze sve poruke koje čine raspravu. Da bi razgovarao, sudionik odlaže poruke u prostor. Svi članovi chata čekaju da se pojave novi objekti poruka, čitaju ih i prikazuju njihov sadržaj. Kasni dolasci mogu ispitati postojeće objekte poruka u prostoru radi pregleda prethodne rasprave. U stvari, budući da je prostor uporan, novi sudionik može gledati raspravu dugo nakon što su svi ostali otišli, a sudionici se čak mogu vratiti mnogo kasnije kako bi nastavili razgovor tamo gdje su stali. Popis sudionika chata također se može čuvati u prostoru i ažurirati kad god se netko pridruži razgovoru ili napusti razgovor.

Izračunajte poslužitelje

Sada razmislite o analizi podataka podataka radioteleskopa u stvarnom vremenu na znakove izvanzemaljskog života (baš kao što to čini projekt SETI @ home). Takvi su podaci obimni, a njihova je analiza računski intenzivan posao koji je vrlo pogodan za paralelno računanje pomoću mreže računala - drugim riječima, "računski poslužitelj". Koristeći tehnologiju JavaSpaces, u prostor se upisuje niz zadataka - na primjer, jedan zadatak po komadu podataka koji treba analizirati. Svako računalo koje sudjeluje pretražuje prostor za zadatkom, uklanja ga, dovršava potrebne računske zadatke, vraća rezultat natrag u prostor, a zatim nastavlja tražiti još zadataka. Ovaj se pristup prirodno prilagođava: funkcionira na isti način bez obzira na raspolaganju ima 10 računala ili 1.000. Pristup također osigurava prirodno uravnoteženje opterećenja, budući da svaki radnik pokupi točno onoliko posla koliko može u određenom vremenu, s tim da spora računala rade manje, a brza računala više.

Brokerski sustavi

Kao treći primjer razmotrite sustav mrežne dražbe koji okuplja kupce i prodavače robe i usluga. Pretpostavimo da kao potencijalni kupac opišete stavku (poput automobila) koju želite kupiti i cijenu koju ste spremni platiti, zamotate podatke u unos i napišete rezultirajući unos koji želite kupiti u prostor. Istodobno, potencijalni prodavači neprestano nadgledaju prostor za dolazak stavki koje se žele kupiti i koje se podudaraju s predmetima u njihovom inventaru. Na primjer, distributeri Mazde nadziru prostor za unose koji opisuju Mazde, dok trgovci rabljenim automobilima nadgledaju prostor za sve zahtjeve rabljenih automobila. Kada se pronađe i pročita zahtjev za podudaranje, potencijalni prodavač upisuje unos ponude u prostor navodeći cijenu ponude. Kao potencijalni kupac, neprestano nadgledate prostor za ponude za vaše nepodmirene zahtjeve i,kada pronađete prihvatljivu, uklonite ponude i kontaktirajte prodavatelja (moguće kroz prostor putem drugog unosa).

Kratki pregled API-ja

Sada je vrijeme da predstavimo JavaSpaces API. Kao što smo već rekli, jednostavno je; zapravo, u ostatku ovog članka pokrivat ćemo sve što trebate znati (osim nekih manjih detalja) o njemu. Međutim, prije nego što opišemo JavaSpacesučelje i njegove metode, prvo moramo razgovarati o unosima.

Unosi

Objekt koji je pohranjen u prostoru naziva se

ulazak.

Da bi bio unos, objekt samo treba implementirati

Entry

sučelje. Kao primjer, definirajmo unos poruke koji možete upisati u razmak:

import net.jini.core.entry.Entry;

public class Message implementira Entry {public String content;

// javna poruka () {}} konstruktora bez arg

Ovdje smo definirali Messageklasu s nizom polja koja će sadržavati sadržaj poruke. Budući da ovu klasu želimo koristiti s razmacima, moramo implementirati sučelje net.jini.core.entry.Entrykoje se nalazi u paketu net.jini.core.entry. Važno je naglasiti da Entryje to sučelje markera; drugim riječima, sučelje ne sadrži konstante ili metode i stoga ne zahtijeva nikakav poseban rad, osim dodavanja implements Entrydefiniciji vaše klase.

Osim implementacije Entrysučelja, postoji još nekoliko konvencija kojih se naši unosi moraju pridržavati. O razlozima ćemo imati više reći u kasnijim člancima, ali za sada ćemo samo pogledati široke obrise. Unos mora imati javni konstruktor koji ne uzima argumente (takozvani no-arg konstruktor); ovaj zahtjev proizlazi iz temeljne serializacije koja se događa kada se unosi prenose u razmake i iz njih. Imajte na umu da naša definicija Messagesadrži ne-arg konstruktor. Druga je konvencija da se polja unosa trebaju deklariratipublic; to omogućuje ostalim procesima da pronađu vaše unose u razmacima putem asocijativnog pretraživanja, na temelju vrijednosti tih polja. Treća je konvencija da polja unosa moraju sadržavati reference na objekte, a ne na primitivne tipove (to jest, ako trebate definirati polje primitivnog tipa, na primjer int, Integerumjesto toga trebate koristiti odgovarajuću klasu omota ). Kako biste bili sigurni da pokrivate sve svoje osnove u definiranju unosa, preporučujemo da se za detalje uputite na JavaSpaces principe, obrasce i praksu ili na specifikaciju JavaSpaces Sun Microsystems. Također ćemo se, kao što je spomenuto, dotaknuti nekih finijih stvari u kasnijim člancima.

Osim ovih zahtjeva, unos je poput bilo koje druge Java klase; možete ga instancirati, pozvati njegove metode i dodijeliti vrijednosti njegovim javnim poljima. Sad kad smo definirali Messageklasu unosa, pogledajmo koje su operacije dostupne za interakciju s unosima u razmacima.

Sučelje JavaSpace

Da biste komunicirali s prostorom, morate dobiti pristup objektu koji implementira JavaSpacesučelje. Postoji mnogo načina za dobivanje pristupa takvom objektu (možete, na primjer, upotrijebiti Jini pretragu ili RMI registar), a detalje o tome pokriti ćemo u sljedećem članku. Za sada ćemo se koncentrirati na samo JavaSpacesučelje.