Programování

Vytvořte prostor pro JavaSpaces, část 1

Tento článek začíná druhým vláknem Jiniologie série. V červnu zahájil Bill Venners Jiniologie s přehledem technologie Jini - nové výkonné infrastruktury pro budování a nasazování distribuovaných systémů, které jsou organizovány jako federace služeb. Toto vlákno, které bude v tomto sloupci uvedeno každý druhý měsíc, se zaměřuje na Prostory Java, základní služba Jini od Sun Microsystems, která poskytuje prostředky na vysoké úrovni pro vytváření spolupracujících a distribuovaných aplikací. Pokud vytváříte aplikace pomocí Jini, budete chtít vědět, jak používat prostředí JavaSpaces ke koordinaci účastníků federace Jini. Je však také důležité si uvědomit, že prostředí JavaSpaces můžete používat odděleně od Jini, jako nástroj pro vytváření obecných distribuovaných systémů v Javě. V obou případech stojí JavaSpaces za pozornost, protože může výrazně usnadnit design a kódování distribuovaných aplikací.

Udělejte prostor pro JavaSpaces: Přečtěte si celou sérii!

  • Část 1. Usnadněte vývoj distribuovaných aplikací pomocí prostředí JavaSpaces
  • Část 2. Vytvořte výpočetní server pomocí prostředí JavaSpaces
  • Část 3. Koordinujte své aplikace Jini s JavaSpaces
  • Část 4. Prozkoumejte transakce Jini pomocí prostředí JavaSpaces
  • Část 5. Zajistěte, aby byl váš výpočetní server robustní a škálovatelný

V této sérii začneme tím, že vám představíme jedinečný programovací model JavaSpaces, který se zcela liší od ostatních síťových a distribuovaných nástrojů, se kterými byste se mohli seznámit. V následujících článcích se budeme zabývat podrobnostmi JavaSpaces API a tím, jak je můžete použít k slepení procesů do distribuované aplikace, a popíšeme, jak JavaSpaces interagují s ostatními komponentami Jini. V celé sérii uvidíte, že JavaSpaces jsou jednoduché (API se skládá pouze z několika operací), expresivní (s použitím JavaSpaces lze vyřešit velké množství problémů) a výkonné (s malými částkami můžete vytvářet propracované distribuované systémy) kódu JavaSpaces).

Začněme.

Nový model distribuované výpočetní techniky

Vytváření distribuovaných aplikací pomocí konvenčních síťových nástrojů obvykle vyžaduje předávání zpráv mezi procesy nebo vyvolání metod na vzdálených objektech. Naproti tomu v aplikacích JavaSpaces procesy nekomunikují přímo, ale koordinují své aktivity výměnou objektů prostřednictvím a prostor, nebo sdílená paměť. Proces může napsat nové objekty do prostoru, vzít objekty z vesmíru, nebo číst (vytvořit kopii) objektů v prostoru; Obrázek 1 zobrazuje několik procesů (představovaných Dukes), které pomocí těchto operací interagují s mezerami. Při pořizování nebo čtení objektů používají procesy jednoduchou shodu na základě hodnot polí k vyhledání objektů, na kterých jim záleží. Pokud se odpovídající objekt nenajde okamžitě, pak proces může počkat, až dorazí. V prostředí JavaSpaces, na rozdíl od konvenčních úložišť objektů, procesy nemění objekty v prostoru ani nevyvolávají své metody přímo - zatímco tam jsou objekty jen pasivní data. Chcete-li objekt upravit, musí jej proces výslovně odebrat, aktualizovat a znovu vložit do prostoru.

Prostory jsou úložiště objektů s několika důležitými vlastnostmi, které přispívají k tomu, že prostředí JavaSpaces je výkonným a expresivním nástrojem. Podívejme se blíže:

  • Prostory jsou sdílené: Mnoho vzdálených procesů může komunikovat s prostorem souběžně - samotný prostor zpracovává podrobnosti souběžného přístupu, takže se můžete soustředit na návrh protokolů na vysoké úrovni mezi vašimi procesy.

  • Prostory jsou trvalé: Prostory poskytují spolehlivé úložiště pro objekty. Když uložíte objekt do prostoru, zůstane tam neomezeně dlouho, dokud nebude odstraněn. Můžete také požádat o doba nájmu během kterého by měl být objekt uložen. Jakmile je objekt uložen v prostoru, zůstane tam, dokud neskončí jeho doba pronájmu (kterou lze obnovit), nebo dokud jej proces výslovně neodstraní. Později v této sérii se budeme podrobněji zabývat nájmy.

  • Prostory jsou asociativní: Objekty v prostoru jsou umístěny prostřednictvím asociativní vyhledávání, ne podle umístění v paměti nebo podle identifikátoru. Asociativní vyhledávání poskytuje jednoduchý prostředek k vyhledání objektů, které vás zajímají, podle jejich obsahu, aniž byste museli vědět, jak se objekt nazývá, kdo jej vytvořil nebo kde je uložen. Chcete-li vyhledat objekt, vytvoříte a šablona (objekt s některými nebo všemi jeho poli nastavenými na konkrétní hodnoty a ostatní ponechána jako nula jako zástupné znaky). Objekt v prostoru odpovídá šabloně, pokud přesně odpovídá zadaným polím šablony. Uvidíte, že s asociativním vyhledáváním můžete snadno vyjádřit dotazy na objekty, například „Existují nějaké úkoly k výpočtu?“ nebo "Existují nějaké odpovědi na hlavní faktor, o který jsem žádal?"

  • Prostory jsou transakčně zabezpečené: JavaSpaces využívá transakční službu Jini k zajištění, že operace v prostoru je atomová (buď je operace použita, nebo není). Transakce jsou podporovány pro jednotlivé operace na jednom prostoru i pro více operací na jednom nebo více prostorech (buď jsou použity všechny operace, nebo žádné). Jak uvidíte dále v seriálu, transakce jsou důležitým způsobem řešení částečného selhání.

  • Prostory umožňují výměnu spustitelného obsahu: V prostoru jsou objekty jen pasivní data - nemůžete je upravovat ani vyvolávat jejich metody. Když však čtete nebo vezmete objekt z prostoru, vytvoří se místní kopie objektu. Stejně jako u jakéhokoli jiného místního objektu můžete upravit jeho veřejná pole a vyvolat jeho metody, i když jste nikdy neviděli takový objekt jako dříve. Tato funkce vám poskytuje výkonný mechanismus pro rozšíření chování vašich aplikací v prostoru.

Jak tato série postupuje, ukážeme vám, jak tyto vlastnosti hrají klíčovou roli při vytváření distribuovaných aplikací, které fungují dobře v prostředí Jini, kde je síť často spontánní, a procesy se připojují a nechávají výpočet dynamicky, někdy kvůli zařízení nebo chyba sítě.

Počátky prostředí JavaSpaces

Popsali jsme JavaSpaces jako nový distribuovaný výpočetní model, ale jeho počátky lze vystopovat na Yale University počátkem 80. let. Tam Dr. David Gelernter vyvinul nástroj s názvem Linda pro vytváření distribuovaných aplikací. Linda se skládá z malého počtu operací kombinovaných s trvalým obchodem zvaným a n-tice prostor. Tyto operace jsou kolmé na jakýkoli konkrétní programovací jazyk; jsou součástí a koordinační jazyk které lze přidat k jakémukoli jinému výpočetní jazyk. Výsledek výzkumu Lindy byl překvapivý: použitím úložiště objektů spolu s malým počtem jednoduchých operací můžete snadno implementovat velkou třídu paralelních a distribuovaných problémů pomocí technik, které zmírňují mnoho úskalí budování síťových systémů. Jinými slovy, vesmírné systémy jsou nejen jednoduché (vyžadující pouze několik operací), ale také expresivní (dobře se hodí k řešení mnoha distribuovaných problémů).

Práce Dr. Gelerntera inspirovala službu Sun JavaSpaces a také ovlivnila design vyhledávacích a objevovacích komponent základní technologie Jini (kterou uvidíte jako Jiniologie série postupuje). Zatímco prostředí JavaSpaces zdědilo vesmírný model od Lindy, návrháři prostředí JavaSpaces model významným způsobem aktualizovali a využili tak sílu objektů Java, Jini, RMI a serializace objektů.

JavaSpaces v kontextu

Náš dosavadní popis byl trochu abstraktní, takže pojďme zvážit několik příkladů skutečných distribuovaných aplikací, které můžete modelovat jako procesy výměny objektů mezerami.

Chatovací systémy

Zvažte jednoduchý systém víceuživatelského chatu, ve kterém prostor slouží jako oblast chatu, která obsahuje všechny zprávy tvořící diskusi. Chcete-li mluvit, účastník vloží objekty zprávy do prostoru. Všichni členové chatu čekají, až se objeví nové objekty zpráv, přečtou je a zobrazí jejich obsah. Pozdní příchozí mohou prozkoumat existující objekty zpráv v prostoru a zkontrolovat tak předchozí diskusi. Jelikož je prostor trvalý, nový účastník si může diskusi prohlédnout dlouho poté, co všichni ostatní odešli, a účastníci se mohou dokonce vrátit mnohem později, aby pokračovali v konverzaci tam, kde skončili. Seznam účastníků chatu lze také udržovat v prostoru a aktualizovat, kdykoli se někdo připojí nebo opustí konverzaci.

Výpočetní servery

Nyní zvažte analýzu dat rádiového dalekohledu v reálném čase na známky mimozemského života (podobně jako to dělá projekt SETI @ home). Taková data jsou objemná a jejich analýza představuje výpočetně náročnou práci, která je vhodná pro paralelní výpočet pomocí sítě počítačů - jinými slovy „výpočetní server“. Pomocí technologie JavaSpaces se do prostoru zapisuje řada úkolů - například jeden úkol na kus dat, který je třeba analyzovat. Každý zúčastněný počítač prohledá prostor pro úkol, odebere jej, dokončí potřebnou výpočetní práci, vloží výsledek zpět do prostoru a poté pokračuje v hledání dalších úkolů. Tento přístup se přirozeně mění: funguje stejně, ať už je k dispozici 10 počítačů nebo 1000. Tento přístup také poskytuje přirozené vyvažování zátěže, protože každý pracovník sebere přesně tolik práce, kolik zvládne za danou dobu, pomalé počítače dělají méně práce a rychlé počítače více.

Zprostředkovatelské systémy

Jako třetí příklad zvažte online aukční systém, který spojuje kupující a prodávající zboží a služeb. Předpokládejme, že jako potenciální kupující popíšete položku (například auto), kterou chcete koupit, a cenu, kterou jste ochotni zaplatit, zabalíte informace do záznamu a napíšete výsledný záznam, který chcete koupit. do prostoru. Potenciální prodejci zároveň neustále monitorují prostor pro příchod položek, které chtějí koupit, které odpovídají položkám v jejich inventáři. Prodejci Mazda například monitorují prostor pro položky, které popisují Mazdas, zatímco prodejci ojetých vozidel monitorují prostor pro všechny požadavky na ojetá vozidla. Když je nalezen a přečten požadavek na shodu, potenciální prodejce zapíše do nabídky záznam nabídky s uvedením nabídkové ceny. Jako potenciální kupující neustále sledujete prostor pro nabídky na vaše nevyřízené požadavky, a když zjistíte, že je přijatelný, odstraníte nabídky a kontaktujete prodejce (případně přes prostor prostřednictvím jiného záznamu).

Stručný přehled API

Nyní je čas představit rozhraní JavaSpaces API. Jak jsme již řekli, je to jednoduché; ve skutečnosti se ve zbytku tohoto článku budeme zabývat vším, co o něm potřebujete (kromě drobných detailů). Než však popíšeme JavaSpace rozhraní a jeho metody, musíme si nejprve promluvit o položkách.

Záznamy

Objekt, který je uložen v prostoru, se nazývá an

vstup.

Chcete-li být vstupem, objekt musí implementovat

Vstup

rozhraní. Jako příklad definujme položku zprávy, kterou můžete zapsat do mezery:

import net.jini.core.entry.Entry;

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

// veřejný konstruktor no-arg () {}}

Zde jsme definovali a Zpráva třída s polem řetězce, které bude obsahovat obsah zprávy. Protože chceme tuto třídu používat s mezerami, musíme implementovat rozhraní net.jini.core.entry.Entry, který se nachází v balíčku net.jini.core.entry. Je důležité na to poukázat Vstup je značkovací rozhraní; jinými slovy, rozhraní neobsahuje žádné konstanty ani metody, a proto nevyžaduje žádnou další speciální implementaci, kromě přidání implementuje Vstup podle definice vaší třídy.

Kromě implementace Vstup rozhraní, existuje několik dalších konvencí, kterými se naše záznamy musí řídit. O důvodech si toho v pozdějších článcích povíme více, ale prozatím se podíváme pouze na široké obrysy. Záznam musí mít veřejný konstruktor, který nepřijímá žádné argumenty (tzv no-arg konstruktor); tento požadavek vychází z podkladové serializace, ke které dochází při přenosu položek do a z mezer. Všimněte si, že naše definice Zpráva obsahuje konstruktor no-arg. Jinou konvencí je, že pole položky by měla být deklarována veřejnost; to umožňuje dalším procesům najít vaše záznamy v mezerách prostřednictvím asociativního vyhledávání na základě hodnot těchto polí. Třetí konvence spočívá v tom, že pole položky musí obsahovat odkazy na objekty, nikoli primitivní typy (tj. Pokud potřebujete definovat pole primitivního typu, jako je int, měli byste použít odpovídající třídu obálky Celé číslo namísto). Abyste se ujistili, že při definování položek pokrýváte všechny své základny, doporučujeme vám odkazovat se na Principy, vzory a praxe JavaSpaces,nebo podrobnosti ke specifikaci Sun Microsystems JavaSpaces. Jak již bylo zmíněno, dotkneme se také některých jemnějších bodů v dalších článcích.

Kromě těchto požadavků je položka jako každá jiná třída Java; můžete jej vytvořit instanci, vyvolat jeho metody a přiřadit hodnoty jeho veřejným polím. Nyní, když jsme definovali a Zpráva vstupní třída, podívejme se, jaké operace jsou k dispozici pro interakci s položkami v mezerách.

Rozhraní JavaSpace

Chcete-li interagovat s mezerou, musíte získat přístup k objektu, který implementuje JavaSpace rozhraní. Existuje mnoho způsobů, jak získat přístup k takovému objektu (můžete například použít vyhledávání Jini nebo registr RMI) a podrobnosti o tom se budeme zabývat v následujícím článku. Prozatím se soustředíme na JavaSpace samotné rozhraní.

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