OHJ-5010 Hajautettujen järjestelmien perusteet Arkkitehtuureista (1/2) Kari Systä Kari.systa@tut.fi 1
Yleistä Uusimman tiedon mukaan ensimmäinen tentti on 19.5.2012 kello 09-12. Kurssin kotisivuilla http://www.cs.tut.fi/~hajap/ on nyt avattu harjoitustyöryhmän ilmoittautuminen. Muista ilmoittaa työpari viimeistään 27.1.2012 2
Sisältö Arkkitehtuurityylit Asiakas-palvelin (Client/Server) 2-, 3- ja n-taso (tier) C/S-arkkitehtuurit 3
Arkkitehtuureista Arkkitehtuurit, komponentit ja konnektorit Arkkitehtuurityylit, tärkeimmät Kerrosarkkitehtuuri (layered architecture) Oliopohjainen Data-pohjainen Tapahtumapohjainen Esimerkkejä järjestelmäarkkitehtuureista Asiakas-palvelin Kerrosarkkitehtuuri 4
Käsite: arkkitehtuuri Järjestelmän arkkitehtuuri koostuu ohjelmiston komponenteista, niiden ulkoisista ominaisuuksista ja niiden välisistä suhteista. Arkkitehtuurityyli kuvaa järjestelmiä abstraktilla tasolla. 5
Komponentit ja konnektorit Arkkitehtuurit kuvataan komponenttien ja konnektorien avulla Komponentti on hyvin määritelty modulaarinen yksikkö tarjoaa ja tarvitsee rajapintoja Konnektori yhdistää komponentteja esim. RPC, viestinvälitys tai datavirrat 6
Tyyli: Olioperustainen arkkitehtuuri Oliot ovat komponentteja Kutsut ovat RPC:tä (tai RMI:tä) Suluissa jotkut mahdolliset esimerkit Olio (chat server) Olio (login ylläpito) N*Olio (chat client) Olio Käyttäjälistan ylläpito 7
Tyyli: Kerrosarkkitehtuuri Hierarkkiset kerrokset (esim. data-, looginen ja esitystapakerros) Kerrokset tarjoavat palveluja ylemmille (esim. kätkevät heterogeenisyyden) käyttävät alempien kerrosten palveluja Puhtaassa kerrosarkkitehtuurissa palvelupyynnöt etenevät ylhäältä alas Pyyntö Vastaus 8
Muita tyylejä Datakeskeinen: Järjestelmän osat kommunikoivat kirjoittamalla ja lukemalla samaa datasäiliötä Esimerkiksi WWW Tapahtumakeskeinen: Osat kommunikoivat propagoimalla tapahtumia Esim. sulautetut järjestelmät usein 9
Shared data spaces Yhdistelmä kahdesta edellisestä Esimerkki: JavaSpaces (kts myös seuraava sivu) 10
11
Asiakas ja palvelin Palvelu on hajautetun järjestelmän osa, joka hallinnoi joukkoa toisiinsa kuuluvia resursseja ja tarjoaa rajapinnan käyttäjille ja sovelluksille Esimerkiksi hajautettu tiedostojärjestelmä hallinnoi tiedostoja ja tarjoaa read, write ja delete-operaation Esimerkiksi pankki hallinnoi tilejä tarjoaa pano, nosto ja tilisiirto-operaation 12
Asiakas ja palvelin Luultavasti yleisin hajautettujen järjestelmien arkkitehtuuri Palvelu on fyysisesti jossakin koneessa Prosessia, joka huolehtii palvelusta sanotaan palvelimeksi Palvelin ottaa vastaan palvelupyyntöjä muissa koneissa ajettavilta prosesseilta, eli asiakkailta 13
Pyyntö ja vastaus Alla on tyypillinen pyyntö-vastauskäyttäytyminen Asiakas Vastauksen odotus Pyyntö Vastaus Palvelin Prosessoi palvelua Aika 14
Pyyntö ja vastaus Voidaan toteuttaa yhteydettömällä yhteydellä (esim. kirje) On tehokas Entä, jos viesti katoaa? Idempotentit järjestelmät Yhteydellinen yhteys (esim. puhelin) kuluttaa resursseja yleinen varsin WAN:eissa TCP/IP 15
Palvelimesta Miten erotellaan samassa koneessa/iposoitteessa toimivat palvelimet toisistaan? Miten palvelimen portti löydetään? Tunnetusta paikasta (esim. TCP portissa 80) Ajetaan koneessa demonia, joka pitää kirjaa palvelimista ja niiden porteista Superpalvelin kuuntelee tiettyihin palveluihin liittyviä portteja (esim. UNIXissa inetd) Miten keskeytetään operaatio (esim. FTP) Katkaistaan yhteys erikoisviestillä kontrolliportilla 16
Palvelimen tila Tilaton palvelin ei pidä kirjaa asiakkaiden tiloista (WWW-palvelin) Istunnon tila (Session state) Hetkellinen tila Cookiet Tila säilytetään tuntumattomasti asiakkaalla Tilallinen palvelin säilyttää pysyvää dataa asiakkaistaan (Esim. tiedostopalvelin) 17
Useampi palvelin Variaatioita Jaetaan hallinnoitavat resurssit useammalle palvelimelle Lisätään välityspalvelin (proxy) Välityspalvelin tuo epäsuoruuden palvelupyyntöön Kätkö (cache) Kätköön talletetaan ladattuja olioita Kun asiakas tarvitsee oliota tarkistetaan löytyykö se kätköstä Esimerkiksi www-selaimessa on kätkö 18
Variaatioita Thick client ( paksu asiakas) Asiakas asentaa ja/tai lataa koodin palvelimelta Hyvä vaste interaktiossa Voi hoitaa kommunikoinnin palvelimelle Thin client ( ohut asiakas) Paikallisella koneella on vain graafinen käyttöliittymä Varsinainen ohjelma on ajossa muualla 19
Vastaako selain Paksua? vai Ohutta? 20
Kaksi-tasoinen arkkitehtuuri Kehitettiin valjastamaan pöytäkoneiden laskentateho Client Machine UI Logic Business Logic Database Logic Client Machine UI Logic Business Logic Database Logic Client Machine UI Logic Business Logic Database Logic Network (high bandwidth) Database 21
Kolmitasoinen arkkitehtuuri (esimerkkinä hakukone) Selain http://...?key=tampere Kyselyn luonti generointi SELECT.. HTML generointi Rankkaus järjestely Tietokanta 22
Pyyntö ja vastaus Pyyntö-vastaus-käyttäytyminen Asiakas Vastauksen odotus Operaation pyyntö Vastaus Sovellus- palvelin Tietokanta- Datan pyyntö Data Aika palvelin 23
Tulipahan vaan mieleen: selaimet tapaa rinnakkaistaa sivun lataamista 24
Monitasoinen arkkitehtuuri (viime vuoden materiaali puhui riveistä englannin kielessä termi on tier. En ole löytänyt mikä on virallinen suomennos) N-tiered client/server Kolmitasoiseen voidaan edelleen lisätä esimerkiksi esitystapakerros Esimerkki: asiakas voi olla www-selain, esitystapakerros tuottaa html:ää, sovelluspalvelin tuottaa vastauksen tietokantapalvelin tuottaa dataa 25
Asiakaslaite Oikea paikka hajauttaa ei ole itsestään selvä UI UI UI UI Sovellus Sovellus Sovellus Sovellus Tietokanta Tietokanta Tietokanta Tietokanta Palvelinlaite Missä luuraa X11, HTML, AJAX? 26
Etäresursseihin viittaamisesta Hajautetussa järjestelmässä ei voida suoraan käsitellä etämuuttujia suoraan viittaus etämuuttujaan toteutetaan etäkutsuna Ei call-by-value tai call-by-reference vaan parametrien kopioiminen Viitteet (ja osoittimet) haastavia 27
Rajapinnoista Etärajapinta määrittelee proseduurit (ja muuttujat), joita voidaan käsitellä Asiakas-palvelinmallissa palvelurajapinta Hajautetut oliot tarjoavat etärajapinnan Interface Definition Language Kieleen sidotut (Java-RMI) Yleiset (CORBA) 28
LISÄMATERIAALIA PANKKISOVELLUS JAVALLA 29
Pankkiesimerkki Javalla ei java RMI, oma välikerros socketeilla Palvelimena PankkiServer Operaatiot saldo ja talletus Asiakkaana luokkaolio testiclient Palvelimena PankkiServer-olio Välikerroksen toteuttavat PankkiStub-olio PankkiSkeleton-olio 30
Luokkakaavio 31
Asiakkaan koodi import hajap.pankki.*; public class testiclient { public static void main(string [] args) { try { Tilipalvelut yhteys = new PankkiStub(); System.out.println( yhteys.saldo() ); yhteys.talletus( 100 ); System.out.println( yhteys.saldo() ); } catch (Throwable t) { t.printstacktrace(); } }} 32
Pankin palvelurajapinta package hajap.pankki; public interface Tilipalvelut { long saldo() throws Throwable; void talletus(long maara) throws Throwable; } 33
Palvelin Esimerkkipalvelin on toteutettu ikään kuin kyseessä olisi perinteinen ei-hajautettu järjestelmä tyypillinen lähestymistapa 34
Palvelin package hajap.pankki; public class PankkiServer implements Tilipalvelut { long saldo; public PankkiServer(long alku) { this.saldo = alku; } public long saldo() { return saldo; } public void talletus(long maara) { saldo += maara; } } 35
Palvelin-skeleton Virta (Stream) on järjestetty jono tavuja Virta tarjoaa rajapinnan tiedon lukemiseen ja kirjoittamiseen Socket ja ServerSocket ovat luokkia, joiden avulla virtaan kirjoitetaan ja sitä luetaan matalalla abstraktiotasolla 36
Kääreistä ja virroista ObjectInputStream (ns wrapper luokka) avulla voidaan lukea virrasta ObjectOutputStream:n avulla sinne kirjoitettua dataa perustyyppejä ja olioita datan pitää toteuttaa marker-rajapinta serializable nostavat abstraktiotasoa socket-tasolta 37
Palvelin-skeleton package hajap.pankki; import java.io.objectoutputstream; import java.io.objectinputstream; import java.net.socket; import java.net.serversocket; public class PankkiSkeleton extends Thread { PankkiServer myserver; public PankkiSkeleton(PankkiServer server){ this.myserver = server; }; 38
public void run() { try { ServerSocket ssock = new ServerSocket(27300); Socket sock = ssock.accept(); while (sock!= null) { ObjectInputStream istream = new ObjectInputStream(sock.getInputStream()); String method = (String)iStream.readObject(); if (method.equals("saldo")) { long saldo = myserver.saldo(); ObjectOutputStream ostream = new ObjectOutputStream(sock.getOutputStream()); ostream.writelong(saldo); ostream.flush(); } //Else if talletus seuraavalla kalvolla! 39
else if (method.equals("talletus")) { myserver.talletus( ((Long)iStream.readObject()).longValue()); ObjectOutputStream ostream = new ObjectOutputStream(sock.getOutputStream()); ostream.writeobject("sync!"); ostream.flush(); }} } catch (java.io.eofexception e) { System.out.println( " *** Skeleton: Client has gone away?"); } catch (Throwable t) { t.printstacktrace(); System.exit(0); }}} 40
Poikkeukset Esim. kaikki Input- ja OutputStreamien metodit voivat heittää IOExceptionin hajautus pyrkii näkyviin virhe lienee tapahtunut muualla, ja paikallinen JVM ei voi tehdä mitään 41
Käynnistyskoodi Launch-code public static void main(string args[]) { PankkiServer b = new PankkiServer(170); PankkiSkeleton skel = new PankkiSkeleton(b); skel.start(); } 42
package hajap.pankki; Asiakas-stub import java.io.objectoutputstream; import java.io.objectinputstream; import java.net.socket; public class PankkiStub implements Tilipalvelut { Socket socket; public PankkiStub() throws Throwable { socket = new Socket("127.0.0.1", 27300); } 43
public long saldo() throws Throwable { } ObjectOutputStream outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeobject("saldo"); outstream.flush(); ObjectInputStream instream = new ObjectInputStream(socket.getInputStream()); return instream.readlong(); 44
public void talletus(long maara) throws Throwable { ObjectOutputStream outstream = new ObjectOutputStream(socket.getOutputStream()); outstream.writeobject("talletus"); outstream.flush(); outstream.writeobject(new Long(maara)); outstream.flush(); ObjectInputStream instream = new ObjectInputStream(socket.getInputStream()); instream.readobject(); // sync return; } } 45
Sovellustason protokolla Protokolla on kieli, jolla järjestelmän eri osat puhut toisilleen Sovellustason protokolla koostuu sovelluksen abstraktiotason käsitteistä Esim asiakas-stubin jäsenfunktiossa talletus näkyy sovellustason protokolla [String( talletus ), Long] 46
Esimerkin yhteenveto Käsityötä Langoitettuja osoitteita Oikeasti käytettäisiin nimipalvelua Tietotyyppien muunnoksia Vain yksi palvelin Ei ota huomioon rinnakkaisuutta 47