Programavimas

Atlaisvinkite vietos „JavaSpaces“, 1 dalis

Šiame straipsnyje pradedama antroji Jiniologija serijos. Birželį startavo Billas Vennersas Jiniologija su „Jini“ technologijos apžvalga - galinga nauja infrastruktūra paskirstytų sistemų, kurios yra organizuojamos kaip paslaugų federacijos, kūrimui ir diegimui. Ši tema, kuri bus rodoma kas antrą mėnesį šiame stulpelyje, daugiausia dėmesio skiriama „JavaSpaces“, pagrindinė „Sun Microsystems“ „Jini“ paslauga, suteikianti aukšto lygio priemones bendradarbiaujant ir paskirstant programas. Jei kuriate programas su „Jini“, norėsite žinoti, kaip naudoti „JavaSpaces“, norint koordinuoti „Jini“ federacijos dalyvius. Tačiau taip pat svarbu nepamiršti, kad „JavaSpaces“ galite naudoti atskirai nuo „Jini“, kaip įrankį kuriant bendras „Java“ paskirstytas sistemas. Bet kuriuo atveju verta atkreipti dėmesį į „JavaSpaces“, nes tai gali žymiai palengvinti paskirstytų programų dizainą ir kodavimą.

Atlaisvinkite vietos „JavaSpaces“: perskaitykite visą seriją!

  • 1 dalis. Paprasta kurti platinamas programas naudojant „JavaSpaces“
  • 2 dalis. Sukurkite skaičiavimo serverį naudodami „JavaSpaces“
  • 3 dalis. Koordinuokite „Jini“ programas su „JavaSpaces“
  • 4 dalis. Naršykite „Jini“ operacijas su „JavaSpaces“
  • 5 dalis. Padarykite savo skaičiavimo serverį patikimą ir keičiamą

Šioje serijoje pradėsime jus supažindindami su unikaliu „JavaSpaces“ programavimo modeliu, kuris gerokai skiriasi nuo kitų tinklo ir paskirstytų įrankių, kurie jums gali būti žinomi. Vėlesniuose straipsniuose aptarsime išsamią „JavaSpaces“ API informaciją ir tai, kaip galite ją naudoti klijuodami procesus į paskirstytą programą, ir aprašysime, kaip „JavaSpaces“ sąveikauja su kitais „Jini“ komponentais. Per visą seriją pamatysite, kad „JavaSpaces“ yra paprasta (API sudaro tik keletas operacijų), išraiškinga (daugybę problemų galima išspręsti naudojant „JavaSpaces“) ir galinga (galite kurti sudėtingas paskirstytas sistemas su nedideliais kiekiais „JavaSpaces“ kodo).

Pradėkime.

Naujas paskirstytojo skaičiavimo modelis

Kuriant paskirstytas programas naudojant įprastus tinklo įrankius, paprastai reikia perduoti pranešimus tarp procesų arba iškviesti metodus ant nuotolinių objektų. „JavaSpaces“ programose, priešingai, procesai tiesiogiai nesusikalba, o koordinuoja savo veiklą keisdamiesi objektais per erdvė, arba bendra atmintis. Procesas gali rašyti naujų objektų į kosmosą, imk daiktai iš kosmoso arba skaityti (padaryti jų kopiją) daiktus erdvėje; 1 paveiksle pavaizduoti keli procesai (atstovaujami kunigaikščių), sąveikaujantys su erdvėmis, naudojant šias operacijas. Imdami ar skaitydami objektus, procesai naudoja paprastą derinimą, pagrįstą laukų reikšmėmis, kad surastų jiems svarbius objektus. Jei atitinkantis objektas nerandamas iškart, procesas gali palaukti, kol atvyks. „JavaSpaces“, skirtingai nei įprastos objektų saugyklos, procesai nemodifikuoja erdvės objektų ir tiesiogiai nesikreipia į jų metodus - tuo tarpu objektai yra tik pasyvūs duomenys. Norėdami modifikuoti objektą, procesas turi aiškiai jį pašalinti, atnaujinti ir vėl įdėti į erdvę.

„Spaces“ yra objektų saugyklos, turinčios keletą svarbių savybių, kurios padeda „JavaSpaces“ paversti galingu, išraiškingu įrankiu. Pažvelkime atidžiau:

  • Erdvės yra bendrinamos: Daugelis nuotolinių procesų gali vienu metu sąveikauti su erdve - pati erdvė tvarko detales apie tuo pačiu metu pasiekiamą prieigą, todėl jūs galite sutelkti dėmesį į aukšto lygio protokolų tarp jūsų procesų kūrimą.

  • Erdvės yra nuolatinės: Erdvės suteikia patikimą objektų saugojimą. Kai daiktą laikote erdvėje, jis liks neribotą laiką, kol bus pašalintas. Taip pat galite paprašyti a Nuomos laikas kurio metu daiktas turėtų būti saugomas. Kai objektas bus laikomas erdvėje, jis liks tol, kol pasibaigs jo nuomos laikas (kurį galima atnaujinti) arba kol procesas jį aiškiai pašalins. Vėliau šioje serijoje aptarsime nuoma nuodugniau.

  • Tarpai yra asociatyvūs: Objektai erdvėje yra per asociatyvi paieška, ne pagal atminties vietą ar identifikatorių. Asociatyvi paieška suteikia paprastą būdą rasti jus dominančius objektus pagal jų turinį, nežinant, koks objektas vadinamas, kas jį sukūrė ar kur jis saugomas. Norėdami ieškoti objekto, sukuriate šabloną (objektas, kurio kai kurie arba visi jo laukai nustatyti konkrečiomis reikšmėmis, o kiti liko kaip niekinis veikti kaip pakaitos simboliai). Erdvėje esantis objektas atitinka šabloną, jei jis tiksliai atitinka nurodytus šablono laukus. Pamatysite, kad naudodami asociatyvią paiešką galite lengvai išreikšti užklausas dėl tokių objektų kaip „Ar yra kokių nors užduočių, kurias reikia apskaičiuoti?“ arba "Ar yra atsakymų į pagrindinį veiksnį, kurio paprašiau?"

  • Erdvės sandoriu būdu yra saugios: „JavaSpaces“ naudojasi „Jini“ operacijų paslauga, kad užtikrintų, jog operacija erdvėje yra atominė (arba operacija taikoma, arba ne). Operacijos palaikomos atliekant atskiras operacijas vienoje erdvėje, taip pat atliekant kelias operacijas vienoje ar keliose erdvėse (visos operacijos taikomos arba nė viena nėra). Kaip pamatysite vėliau serijoje, sandoriai yra svarbus būdas išspręsti dalinį gedimą.

  • Tarpai leidžia keistis vykdomuoju turiniu: Būdami erdvėje, objektai yra tik pasyvūs duomenys - jūs negalite jų modifikuoti ar pasinaudoti jų metodais. Tačiau kai skaitote arba paimate objektą iš vietos, sukuriama vietinė objekto kopija. Kaip ir bet kurį kitą vietinį objektą, galite modifikuoti jo viešuosius laukus ir pasinaudoti jo metodais, net jei dar niekada nematėte tokio objekto. Ši galimybė suteikia jums galingą mechanizmą, leidžiantį išplėsti savo programų elgesį erdvėje.

Vykstant šiai serijai, mes jums parodysime, kaip šios savybės vaidina pagrindinį vaidmenį leidžiant jums kurti paskirstytas programas, kurios gerai veikia „Jini“ aplinkoje, kur tinklai dažnai būna spontaniški, o procesai dinamiškai prisijungia ir palieka skaičiavimus, kartais dėl įrenginio ar tinklo gedimas.

„JavaSpaces“ ištakos

Mes apibūdinome „JavaSpaces“ kaip naują paskirstytojo skaičiavimo modelį, tačiau jo ištakas galima atsekti iki Jeilio universiteto devintojo dešimtmečio pradžioje. Ten daktaras Davidas Gelernteris sukūrė įrankį, vadinamą Linda paskirstytų programų kūrimui. Linda susideda iš nedaugelio operacijų, sujungtų su nuolatine parduotuve, vadinama a dviguba erdvė. Šios operacijos yra stačios bet kuriai programavimo kalbai; jie yra a koordinavimo kalba kad galima pridėti prie bet kurio kito skaičiavimo kalba. „Linda“ tyrimo rezultatas nustebino: naudodamiesi daiktų parduotuve kartu su nedideliu skaičiumi paprastų operacijų, galite lengvai įgyvendinti didelę lygiagrečių ir paskirstytų problemų klasę naudodami metodus, kurie palengvina daugelį tinklo sistemų kūrimo spąstų. Kitaip tariant, kosmoso sistemos yra ne tik paprastos (reikalaujančios tik kelių operacijų), bet ir išraiškingos (puikiai tinka daugeliui paskirstytų problemų sprendimui).

Dr. Gelernterio darbas įkvėpė „Sun“ „JavaSpaces“ paslaugą ir taip pat turėjo įtakos pagrindinės „Jini“ technologijos paieškos ir atradimo komponentų dizainui (kurį pamatysite kaip Jiniologija serija progresuoja). Nors „JavaSpaces“ paveldėjo kosminį modelį iš Lindos, „JavaSpaces“ dizaineriai reikšmingai atnaujino modelį, pasitelkdami „Java“ objektų, „Jini“, RMI ir objektų nuoseklinimo galimybes.

„JavaSpaces“ kontekste

Iki šiol mūsų aprašymas buvo šiek tiek abstraktus, todėl apsvarstykime keletą realių paskirstytų programų pavyzdžių, kuriuos galite modeliuoti kaip procesus, kuriais objektai keičiami erdvėmis.

Pokalbių sistemos

Apsvarstykite paprastą daugelio vartotojų pokalbių sistemą, kurioje erdvė tarnauja kaip pokalbių zona, kurioje yra visi diskusijos pranešimai. Kalbėdamas dalyvis patalpina pranešimo objektus į erdvę. Visi pokalbio nariai laukia, kol pasirodys nauji pranešimų objektai, juos perskaitys ir parodys jų turinį. Vėlai atvykę gali išnagrinėti esamus pranešimų objektus erdvėje, kad peržiūrėtų ankstesnę diskusiją. Tiesą sakant, kadangi erdvė yra nuolatinė, naujas dalyvis gali peržiūrėti diskusiją praėjus daugeliui po to, kai visi kiti išnyks, o dalyviai netgi gali sugrįžti kur kas vėliau, norėdami tęsti pokalbį ten, kur baigė. Pokalbių dalyvių sąrašas taip pat gali būti laikomas erdvėje ir atnaujinamas, kai kas nors prisijungia ar išeina iš pokalbio.

Apskaičiuokite serverius

Dabar apsvarstykite realaus laiko radijo teleskopo duomenų analizę, kad rastumėte nežemiškos gyvybės požymių (panašiai kaip tai daro SETI @ home projektas). Tokie duomenys yra gausūs, o jų analizė yra daug skaičiavimų reikalaujantis darbas, puikiai tinkantis lygiagrečiam skaičiavimui kompiuterių tinklu - kitaip tariant, „skaičiavimo serveriu“. Naudojant „JavaSpaces“ technologiją, į erdvę įrašoma užduočių serija, pavyzdžiui, viena užduotis, tenkanti vienai duomenų daliai, kurią reikia analizuoti. Kiekvienas dalyvaujantis kompiuteris ieško užduoties vietos, ją pašalina, užbaigia būtiną skaičiavimo darbą, grąžina rezultatą atgal į erdvę ir toliau ieško daugiau užduočių. Šis metodas natūraliai keičiasi: jis veikia taip pat, nesvarbu, ar yra 10 kompiuterių, ar 1000. Metodas taip pat suteikia natūralų apkrovos balansavimas, kadangi kiekvienas darbuotojas per tam tikrą laiką surenka tiek pat darbo, kiek gali dirbti. Lėti kompiuteriai dirba mažiau, o greiti - daugiau.

Tarpininkų sistemos

Trečiuoju pavyzdžiu galime paminėti internetinio aukciono sistemą, sujungiančią prekių ir paslaugų pirkėjus ir pardavėjus. Tarkime, kad jūs, kaip potencialus pirkėjas, apibūdinkite daiktą (pvz., Automobilį), kurį norite įsigyti, ir kainą, kurią esate pasirengę mokėti, apvyniokite informaciją įraše ir parašykite gautą norimo pirkti įrašą į erdvę. Tuo pačiu metu potencialūs pardavėjai nuolat stebi, ar atsiranda norimų pirkti įrašų, atitinkančių jų atsargų elementus. Pavyzdžiui, „Mazda“ pardavėjai stebi vietą įrašams, apibūdinantiems „Mazdas“, o naudotų automobilių pardavėjai stebi visų naudotų automobilių užklausų vietą. Kai randama ir perskaitoma atitinkama užklausa, potencialus pardavėjas į vietą įrašo pasiūlymo įrašą, kuriame nurodo pasiūlymo kainą. Būdamas potencialus pirkėjas, jūs nuolat stebite, ar nėra pasiūlymų pagal jūsų neapmokėtas užklausas, ir, radę priimtiną pasiūlymą, pašalinate pasiūlymus ir susisiekiate su pardavėju (galbūt per kitą įrašą).

Trumpa API apžvalga

Dabar atėjo laikas pristatyti „JavaSpaces“ API. Kaip jau sakėme, tai paprasta; Tiesą sakant, likusioje šio straipsnio dalyje aptarsime viską, ką apie tai turite žinoti (išskyrus keletą smulkių detalių). Tačiau prieš aprašydami „JavaSpace“ sąsają ir jos metodus, pirmiausia turime kalbėti apie įrašus.

Įrašai

Objektas, saugomas erdvėje, vadinamas

įrašas.

Kad būtų įrašas, objektas tiesiog turi įgyvendinti

Įėjimas

sąsaja. Pavyzdžiui, apibrėžkime pranešimo įrašą, kurį galite įrašyti į tarpą:

importuoti net.jini.core.entry.Entry;

public class Pranešimas įgyvendina įrašą {public String content;

// „no-arg“ konstruktoriaus viešasis pranešimas () {}}

Čia mes apibrėžėme Pranešimas klasė su eilutės lauku, kuriame bus laikomas pranešimo turinys. Kadangi norime naudoti šią klasę su tarpais, turime įdiegti sąsają net.jini.core.entry.Etry, kuris yra pakuotėje net.jini.core.entry. Svarbu tai pabrėžti Įėjimas yra žymeklio sąsaja; kitaip tariant, sąsajoje nėra konstantų ar metodų, todėl jai įgyvendinti nereikia jokio specialaus darbo, išskyrus pridėjimą įgyvendina Įrašą pagal savo klasės apibrėžimą.

Be to, įgyvendinant Įėjimas sąsajoje, yra keletas kitų konvencijų, kurių turi laikytis mūsų įrašai. Mes turėsime daugiau pasakyti apie priežastis vėlesniuose straipsniuose, bet kol kas mes tik pažvelgsime į plačias schemas. Įrašas turi būti viešasis konstruktorius, kuris nepriima jokių argumentų (vadinamasis ne-arg konstruktorius); šis reikalavimas kyla iš pagrindinio serializavimo, kuris įvyksta, kai įrašai perkeliami į tarpus ir iš jų. Atkreipkite dėmesį, kad mūsų apibrėžimas Pranešimas yra no-arg konstruktorius. Kita sutartis yra ta, kad reikia deklaruoti įrašo laukus visuomenės; tai leidžia kitiems procesams rasti jūsų įrašus erdvėse, naudojant asociatyvią paiešką, remiantis tų laukų reikšmėmis. Trečia sutartis yra ta, kad įrašo laukuose turi būti nuorodos į objektus, o ne į primityvius tipus (tai yra, jei reikia apibrėžti primityvų tipo lauką, pvz., tarpt, turėtumėte naudoti atitinkamą įvyniojimo klasę Sveikasis skaičius vietoj jo). Norėdami įsitikinti, kad apibrėždami įrašus aprėpiate visus pagrindus, rekomenduojame kreiptis į tai „JavaSpaces“ principai, modeliai ir praktika,arba „Sun Microsystems JavaSpaces Specification“, kad gautumėte išsamesnės informacijos. Mes taip pat, kaip minėta, paliesime kai kuriuos smulkesnius dalykus vėlesniuose straipsniuose.

Be šių reikalavimų, įrašas yra panašus į bet kurią kitą „Java“ klasę; galite jį iš karto nustatyti, pasinaudoti jo metodais ir priskirti reikšmes jo viešiesiems laukams. Dabar, kai mes apibrėžėme a Pranešimas įrašo klasę, pažiūrėkime, kokios operacijos galimos sąveikauti su įrašais tarpuose.

„JavaSpace“ sąsaja

Norėdami bendrauti su erdve, turite gauti prieigą prie objekto, kuris įgyvendina „JavaSpace“ sąsaja. Yra daug būdų, kaip gauti prieigą prie tokio objekto (galite, pavyzdžiui, naudoti „Jini“ paiešką arba RMI registrą), o išsamią informaciją apie tai atliksime kitame straipsnyje. Kol kas sutelksime dėmesį į „JavaSpace“ pati sąsaja.

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