Ohjelmointi

Tee tilaa JavaSpaceille, osa 1

Tämä artikkeli alkaa toisen ketjun Jiniologia sarja. Kesäkuussa Bill Venners aloitti Jiniologia Jini-tekniikan yleiskatsaus - tehokas uusi infrastruktuuri hajautettujen järjestelmien rakentamiseen ja käyttöönottoon, jotka on järjestetty palvelujen liittoina. Tämä ketju, joka näkyy joka toinen kuukausi tässä sarakkeessa, keskittyy JavaSpaces, Sun Microsystemsin Jini-ydinpalvelu, joka tarjoaa korkean tason keinot luoda yhteistyöhön perustuvia ja hajautettuja sovelluksia. Jos rakennat sovelluksia Jinin kanssa, sinun on tiedettävä, miten JavaSpace-sovelluksia voidaan koordinoida Jini-federaation osanottajat. Mutta on myös tärkeää muistaa, että voit käyttää JavaSpaceja erillään Jinistä työkaluna yleisten hajautettujen järjestelmien rakentamiseen Java-järjestelmään. Kummassakin tapauksessa JavaSpaces on tarkastelun arvoinen, koska se voi merkittävästi helpottaa hajautettujen sovellusten suunnittelua ja koodausta.

Tee tilaa JavaSpaceille: Lue koko sarja!

  • Osa 1. Helppo jaettujen sovellusten kehittäminen JavaSpaces-sovelluksen avulla
  • Osa 2. Rakenna laskentapalvelin JavaSpaceilla
  • Osa 3. Koordinoi Jini-sovelluksesi JavaSpaces-sovelluksen kanssa
  • Osa 4. Tutustu Jini-tapahtumiin JavaSpaces-sovelluksen kanssa
  • Osa 5. Tee laskentapalvelimestasi vankka ja skaalautuva

Tässä sarjassa aloitamme tutustumalla ainutlaatuiseen JavaSpaces-ohjelmointimalliin, joka eroaa melko paljon muista verkko- ja hajautetuista työkaluista, jotka saatat tuntea. Seuraavissa artikkeleissa käsitellään JavaSpaces-sovellusliittymän yksityiskohtia ja sitä, miten voit käyttää sitä prosessien liimaamiseen hajautetuksi sovellukseksi, ja kuvataan, miten JavaSpaces on vuorovaikutuksessa muiden Jini-komponenttien kanssa. Koko sarjassa huomaat, että JavaSpaces on yksinkertainen (sovellusliittymä koostuu vain kourallisesta toiminnasta), ilmeikäs (suuri määrä ongelmia voidaan ratkaista JavaSpaceilla) ja tehokas (voit rakentaa hienostuneita hajautettuja järjestelmiä pienillä määrillä JavaSpaces-koodin).

Aloitetaan.

Uusi hajautettu laskentamalli

Hajautettujen sovellusten rakentaminen tavanomaisilla verkkotyökaluilla edellyttää yleensä viestien siirtämistä prosessien välillä tai menetelmien kutsumista etäobjekteille. JavaSpaces-sovelluksissa sitä vastoin prosessit eivät kommunikoi suoraan, vaan koordinoivat toimintaansa vaihtamalla objekteja a: n kautta tilaa, tai jaettua muistia. Prosessi voi kirjoittaa uudet esineet avaruuteen, ota esineitä avaruudesta tai lukea (tee kopio) avaruudessa olevista esineistä; Kuva 1 kuvaa useita prosesseja (joita edustavat Dukes), jotka ovat vuorovaikutuksessa tilojen kanssa näitä toimintoja käyttämällä. Kun otetaan tai luetaan objekteja, prosessit käyttävät kenttien arvoihin perustuvaa yksinkertaista sovitusta löytääksesi heille tärkeät objektit. Jos vastaavaa objektia ei löydy heti, prosessi voi odottaa, kunnes yksi saapuu. Toisin kuin tavanomaiset objektikaupat, JavaSpacesissa prosessit eivät muokkaa avaruudessa olevia objekteja eivätkä ne vedota niiden menetelmiin suoraan - kun taas objektit ovat vain passiivisia tietoja. Objektin muokkaamiseksi prosessin on nimenomaisesti poistettava se, päivitettävä se ja asetettava se takaisin avaruuteen.

Spaces on objektikauppa, jolla on useita tärkeitä ominaisuuksia, jotka auttavat tekemään JavaSpacesta tehokkaan, ilmeikkään työkalun. Katsotaanpa tarkemmin:

  • Tilat jaetaan: Monet etäprosessit voivat olla vuorovaikutuksessa avaruuden kanssa samanaikaisesti - tila itse käsittelee samanaikaisen pääsyn yksityiskohdat, jolloin voit keskittyä prosessien välisten korkean tason protokollien suunnitteluun.

  • Tilat ovat pysyviä: Välilyönnit tarjoavat luotettavaa säilytystä esineille. Kun tallennat kohteen tilaan, se pysyy siellä loputtomiin, kunnes se poistetaan. Voit myös pyytää a vuokra-aika jonka aikana esine tulisi tallentaa. Tallennettuaan tilaan objekti pysyy siellä, kunnes sen vuokra-aika (joka voidaan uusia) on ohi tai kunnes prosessi poistaa sen nimenomaisesti. Keskustelemme vuokrasopimuksista tarkemmin myöhemmin tässä sarjassa.

  • Tilat ovat assosiatiivisia: Avaruudessa olevat kohteet sijaitsevat kautta assosiatiivinen haku, ei muistin sijainnin tai tunnisteen perusteella. Assosiatiivinen haku tarjoaa yksinkertaisen tavan löytää kiinnostavat kohteet niiden sisällön mukaan ilman, että hänen on tiedettävä, mitä objektia kutsutaan, kuka sen loi tai mihin se on tallennettu. Voit etsiä objektin luomalla sapluuna (objekti, jonka jotkin tai kaikki kentät on asetettu tietyille arvoille, ja muut jätetään nimellä tyhjä toimia jokerimerkkeinä). Välilyönnissä oleva objekti vastaa mallia, jos se vastaa tarkalleen mallin määritettyjä kenttiä. Näet, että assosiatiivisen haun avulla voit helposti ilmaista kyselyjä esineille, kuten "Onko tehtäviä laskettavia?" tai "Onko vastauksia kysyttyyn päätekijään?"

  • Tilat ovat kaupallisesti turvallisia: JavaSpaces käyttää Jinin tapahtumapalvelua varmistaakseen, että avaruudessa oleva operaatio on atominen (joko toiminto on käytössä tai ei). Tapahtumia tuetaan yksittäisille operaatioille yhdessä tilassa sekä useille operaatioille yhdessä tai useammassa välilyönnissä (joko kaikki toiminnot ovat käytössä tai yksikään ei ole). Kuten näet myöhemmin sarjassa, transaktiot ovat tärkeä tapa käsitellä osittainen epäonnistuminen.

  • Spaces antaa sinun vaihtaa suoritettavaa sisältöä: Avaruudessa objektit ovat vain passiivisia tietoja - et voi muokata niitä tai käyttää niiden menetelmiä. Kun kuitenkin luet tai otat objektin välilyönnistä, objektista luodaan paikallinen kopio. Kuten minkä tahansa muun paikallisen objektin kohdalla, voit muokata sen julkisia kenttiä ja käyttää sen menetelmiä, vaikka et ole koskaan ennen nähnyt vastaavaa objektia. Tämä ominaisuus antaa sinulle tehokkaan mekanismin laajentaa sovellusten käyttäytymistä avaruudessa.

Tämän sarjan edetessä näytämme sinulle, kuinka nämä ominaisuudet ovat avainasemassa, kun haluat luoda jaettuja sovelluksia, jotka toimivat hyvin Jini-ympäristössä, jossa verkostoituminen on usein spontaania, ja prosessit yhdistyvät ja lähtevät laskennasta dynaamisesti, joskus laitteen tai sen vuoksi. verkon vika.

JavaSpacesin alkuperä

Olemme kuvanneet JavaSpacesin uudeksi hajautetuksi tietokonemalliksi, mutta sen alkuperä voidaan jäljittää Yalen yliopistoon 1980-luvun alussa. Siellä tohtori David Gelernter kehitti työkalun nimeltä Linda hajautettujen sovellusten luomiseen. Linda koostuu pienestä määrästä toimintoja yhdistettynä pysyvään myymälään nimeltä a kaksinkertainen tila. Nämä toiminnot ovat kohtisuorassa minkään tietyn ohjelmointikielen kanssa; ne ovat osa a koordinaatiokieli joka voidaan lisätä mihin tahansa muuhun laskennan kieli. Linda-tutkimuksen tulos oli yllättävä: käyttämällä objektivarastoa ja pientä määrää yksinkertaisia ​​toimintoja voit helposti toteuttaa suuren luokan rinnakkaisia ​​ja hajautettuja ongelmia käyttämällä tekniikoita, jotka helpottavat monia verkotettujen järjestelmien rakentamisen sudenkuoppia. Toisin sanoen, avaruuspohjaiset järjestelmät eivät ole vain yksinkertaisia ​​(vaativat vain muutamia operaatioita), mutta myös ilmeikkäitä (soveltuvat hyvin monien hajautettujen ongelmien ratkaisemiseen).

Tohtori Gelernterin työ inspiroi Sunin JavaSpaces-palvelua ja vaikutti myös Jini-ydintekniikan (jonka näet Jiniologia sarja etenee). Vaikka JavaSpaces peri avaruusmallin Lindalta, JavaSpacesin suunnittelijat ovat päivittäneet mallia merkittävillä tavoilla hyödyntämällä Java-objektien, Jinin, RMI: n ja esineiden sarjallisuuden voimaa.

JavaSpaces kontekstissa

Tähänastinen kuvaus on ollut hieman abstrakti, joten tarkastellaan muutamia esimerkkejä todellisista hajautetuista sovelluksista, joita voit mallintaa prosesseina, jotka vaihtavat objekteja tilojen kautta.

Chat-järjestelmät

Tarkastellaan yksinkertaista monen käyttäjän chat-järjestelmää, jossa tila toimii chat-alueena, joka sisältää kaikki keskustelun muodostavat viestit. Puhuakseen osallistuja tallettaa viestiobjektit tilaan. Kaikki chat-jäsenet odottavat uusien viestiobjektien ilmestymistä, lukevat ne ja näyttävät niiden sisällön. Myöhäinen saapuminen voi tutkia avaruudessa olevat viestiobjektit edellisen keskustelun tarkastelemiseksi. Itse asiassa, koska tila on jatkuva, uusi osallistuja voi tarkastella keskustelua kauan sen jälkeen, kun kaikki muut ovat menneet pois, ja osallistujat voivat jopa palata paljon myöhemmin ottamaan keskustelun lähtökohdasta. Chat-osallistujien luetteloa voidaan myös pitää tilassa ja päivittää aina, kun joku liittyy keskusteluun tai poistuu siitä.

Laske palvelimet

Harkitse nyt reaaliaikaisen radioteleskooppidatan analysointia maan ulkopuolisen elämän merkkien löytämiseksi (aivan kuten SETI @ home-projekti). Tällainen data on laajaa, ja sen analysointi on laskennallisesti intensiivistä työtä, joka sopii hyvin rinnakkaislaskentaan tietokoneverkon - toisin sanoen "laskentapalvelimen" avulla. JavaSpaces-tekniikkaa käyttämällä avaruuteen kirjoitetaan joukko tehtäviä - esimerkiksi yksi tehtävä analysoitavaa datapalaa kohti. Jokainen osallistuva tietokone etsii tilaa tehtävälle, poistaa sen, suorittaa tarvittavan laskennallisen työn, pudottaa tuloksen takaisin avaruuteen ja etsii sitten lisää tehtäviä. Tämä lähestymistapa skaalautuu luonnollisesti: se toimii samalla tavalla riippumatta siitä, onko käytettävissä 10 tietokonetta tai 1000. Lähestymistapa tarjoaa myös luonnollisen kuormituksen tasapainoittaminen, koska jokainen työntekijä kerää tarkalleen niin paljon työtä kuin pystyy käsittelemään tiettynä aikana, hitaat tietokoneet tekevät vähemmän työtä ja nopeat tietokoneet tekevät enemmän.

Välittäjäjärjestelmät

Kolmas esimerkki on online-huutokauppajärjestelmä, joka tuo yhteen tavaroiden ja palvelujen ostajat ja myyjät. Oletetaan, että potentiaalisena ostajana kuvailet tuotteen (kuten auton), jonka haluat ostaa, ja hinnan, jonka olet valmis maksamaan, kääri tiedot merkinnöihin ja kirjoita tuloksena oleva osto-ohje tilaan. Samaan aikaan potentiaaliset myyjät seuraavat jatkuvasti tilaa, jotta löydetään ostettavaksi haluamiasi merkintöjä, jotka vastaavat niiden varastomerkintöjä. Esimerkiksi Mazda-jälleenmyyjät seuraavat tilaa taloutta kuvaaville merkinnöille, kun taas käytettyjen autojen jälleenmyyjät seuraavat tilaa kaikkien käytettyjen autojen pyynnöille. Kun vastaava pyyntö on löydetty ja luettu, mahdollinen myyjä kirjoittaa tarjousmerkinnän tilaan ja ilmoittaa tarjoushinnan. Potentiaalisena ostajana seuraat jatkuvasti tarjoamattomien tilausten tilaa, ja kun löydät tarjouksen, joka on hyväksyttävä, poistat tarjoukset ja otat yhteyttä myyjään (mahdollisesti tilan kautta toisen merkinnän kautta).

Lyhyt kuvaus API: sta

Nyt on aika esitellä JavaSpaces-sovellusliittymä. Kuten olemme jo sanoneet, se on yksinkertaista; Itse asiassa tämän artikkelin loppuosassa käsitellään kaikkea, mitä sinun tarvitsee tietää (lukuun ottamatta pieniä yksityiskohtia) siitä. Ennen kuin kuvaamme JavaSpace käyttöliittymä ja sen menetelmät, meidän on ensin puhuttava merkinnöistä.

Merkinnät

Avaruuteen tallennettua esinettä kutsutaan

merkintä.

Ollakseen merkintä, objektin on vain toteutettava

Entry

käyttöliittymä. Määritetään esimerkiksi viestimerkintä, jonka voit kirjoittaa välilyöntiin:

tuonti net.jini.core.entry.Entry;

public class Viesti toteuttaa merkinnän {public String content;

// ei-arg-konstruktorin julkinen viesti () {}}

Tässä olemme määrittäneet a Viesti luokka merkkijonokentällä, joka pitää sisällään viestin sisällön. Koska haluamme käyttää tätä luokkaa välilyönneillä, meidän on toteutettava käyttöliittymä net.jini.core.entry.Entry, joka löytyy pakkauksesta net.jini.core.entry. On tärkeää huomauttaa siitä Entry on merkkiliitäntä; toisin sanoen, käyttöliittymä ei sisällä vakioita tai menetelmiä, joten sen toteuttaminen vaatii erityistä työtä paitsi lisäämistä toteuttaa Entry luokkasi määritelmän mukaan.

Sen lisäksi, että Entry käyttöliittymässä on muutama muu käytäntö, jota meidän on noudatettava. Meillä on enemmän sanottavaa syistä myöhemmissä artikkeleissa, mutta toistaiseksi tarkastelemme vain pääpiirteitä. Merkinnässä on oltava julkinen konstruktori, joka ei ota argumentteja (ns no-arg rakentaja); tämä vaatimus johtuu taustalla olevasta sarjasta, joka tapahtuu, kun merkinnät siirretään tiloihin ja niistä pois. Huomaa, että määritelmämme Viesti sisältää ei-arg-konstruktorin. Toinen käytäntö on, että merkinnän kentät on ilmoitettava julkinen; tämä antaa muiden prosessien löytää merkinnät välilyönneistä assosiatiivisen haun avulla näiden kenttien arvojen perusteella. Kolmas käytäntö on, että merkinnän kenttien on sisällettävä viittaukset kohteisiin primitiivityyppien sijaan (ts. Jos sinun on määritettävä primitiivinen tyyppikenttä, kuten int, sinun tulisi käyttää vastaavaa kääreluokkaa Kokonaisluku sen sijaan). Suosittelemme, että viittaat siihen, jotta katat kaikki perusteet määrittäessäsi merkintöjä JavaSpaces-periaatteet, -mallit ja -käytännöt,tai Sun Microsystems JavaSpaces -määritykseen saadaksesi lisätietoja. Kuten jo mainittiin, käsittelemme myös joitain hienompia kohtia myöhemmissä artikkeleissa.

Näitä vaatimuksia lukuun ottamatta merkintä on kuin mikä tahansa muu Java-luokka; voit ilmentää sitä, käyttää sen menetelmiä ja määrittää arvoja sen julkisille kentille. Nyt kun olemme määrittäneet a Viesti katsotaan, mitkä toiminnot ovat käytettävissä vuorovaikutuksessa välilyöntien kanssa.

JavaSpace-käyttöliittymä

Jos haluat olla vuorovaikutuksessa avaruuden kanssa, sinun on hankittava pääsy objektiin, joka toteuttaa JavaSpace käyttöliittymä. On olemassa monia tapoja saada pääsy tällaiseen objektiin (voit käyttää esimerkiksi Jini-hakua tai RMI-rekisteriä) ja käsittelemme yksityiskohdat siitä seuraavassa artikkelissa. Toistaiseksi keskitymme JavaSpace käyttöliittymä itse.