1. fejezet Bevezetés Az emberek általában törekszenek arra, hogy jól informáltak legyenek, bizonyos dolgokkal kapcsolatban naprakész információkkal rendelkezzenek, vagy csak általában kommunikáljanak a többiekkel. Az, hogy életünkben csaknem mindenütt jelen van a nyomtatott sajtó, az elektronikus média és a telekommunikációs infrastruktúra, erre az alapvetõ információéhségre vezethetõ vissza. Ma már a számítógép is jól illeszkedik ebbe a mindent behálózó információs infrastruktúrába. Mivel a számítógép egyszerre képes nagy mennyiségû információt tárolni, feldolgozni, illetve mindehhez viszonylag könnyû hozzáférést enged, érthetõ, hogy napjaink információs rendszereiben kulcsszerep jut neki. Szintén lényeges szempont, hogy az ehhez szükséges hardver és szoftver széles körben, gyakorlatilag a világ bármely pontján hozzáférhetõ. Az Internet és a Világháló megjelenése szinte lényegtelenné tette az olyan kérdéseket, hogy hol, kitõl, mikor és milyen információhoz juthatunk hozzá. A különbözõ feladatkezelõ és kiszolgáló rendszerek segítségével bejelentkezhetünk tõlünk fizikailag nagyon távol mûködõ számítógépekre, és azokon programokat futtathatunk. Fordítva, egy olyan szoftverrel, mint amilyen például a Java, letölthetünk távoli kiszolgálókról programokat, és azokat saját gépünkön futtathatjuk.
2
Elosztott rendszerek
Mindezek a szolgáltatások és lehetõségek képezik az elosztott rendszerek hátterét. Az elosztott rendszereket olyan önálló, hálózaton keresztül összekapcsolt számítógépek alkotják, amelyek közösen, egymással együttmûködve képesek megoldani egy adott feladatot, vagy lehetõvé teszik több, egymással valamilyen logikai kapcsolatban álló program párhuzamos végrehajtását (Wittie 1991). Ezen felül, a felhasználónak egy elosztott rendszert pontosan ugyanúgy kell tudnia használni, mint egyetlen számítógépet, illetve biztosítani kell számára, hogy ha átül egyik géptõl a másikhoz, akkor a felhasználói felület lényegesen ne változzon. Ebbõl a meghatározásból három kulcsfontosságú elemet kell kiemelnünk. Elõször is léteznie kell egy hálózatnak, amely lehetõvé teszi a gépek egymás közti kapcsolattartását, illetve azt, hogy azok megosszák egymás között a végrehajtandó feladatokat. Másodszor, ezt a hálózati kapcsolatot a felhasználó elõl el kell rejteni. Harmadszor, a teljes rendszer ugyanúgy néz ki, akárhonnan is használjuk (lásd az 1.1. ábrát).
Rejtett hálózat Számítógép-hálózat A felhasználó gépe
1.1. ábra
A felhasználó az elosztott rendszert egyetlen gépként érzékeli.
A feldolgozási feladatok gépek közti megosztása élesen megkülönbözteti az elosztott rendszereket a többi hálózati rendszertõl. Számos olyan távolról elérhetõ, idõosztásos rendszer létezik, amely egy kommunikációs hálózaton keresztül lehetõvé teszi, hogy a felhasználók hozzáférjenek egy központi feldolgozó egységhez. Ugyanakkor egyetlen rendszert sem nevezhetünk elosztottnak, amíg valamennyi feldolgozási mûvelet egyetlen központi helyen zajlik, és ennélfogva nincs is igény arra, hogy több számítógép munkáját hangoljuk össze. Egy olyan rendszer tehát, amely azt teszi lehetõvé, hogy a felhasználók távolról bejelentkezzenek, és programokat futtassanak egy szu-
Bevezetés
perszámítógépen, nem nevezhetõ elosztott rendszernek. Egy olyan rendszer, amely egy központi adatbázisban való keresést tesz lehetõvé a hálózaton keresztül, szintén nem elosztott rendszer. Ugyanakkor egy légi helyfoglalási rendszer, amely adatbázisából több, egymással összehangolt példányt tart fenn, és amely versengõ hozzáférést tesz lehetõvé ezeken a másolatokon keresztül, már valóban elosztott rendszer. Bár itt és most megpróbálunk éles határvonalat húzni az elosztott és az egyszerû hálózati rendszerek között, ez a különbségtétel a gyakorlatban egyáltalán nem egyszerû, és számos félreértésre és vitára ad okot, az elméleti és a gyakorló szakemberek között. Ugyanakkor azt senki sem vitatja, hogy egy elosztott rendszerben biztosan léteznie kell valamilyen hálózati infrastruktúrának, amely lehetõséget teremt a feladatok megosztására és a mûveletek összehangolására, miközben az egyes gépek bizonyos fokú önállóságot is élveznek. (Lásd Coulouris és szerzõtársai 1994; Crichlow 1997; Tanenbaum 1995.)
1.1. Számítógép-hálózatok A számítógép-hálózatok a felhasználói programokat futtató számítógépekbõl és az õket összekapcsoló alhálózatokból állnak. A felhasználói gépeket gazdagépnek, állomásnak vagy önálló számítógépnek nevezzük. A kommunikációs alhálózat ugyanakkor valamiféle kapcsolatrendszer az egymással kapcsolatot tartó processzorok között. A kommunikációs mûveletek ebben a bizonyos alhálózatban valósulnak meg. Magukat a kommunikáló processzorokat szokás IMPnek (Interface Message Processor) vagy PSN-nek (Packet Switching Node; csomagkapcsolási csomópont) is nevezni (lásd az 1.2. ábrát). A csomagkapcsolási csomópontok konkrét feladatuk szerint viszonylag lazán csoportosíthatók. Lehetnek kapcsolók, elosztók (hub), hidak, átjárók és útválasztók. Magukat a hálózatokat általában három, szintén laza csoportba soroljuk. Beszélünk nagy hálózatokról (Wide Area Network; WAN), helyi hálózatokról (Local Area Network; LAN) és városi hálózatokról (Metropolitan Area Network; MAN). Egy WAN hálózat földrajzilag nagyon távoli helyeket, esetleg kontinenseket köt össze, míg a helyi
3
4
Elosztott rendszerek
hálózat (LAN) egymáshoz esetleg egészen közeli gépeket, például egy iroda, egy egyetem, vagy akár egyetlen szoba számítógépeit. A városi hálózat nevének megfelelõen egy nagyobb városon belüli kapcsolatrendszer. A felhasználó gépe
Alhálózat
PSN
1.2. ábra
A számítógép-hálózat gépekbõl, az azokat összekapcsoló kommunikációs alhálózatból, valamint csomagkapcsolási csomópontokból áll.
A számítógép-hálózatok fejlõdése az ARPA (Advanced Research Projects Agency) munkásságával kezdõdött, amely az ARPANET hálózatot hozta létre az 1960-as évek végén. (A kutatást az Egyesül Államok Védelmi Minisztériuma támogatta, amit ma a DARPA rövidítéssel illetnek.) A kutatók az ARPANET-en próbáltak ki számos, a hálózatokkal kapcsolatos dolgot, és rengeteg elnevezés is ebbõl az idõbõl származik. Az Internet amely ma már gépek millióit kapcsolja össze világszerte bölcsõje is ez a kutatás volt. A hálózatok tervezõinek számos alapvetõ problémát kellett megoldaniuk. A fõbb területek nagyjából a következõk: a) A kommunikációs kapcsolat által átvihetõ információ mennyisége és minõsége. b) A megfelelõ kommunikációs közeg megválasztása. c) A kommunikációs csatorna megosztása nagyszámú felhasználó között. d) Az információ átvitelével kapcsolatos elfogadható szintû megbízhatóság biztosítása. A rendszerek tervezésével kapcsolatban általánosan használható megközelítés a modularitás. Ez a módszer nemcsak hasznos, hanem egyenesen kikerülhetetlen is nagyobb szoftverrendszerek tervezése során. A moduláris megközelítés lehetõvé teszi, hogy a feladat egé-
Bevezetés
szét kisebb részfeladatokra bontsuk, amelyekkel az arra a területre szakosodott szakértõi csoportok külön-külön foglalkozhatnak. A modularitásból egyenesen következik a könnyû karbantarthatóság, a fejleszthetõség és a méretezhetõség is. Ezek után talán nem meglepõ, hogy a számítógép-hálózatokat is moduláris rendszerekként tervezték meg. A felépítmény több rétegbõl áll, amelyeket minden hálózati csomóponton megvalósítanak. Ezek a rétegek feladatukat tekintve a hardver kezelésétõl, vagy ahogy nevezni szokás, a fizikai rétegtõl a felhasználóig terjednek. Minden egyes réteg úgy viselkedik, mintha a távoli gépen kizárólag a neki megfelelõ réteggel társalogna. Természetesen elõre meg kell határozni, hogy ez a kapcsolattartás miként folyhat a két oldal között. Ezeket a meghatározásokat nevezzük protokolloknak. A két számítógép közti kommunikáció menetét sematikusan az 1.3. ábra mutatja. Látható, hogy tényleges adatátvitel csak a legalsó, fizikai rétegben történik.
B számítógép n. réteg
Kommunikációs protokoll Az n. réteg protokollja
A számítógép n. réteg 3. réteg 2. réteg 1. réteg
A 3. réteg protokollja A 2. réteg protokollja Az 1. réteg protokollja
3. réteg 2. réteg 1. réteg
1.3. ábra
Egy rétegzett hálózati architektúra. Minden réteg a neki megfelelõ réteggel tart kapcsolatot.
A felépítménnyel kapcsolatos problémahalmaz részét képezik a különbözõ topológiák (kiépítések) is. Ez a kérdéskör azt taglalja, hogyan kell a számítógépeket egymáshoz képest elhelyezni, illetve összekapcsolni úgy, hogy a megoldás ne csak olcsó legyen, hanem megfelelõ teljesítményt is biztosítson.
1.2. Szolgáltatások Amint azt korábban említettük, számos olyan hálózati környezetben mûködõ alkalmazás létezik, amelyeket nem nevezhetünk elosztott rendszereknek. Ugyanakkor egy elosztott rendszer képes valamennyi
5
6
Elosztott rendszerek
létezõ hálózati szolgáltatást nyújtani. A következõkben áttekintjük ezeket az általános szolgáltatásokat. Eközben megemlítjük bizonyos termékek, rendszerek és protokollok nevét, Ezek közül azokra, amelyek az elosztott rendszerek szempontjából kiemelkedõ fontossággal bírnak, késõbb még visszatérünk. Aki az egyes résztémákra bõvebben is kíváncsi, annak figyelmébe ajánljuk a könyv végén található irodalomjegyzéket.
1.2.1. Elektronikus levelezés Az elektronikus levelezést vagy ahogy általában rövidítjük, az emailt a napi gyakorlatban számos helyen használjuk, mint elsõdleges kapcsolattartási formát. Elektronikus levél formájában erõsen változó hosszúságú és jelentõségû üzeneteket küldhetünk, kezdve a pár soros megjegyzéstõl egészen a szigorúan titkos információkig. Utóbbihoz persze csak a különleges hálózatok nyilvántartott felhasználóinak van hozzáférése. A levelezõ szolgáltatáshoz általában a megfelelõ levelezõprogram nevének begépelésével, vagy a megfelelõ ikonra való kattintással férünk hozzá. A vele kapcsolatos elsõdleges szolgáltatások a levelek küldése, illetve fogadása. Ugyanakkor számos levelezõrendszer nyújt sok egyéb, szintén hasznos szolgáltatást. A levelezõrendszer hagyományosan két modulból épül fel. Az egyik a felhasználóval tartja a kapcsolatot, lehetõvé teszi a levelek begépelését, illetve elolvasását. Ez a modult felhasználói ügynöknek, vagy egyszerûen levélolvasónak nevezzük. Néha még ennél is egyszerûbben levelezõprogramnak nevezik. A másik modul a hálózattal tartja a kapcsolatot, és a leveleknek a gépek közti továbbításáért felelõs. Ezt a részegységet levéltovábbító ügynöknek nevezzük. A leggyakrabban használt levélolvasó programok a következõk: Eudora, Hotmail, Pegasus, Pine, Outlook, Yahoo. Amellett, hogy lehetõvé teszik a levelek írását és olvasását, ezekkel a programokkal menthetjük, tárolhatjuk, törölhetjük, megválaszolhatjuk és továbbíthatjuk is az üzeneteket. Ezeken kívül számos egyéb, a levelezéssel kapcsolatos hasznos szolgáltatásuk is van. Lehetõvé teszik például hírcsoportok olvasását, illetve támogatják a MIME- (Multipurpose Internet Mail Extensions) mûveleteket.
Bevezetés
Egy MIME-mûveleteket támogató levelezõprogrammal felszerelkezve nem kell az ASCII kódolású, egyszerû szöveges levelekre szorítkoznunk. A MIME lehetõvé teszi számos egyéb információtípusnak az elektronikus levelekbe való beillesztését. Használhatunk például Rich Text vagy PostScript formátumot, beszúrhatunk képeket és hangfájlokat, sõt filmeket is, vagyis a MIME minden olyan formátumot támogat, ami a mai multimédia-alkalmazásokban hozzáférhetõ. A Rich Text formátum egy szabványos jelölõnyelv segítségével lehetõvé teszi bizonyos szövegformázások (félkövér vagy dõlt betûk, behúzás stb.) használatát. A PostScript dokumentumokat nyomtatásra készen formázott alakban továbbíthatjuk. A képformátumok támogatása állóképek átvitelét teszi lehetõvé, de lehetõségünk van mozgóképek és hangok levélben való küldésére is. Az üzenettovábbító ügynöknek az a feladata, hogy a kész üzenetet kiküldje a hálózatba, illetve hogy a hálózatból érkezõ üzeneteket fogadja. Ennek érdekében az egymással társalgó ügynököknek természetesen valamilyen szabványos protokollt kell használniuk. Az nyilván mindenki számára világos, hogy ha társalogni akarunk valakivel, akár személyesen, szemtõl szembe, akár a hálózaton keresztül tesszük ezt, mindenképpen tartanunk kell magunkat bizonyos írott vagy íratlan szabályokhoz. Elõször például fel kell hívnunk magunkra valahogyan a partner figyelmét. A hálózati kommunikációt szabályozó protokollok maguk is rétegzett felépítésûek, és e tekintetben alkalmazkodnak a hálózati architektúrához. Ezt a késõbbiekben részletesen tárgyaljuk. Itt és most legyen elég annyi, hogy a levéltovábbítás szempontjából két protokollal kell rendelkeznie a rendszernek. Az egyik a levélkezelési szabályrendszer, amely az elõkészített adatokat egy, az átvitelért felelõs rendszernek adja tovább. Ez a rendszer egy másik, az adatátvitellel kapcsolatos protokollt használ a tényleges kommunikáció lebonyolítására. A leggyakrabban használt levélprotokoll az SMTP (Simple Mail Transfer Protocol), míg az adatátvitelt a TCP/IP protokoll (Transmission Control Protocol/Internet Protocol) szabályozza. (Ezzel kapcsolatban lásd Tanenbaum 1996-ban megjelent könyvét.) A TCP/IP protokoll lehetõvé teszi a gépek közti kapcsolatfelvételt és az üzenetek automatikusan irányított továbbítását egy több hálózat összekapcsolásával elõállított hálózati környezetben. Az SMTP a TCP/IP által létrehozott kapcsolatot használja elektronikus levelek továbbítására.
7
8
Elosztott rendszerek
A levelek pontos továbbítása végett a levelezõrendszerben minden egyes felhasználónak rendelkeznie kell egy egyedi azonosítóval, ami címként használható, és ami alapján a címzett egyértelmûen azonosítható. Mivel az elektronikus levelezés világméretû szolgáltatás, ennek a logikai címzési rendszernek is világméretûnek kell lennie. Ezt az egyediséget az Internet tartománynév-rendszere (Domain Name System; DNS) biztosítja. A DNS rendszeren belül a felhasználók részhalmazokat, úgynevezett tartományokat alkotnak. Egy tartományon belül a felhasználói azonosítók (ezeket szokás felhasználóneveknek is hívni) mindenkor egyediek, a cím fennmaradó részét pedig magának a tartománynak a címe jelenti. A tartományneveket és a tartományhoz tartozó számítógépek címét be kell jegyeztetni a DNS rendszerbe. Az elnevezési rendszer hierarchikus felépítésû, és tartományok többszintû névrendszereként valósították meg (lásd az 1.4. ábrát). A cs.ucl.ac.uk például egy érvényes tartománynév a DNS rendszerben. A cím jobb oldalán van a legmagasabb szintû névtartomány. Ez azt jelenti, hogy az elnevezés szerint a cs.ucl.ac.uk tartomány az ucl.ac.uk tartomány része. Ez utóbbi az ac.uk tartományban található, amely viszont az uk legfelsõbb szintû tartomány eleme. A címnek általában a gyakorlatban is használható jelentése van. Jelen esetben a Számítástudományi Tanszékrõl (cs) van szó, mégpedig a University College London (ucl) egyik tanszékérõl. Ez egy oktatási intézmény (ac), amely az Egyesült Királyságban (uk) található. A levélkezelõ rendszer tehát a névkezelõ rendszerrel együtt képes csak megállapítani a címzett hálózati címét. Miként valósul meg ez az együttmûködés? Hol van a neveket kezelõ rendszer? Hogyan tartják karban a neveket és címeket összerendelõ adatbázist? Hogyan biztosítható a bejegyzések érvényessége? Többszörözi-e a rendszer az egyes szoftverkomponenseket, és ha igen, akkor hogyan? Hogyan lehet biztosítani a mûveletek összehangolását? Az ilyen és ehhez hasonló kérdések gyakran merülnek fel az elosztott rendszerekkel kapcsolatban, így a késõbbiekben még mi is visszatérünk rájuk.
Bevezetés
gyökér tt uk com tt
com
ac.uk co.uk
uwi.tt uwi.tt
prenhall.com amazon.com
ac.uk
prenhall.com
ucl.ac.uk ukc.ac.uk
centre.uwi.tt eng.uwi.tt centre.uwi.tt
uk
eng.uwi.tt
ucl.ac.uk cs.ucl.ac.uk
1.4. ábra
A hierarchikus tartományi névrendszer egy példája.
1.2.2. Hírek olvasása Ha nem léteznének hírközlõ rendszerek, az összes hírt a város közepén egy nagy hirdetõtáblára kellene kifüggeszteni, az emberek pedig ott tolonghatnának körülötte, ha netán kíváncsiak lennének valamire. Ez a meglehetõsen egyszerû hirdetõtábla-rendszer megvalósítható ugyan, de valószínûleg rögtön azon kezdenénk gondolkodni, hogyan lehet valami jobbal helyettesíteni. Megtehetnénk például, hogy a híreket téma szerint csoportokba (hírcsoportokba) szervezzük, és az egyes csoportokat a tábla elkülönített részein függesztjük ki. Lehetõvé tehetnénk aztán, hogy az olvasók reagálhassanak is a hírekre, úgy, hogy válaszaikat kiteszik ugyanarra a táblára. Aztán ha felfutott az üzlet, és már nagyon sokan érdeklõdnek a hirdetõtábla iránt, akkor több táblát is elhelyezhetünk az ország különbözõ, forgalmas pontjain. Mármost minden valószínûség szerint az összes polgár kíváncsi lesz az összes hírre, így gondoskodnunk kell arról is, hogy a táblák tartalma azonos, vagy legalább közel azonos legyen.
9
10
Elosztott rendszerek
Ez a képzeletbeli hirdetési vállalkozás jól modellezi az interaktív hálózati hírkezelõ rendszerek mûködését. A hirdetõtáblát egy kijelölt számítógép tartja fenn, amelyhez több különbözõ céllal férhetnek hozzá a felhasználók. Lehetõségük van hirdetések, vélemények elhelyezésére, válaszadásra, és természetesen passzív olvasgatásra is. Hogy csökkentsük ennek a központi gépnek a terhelését, növeljük a hírek hozzáférhetõségét, illetve még néhány egyéb, a teljesítménynyel kapcsolatos megfontolás miatt célszerû a központi gép hírtartalmát többszörözni, vagyis más gépeken is megjeleníteni. A többszörözés lehet teljes vagy részleges. Az Internet netnews szolgáltatását világszerte milliók használják. A hírek kezelését és a többszörözést a híreket tároló gépek az NNTP protokoll (Network News Transfer Protocol) segítségével végzik. A hálózat rétegelt felépítésének megfelelõen az NNTP ismét a TCP/IP protokollra támaszkodik, hiszen ezen keresztül irányítja és továbbítja a hírtartalmat.
1.2.3. Fájlok átvitele A fájlátviteli szolgáltatások fájlok másolását teszik lehetõvé a hálózatra csatlakoztatott számítógépek között. A legelterjedtebben használt fájlátviteli protokoll az FTP (File Transfer Protocol), amely az Internetet használja az adatok továbbítására. Egy fájl átmásolásához meg kell adnunk a forrást és a célt. Letöltés esetén, ami a forrás címzését illeti, mindenképpen meg kell adnunk az átvinni kívánt fájl nevét, azt a könyvtárat, amelyben található, valamint a gépet, amelyrõl másolni akarunk. A célnál elegendõ megadni annak a könyvtárnak a nevét, ahol a letöltött fájlt tárolni akarjuk, illetve lehetõség van a másolat nevének megváltoztatására is. Az FTP szolgáltatás eléréséhez általában a megfelelõ ikonra kell kattintanunk, vagy a parancssorban a következõt kell begépelnünk: ftp gép neve
A gép neve itt a távoli gép (amelyrõl a fájlt le akarjuk tölteni) DNS nevét jelenti. Az FTP program ezután egy parancssorban bekéri a letölteni kívánt fájlra vonatkozó részleteket.