Programovanie

Vytvorte priestor pre JavaSpaces, časť 1

Tento článok začína druhým vláknom Jiniológia série. V júni sa predstavil Bill Venners Jiniológia s prehľadom technológie Jini - novej výkonnej infraštruktúry pre budovanie a nasadzovanie distribuovaných systémov, ktoré sú organizované ako federácie služieb. Toto vlákno, ktoré bude v tomto stĺpci uvedené každý druhý mesiac, sa zameriava na JavaSpaces, hlavná služba Jini od spoločnosti Sun Microsystems, ktorá poskytuje prostriedky na vysokej úrovni na vytváranie spolupracujúcich a distribuovaných aplikácií. Ak vytvárate aplikácie s Jini, mali by ste vedieť, ako používať JavaSpaces na koordináciu účastníkov federácie Jini. Je však tiež dôležité pamätať na to, že JavaSpaces môžete používať oddelene od Jini ako nástroj na vytváranie všeobecných distribuovaných systémov v Jave. V obidvoch prípadoch stojí JavaSpaces za pozornosť, pretože môže výrazne uľahčiť dizajn a kódovanie distribuovaných aplikácií.

Vytvorte priestor pre JavaSpaces: Prečítajte si celú sériu!

  • Časť 1. Zjednodušte vývoj distribuovaných aplikácií pomocou JavaSpaces
  • Časť 2. Zostavte výpočtový server s prostredím JavaSpaces
  • Časť 3. Koordinujte svoje aplikácie Jini pomocou JavaSpaces
  • Časť 4. Preskúmajte transakcie Jini pomocou JavaSpaces
  • Časť 5. Urobte svoj výpočtový server robustným a škálovateľným

V tejto sérii si najskôr predstavíme jedinečný programovací model JavaSpaces, ktorý sa značne líši od ostatných sieťových a distribuovaných nástrojov, ktoré by ste mohli poznať. V nasledujúcich článkoch sa budeme venovať podrobnostiam API JavaSpaces a tomu, ako ich môžete použiť na zlepenie procesov do distribuovanej aplikácie, a popíšeme interakciu JavaSpaces s ostatnými komponentmi Jini. V celej sérii uvidíte, že JavaSpaces sú jednoduché (API sa skladá iba z niekoľkých operácií), expresívne (pomocou JavaSpaces je možné vyriešiť veľké množstvo problémov) a výkonné (s malými množstvami môžete vytvoriť zložité distribuované systémy). kódu JavaSpaces).

Začnime.

Nový model distribuovanej výpočtovej techniky

Budovanie distribuovaných aplikácií pomocou konvenčných sieťových nástrojov zvyčajne znamená odovzdávanie správ medzi procesmi alebo vyvolanie metód na vzdialených objektoch. Naproti tomu v aplikáciách JavaSpaces procesy nekomunikujú priamo, ale koordinujú svoje aktivity výmenou objektov prostredníctvom a priestor, alebo zdieľaná pamäť. Proces môže napíš nové objekty do priestoru, vziať predmety z vesmíru, príp čítať (vytvoriť kópiu) objektov v priestore; Obrázok 1 zobrazuje niekoľko procesov (reprezentovaných Dukesom) interagujúcich s priestormi pomocou týchto operácií. Pri preberaní alebo čítaní objektov procesy používajú jednoduché priraďovanie založené na hodnotách polí k nájdeniu objektov, na ktorých im záleží. Ak sa zodpovedajúci objekt nenájde okamžite, potom proces môže čakať, kým jeden nepríde. V prostredí JavaSpaces, na rozdiel od konvenčných obchodov s objektmi, procesy nemodifikujú objekty v priestore alebo priamo vyvolávajú svoje metódy - zatiaľ čo tam sú objekty iba pasívne údaje. Ak chcete objekt upraviť, musí ho proces výslovne odstrániť, aktualizovať a znovu vložiť do priestoru.

Priestory sú úložiská objektov s niekoľkými dôležitými vlastnosťami, ktoré prispievajú k tomu, aby sa z JavaSpaces stal výkonný a expresívny nástroj. Pozrime sa bližšie:

  • Priestory sú zdieľané: Mnoho vzdialených procesov môže interagovať s priestorom súčasne - samotný priestor spracováva podrobnosti súčasného prístupu, takže sa môžete sústrediť na návrh protokolov na vysokej úrovni medzi vašimi procesmi.

  • Medzery sú trvalé: Priestory poskytujú spoľahlivé úložisko pre objekty. Keď objekt uložíte do medzery, zostane tam na neurčito, kým nebude odstránený. Môžete tiež požiadať o doba prenájmu počas ktorého by mal byť predmet uložený. Po uložení do priestoru tam objekt zostane, kým neskončí jeho doba prenájmu (ktorá sa dá obnoviť) alebo kým ho proces výslovne neodstráni. Neskôr sa v tejto sérii o nájmoch budeme podrobnejšie zaoberať.

  • Medzery sú asociatívne: Objekty v priestore sa nachádzajú cez asociatívne vyhľadávanie, nie podľa umiestnenia v pamäti alebo podľa identifikátora. Asociatívne vyhľadávanie poskytuje jednoduchý prostriedok na vyhľadanie objektov, ktoré vás zaujímajú, podľa ich obsahu bez toho, aby ste museli vedieť, ako sa objekt volá, kto ho vytvoril alebo kde je uložený. Na vyhľadanie objektu vytvoríte a šablóna (objekt, v ktorom je niektoré alebo všetky jeho polia nastavené na konkrétne hodnoty a ostatné zostali ako nulový pôsobiť ako zástupné znaky). Objekt v priestore sa zhoduje so šablónou, ak sa presne zhoduje so zadanými poľami šablóny. Uvidíte, že pomocou asociatívneho vyhľadávania môžete ľahko vyjadrovať dotazy k objektom, napríklad „Existujú nejaké úlohy na výpočet?“ alebo „Existujú nejaké odpovede na najdôležitejší faktor, o ktorý som žiadal?“

  • Priestory sú transakčne zabezpečené: JavaSpaces využíva transakčnú službu Jini na zabezpečenie toho, že operácia v priestore je atómová (operácia sa použije alebo nie). Transakcie sú podporované pre jednotlivé operácie v jednom priestore, ako aj pre viac operácií v jednom alebo viacerých priestoroch (buď sa použijú všetky operácie, alebo žiadne). Ako uvidíte ďalej v sérii, transakcie sú dôležitým spôsobom riešenia čiastočného zlyhania.

  • Priestory vám umožňujú výmenu spustiteľného obsahu: V priestore sú objekty iba pasívne údaje - nemôžete ich upravovať ani vyvolávať ich metódy. Keď však čítate alebo vyberáte objekt z medzery, vytvorí sa lokálna kópia objektu. Rovnako ako v prípade iného lokálneho objektu, môžete upraviť jeho verejné polia a vyvolať jeho metódy, aj keď ste nikdy predtým nevideli taký objekt. Táto schopnosť vám poskytuje výkonný mechanizmus na rozšírenie správania vašich aplikácií v medzere.

Ako táto séria postupuje, ukážeme vám, ako tieto vlastnosti zohrávajú kľúčovú úlohu pri vytváraní distribuovaných aplikácií, ktoré fungujú dobre v prostredí Jini, kde je sieť často spontánna, a procesy sa pripájajú a odchádzajú z výpočtu dynamicky, niekedy kvôli zariadeniu alebo zlyhanie siete.

Počiatky JavaSpaces

JavaSpaces sme opísali ako nový distribuovaný výpočtový model, ale jeho počiatky môžeme hľadať na Yale University začiatkom 80. rokov. Tam Dr. David Gelernter vyvinul nástroj s názvom Linda na vytváranie distribuovaných aplikácií. Linda pozostáva z malého počtu operácií kombinovaných s perzistentným obchodom s názvom a priestor n-tice. Tieto operácie sú kolmé na akýkoľvek konkrétny programovací jazyk; sú súčasťou a koordinačný jazyk ktoré je možné pridať do ľubovoľného iného výpočtový jazyk. Výsledok výskumu Lindy bol prekvapivý: použitím úložiska objektov spolu s malým počtom jednoduchých operácií môžete ľahko implementovať veľkú triedu paralelných a distribuovaných problémov pomocou techník, ktoré zmierňujú mnohé úskalia budovania sieťových systémov. Inými slovami, vesmírne systémy nie sú len jednoduché (vyžadujú iba niekoľko operácií), ale aj expresívne (dobre sa hodia na riešenie mnohých distribuovaných problémov).

Práca Dr. Gelerntera inšpirovala službu Sun JavaSpaces a tiež ovplyvnila dizajn komponentov vyhľadávania a objavovania základnej technológie Jini (ktorú uvidíte ako Jiniológia séria postupuje). Zatiaľ čo JavaSpaces zdedili vesmírny model od Lindy, dizajnéri JavaSpaces model významným spôsobom aktualizovali, pričom využili silu objektov Java, Jini, RMI a serializácie objektov.

JavaSpaces v kontexte

Náš doterajší popis bol trochu abstraktný, zvážme preto niekoľko príkladov reálne distribuovaných aplikácií, ktoré môžete modelovať ako procesy výmeny objektov cez medzery.

Chatovacie systémy

Zvážte jednoduchý systém viacužívateľského chatu, v ktorom priestor slúži ako oblasť chatu a obsahuje všetky správy tvoriace diskusiu. Ak chcete hovoriť, účastník uloží objekty správy do priestoru. Všetci členovia chatu čakajú na objavenie sa nových objektov správ, prečítajú si ich a zobrazia ich obsah. Neskoro prichádzajúci môžu preskúmať existujúce objekty správ v priestore a skontrolovať tak predchádzajúcu diskusiu. Pretože priestor je stále pretrvávajúci, nový účastník si môže diskusiu prezerať dlho potom, čo všetci ostatní odídu, a účastníci sa môžu dokonca vrátiť oveľa neskôr, aby pokračovali v konverzácii tam, kde skončili. Zoznam účastníkov chatu možno tiež udržiavať v priestore a aktualizovať vždy, keď sa niekto pripojí alebo opustí konverzáciu.

Výpočtové servery

Teraz zvážte analýzu dát rádiového ďalekohľadu v reálnom čase na príznaky mimozemského života (podobne ako to robí projekt SETI @ home). Takéto údaje sú objemné a ich analýza predstavuje výpočtovo náročnú prácu, ktorá je vhodná na paralelné výpočty v sieti počítačov - inými slovami „výpočtový server“. Pomocou technológie JavaSpaces sa do priestoru zapisuje séria úloh - napríklad jedna úloha na jeden kus údajov, ktoré je potrebné analyzovať. Každý zúčastnený počítač prehľadá priestor pre úlohu, odstráni ju, dokončí potrebnú výpočtovú prácu, výsledok vloží späť do medzery a potom pokračuje v hľadaní ďalších úloh. Tento prístup je škálovateľný prirodzene: funguje rovnako, či je k dispozícii 10 počítačov alebo 1 000. Prístup poskytuje aj prirodzené rozdelenie výkonu, pretože každý pracovník naberie presne toľko práce, koľko zvládne za daný čas, pomalé počítače menej a rýchle počítače viac.

Sprostredkovateľské systémy

Ako tretí príklad zvážte online aukčný systém, ktorý spája kupujúcich a predávajúcich tovarov a služieb. Predpokladajme, že ako potenciálny kupujúci opíšete položku (napríklad auto), ktorú chcete kúpiť, a cenu, ktorú ste ochotní zaplatiť, zabaľte informácie do záznamu a napíšte výsledný záznam, ktorý chcete kúpiť. do priestoru. Potenciálni predajcovia zároveň neustále monitorujú priestor pre príchod položiek, ktoré sa dajú kúpiť, ktoré sa zhodujú s položkami v ich inventári. Napríklad predajcovia vozidiel Mazda monitorujú priestor pre položky, ktoré popisujú Mazdy, zatiaľ čo predajcovia ojazdených vozidiel monitorujú priestor pre všetky požiadavky na ojazdené vozidlá. Po nájdení a prečítaní žiadosti o priradenie potenciálny predajca napíše do ponuky záznam ponuky s uvedením ponukovej ceny. Ako potenciálny kupujúci nepretržite sledujete priestor pre ponuky na základe svojich nevybavených požiadaviek, a keď zistíte, že je prijateľný, odstránite ponuky a kontaktujete predajcu (pravdepodobne cez priestor prostredníctvom iného záznamu).

Stručný prehľad API

Teraz je čas predstaviť API JavaSpaces. Ako sme už povedali, je to jednoduché; v skutočnosti sa vo zvyšku tohto článku zameriame na všetko, čo o ňom potrebujete vedieť (až na malé podrobnosti). Avšak predtým, ako popíšeme JavaSpace rozhranie a jeho metódy, najskôr musíme hovoriť o položkách.

Záznamy

Objekt, ktorý je uložený v medzere, sa nazýva

vstup.

Na to, aby bol objekt vstupom, je potrebné implementovať

Vstup

rozhranie. Ako príklad definujme záznam správy, ktorý môžete napísať do medzery:

import net.jini.core.entry.Entry;

public class Správa implementuje Entry {public String content;

// verejný konštruktor no-arg () {}}

Tu sme definovali a Správa triedy s poľom reťazca, ktoré bude obsahovať obsah správy. Pretože chceme túto triedu používať s medzerami, musíme implementovať rozhranie net.jini.core.entry.Entry, ktorý sa nachádza v balení net.jini.core.entry. Je dôležité na to poukázať Vstup je a značkovacie rozhranie; inými slovami, rozhranie neobsahuje žiadne konštanty ani metódy, a preto nevyžaduje nič iné ako implementáciu, aby bolo možné ho implementovať realizuje Vstup podľa definície tvojej triedy.

Okrem implementácie Vstup existuje niekoľko ďalších konvencií, ktorými sa naše záznamy musia riadiť. O dôvodoch si povieme viac v neskorších článkoch, ale zatiaľ sa pozrieme iba na ich obrysy. Záznam musí mať verejný konštruktor, ktorý neprijíma žiadne argumenty (tzv no-arg konštruktér); táto požiadavka vyplýva zo základnej serializácie, ku ktorej dochádza pri prenose položiek do a z priestorov. Všimnite si, že naša definícia Správa obsahuje konštruktor no-arg. Ďalšou konvenciou je, že polia záznamu by sa mali deklarovať verejné; toto umožňuje ďalším procesom nájsť vaše záznamy v priestoroch prostredníctvom asociatívneho vyhľadávania na základe hodnôt týchto polí. Tretia konvencia je, že polia záznamu musia obsahovať odkazy na objekty, a nie primitívne typy (to znamená, ak potrebujete definovať pole primitívneho typu ako napr. int, mali by ste použiť zodpovedajúcu triedu obálky Celé číslo namiesto toho). Aby ste sa ubezpečili, že pri definovaní záznamov pokrývate všetky svoje základy, odporúčame vám odkazovať sa na Princípy, vzory a prax v JavaSpace,alebo podrobnosti v špecifikácii Sun Microsystems JavaSpaces. Ako už bolo spomenuté, dotkneme sa niektorých jemnejších bodov aj v ďalších článkoch.

Okrem týchto požiadaviek je položka ako každá iná trieda Java; môžete ho vytvoriť inštanciu, vyvolať jeho metódy a priradiť hodnoty k jeho verejným poliam. Teraz, keď sme definovali a Správa vstupná trieda, pozrime sa, aké operácie sú k dispozícii na interakciu so vstupmi v medzerách.

Rozhranie JavaSpace

Pre interakciu s priestorom musíte získať prístup k objektu, ktorý implementuje JavaSpace rozhranie. Existuje mnoho spôsobov, ako získať prístup k takémuto objektu (môžete napríklad použiť vyhľadávanie Jini alebo register RMI) a podrobnosti o tom si vysvetlíme v nasledujúcom článku. Zatiaľ sa sústredíme na JavaSpace samotné rozhranie.

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