OHJ-5010 Hajautettujen järjestelmien perusteet

Samankaltaiset tiedostot
Kertaus on opintojen äiti: OSI malli. Oliokeskeiset välikerrokset. Transmission Control Protocol (TCP) Kuljetus eli transport kerros

JavaRMI 1 JAVA RMI. Rinnakkaisohjelmoinnin projekti 1 osa C Tekijät: Taru Itäpelto-Hu Jaakko Nissi Mikko Ikävalko

Rajapinta (interface)

Verkko-ohjemointia. TCP vs. UDP Socket, ServerSocket Datagrammit RMI

Järjestelmäarkkitehtuuri (TK081702)

Rinnakkaisohjelmointi kurssi. Opintopiiri työskentelyn raportti

Tehtävä 1. Tehtävä 2. Arvosteluperusteet Koherentti selitys Koherentti esimerkki

Ohjelmointi 2 / 2010 Välikoe / 26.3

Olio-ohjelmointi Javalla

Mikä yhteyssuhde on?

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op. Poikkeukset ja tietovirrat: Virhetilanteiden ja syötevirtojen käsittely

JAVA-PERUSTEET. JAVA-OHJELMOINTI 3op A JAVAN PERUSTEET LYHYT KERTAUS JAVAN OMINAISUUKSISTA JAVAN OMINAISUUKSIA. Java vs. C++?

HSMT Tietokannoista. Ville Leppänen. HSMT, c Ville Leppänen, IT, Turun yliopisto, 2008 p.1/32

Osittavat arkkitehtuurityylit. Palveluihin perustuvat arkkitehtuurityylit. Erikoisarkkitehtuurityylit

14. Poikkeukset 14.1

on ohjelmoijan itse tekemä tietotyyppi, joka kuvaa käsitettä

1. Olio-ohjelmointi 1.1

Java-API, rajapinnat, poikkeukset, UML,...

OutputStream ja InputStream. Tietovirrat ja niiden suunnat. Tietovirtojen käyttö. FileInputStream esimerkki. DataOutputStream ja DataInputStream

HOJ J2EE & EJB & SOAP &...

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Sisällys. 14. Poikkeukset. Johdanto. Johdanto

Metodien tekeminen Javalla

5. HelloWorld-ohjelma 5.1

Metodit. Metodien määrittely. Metodin parametrit ja paluuarvo. Metodien suorittaminen eli kutsuminen. Metodien kuormittaminen

Ohjelmointi 2 / 2008 Välikoe / Pöytätestaa seuraava ohjelma.

Tietokannat II -kurssin harjoitustyö

YHTEYSSUHDE (assosiation)

Listarakenne (ArrayList-luokka)

Kompositio. Mikä komposition on? Kompositio vs. yhteyssuhde Kompositio Javalla Konstruktorit set-ja get-metodit tostring-metodi Pääohjelma

14. Poikkeukset 14.1

812341A Olio-ohjelmointi Peruskäsitteet jatkoa

4. Luokan testaus ja käyttö olion kautta 4.1

Sarjallistaminen. Juha Järvensivu 2007

8. Näppäimistöltä lukeminen 8.1

Osio 4: Tietovirrat. Properties- eli ominaisuustiedostot Logger: lokitietojen käsittely

20. Javan omat luokat 20.1

Sisällys. 20. Javan omat luokat. Java API. Pakkaukset. java\lang

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin peruskurssien laaja oppimäärä

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

12. Näppäimistöltä lukeminen 12.1

6. Arkkitehtuurityylit

Opintojakso TT00AA11 Ohjelmoinnin jatko (Java): 3 op Rajapinnat ja sisäluokat

Ohjelmointi 1 / 2009 syksy Tentti / 18.12

HSMT J2EE & EJB & SOAP &...

1.3Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Sisällys. 12. Näppäimistöltä lukeminen. Yleistä. Yleistä

Olion elinikä. Olion luominen. Olion tuhoutuminen. Olion tuhoutuminen. Kissa rontti = null; rontti = new Kissa();

Olio-ohjelmointi Virhetilanteiden käsittely

Oliosuunnitteluesimerkki: Yrityksen palkanlaskentajärjestelmä

A) on käytännöllinen ohjelmointitekniikka. = laajennetaan aikaisemmin tehtyjä luokkia (uudelleenkäytettävyys)

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

8. Näppäimistöltä lukeminen 8.1

Sisältö Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 26.2

public static void main (String [] args)

16. Javan omat luokat 16.1

812341A Olio-ohjelmointi, IX Olioiden välisistä yhteyksistä

1. Omat operaatiot 1.1

Sovellusarkkitehtuurit

Ohjelmistojen mallinnus Ohjelmistoarkkitehtuuri Harri Laine 1

Luento 6. T Ohjelmoinnin jatkokurssi T1 & T Ohjelmoinnin jatkokurssi L1. Luennoitsija: Otto Seppälä

Poikkeustenkäsittely

17. Javan omat luokat 17.1

Sisältö. Johdanto. Tiedostojen lukeminen. Tiedostojen kirjoittaminen. 6.2

Rinnakkaisohjelmointi, Syksy 2006

Tietokantasovellus (4 op) - Web-sovellukset ja niiden toteutus

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä. Tiedonkätkentä. Aksessorit. 4.2

Sisällys. Yleistä attribuuteista. Näkyvyys luokan sisällä ja ulkopuolelta. Attribuuttien arvojen käsittely aksessoreilla. 4.2

Java ja grafiikka. Ville Sundberg

in condition monitoring

SAP. Lasse Metso

Sisällys. 6. Metodit. Oliot viestivät metodeja kutsuen. Oliot viestivät metodeja kutsuen

1 Tehtävän kuvaus ja analysointi

Ohjelmoinnin perusteet Y Python

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

AJAX-konsepti AJAX. Asynkronisuus. Nykyisten web-ohjelmien ongelmia. Asynchronous JavaScript And XML

Ohjelmoinnin perusteet Y Python

Sisällys. 1. Omat operaatiot. Yleistä operaatioista. Yleistä operaatioista

Sisällys. JAVA-OHJELMOINTI Osa 7: Abstrakti luokka ja rajapinta. Abstraktin luokan idea. Abstrakti luokka ja metodi. Esimerkki

2. Lisää Java-ohjelmoinnin alkeita. Muuttuja ja viittausmuuttuja (1/4) Muuttuja ja viittausmuuttuja (2/4)

Palveluperustaiset arkkitehtuurityylit

Tietorakenteet, laskuharjoitus 7,

Java-kielen perusteet

Projekti 1 Säikeet ja kriittisen vaiheen kontrollointi javalla

Microsoft Visual Studio 2005

7. Oliot ja viitteet 7.1

Ohjelmoinnin perusteet, syksy 2006

Java-kielen perusteita

1.3 Lohkorakenne muodostetaan käyttämällä a) puolipistettä b) aaltosulkeita c) BEGIN ja END lausekkeita d) sisennystä

Yleistä. Nyt käsitellään vain taulukko (array), joka on saman tyyppisten muuttujien eli alkioiden (element) kokoelma.

15. Ohjelmoinnin tekniikkaa 15.1

Ohjelmistojen mallintamisen ja tietokantojen perusteiden yhteys

A TIETORAKENTEET JA ALGORITMIT

Sisältö. 22. Taulukot. Yleistä. Yleistä

Hajautettujen sovellusten muodostamistekniikat, TKO_2014 Johdatus kurssiin

5. HelloWorld-ohjelma 5.1

Vertailulauseet. Ehtolausekkeet. Vertailulauseet. Vertailulauseet. if-lauseke. if-lauseke. Javan perusteet 2004

Ohjelmointi 2, välikoe

Tehtävä 1. Tietojen lisääminen, poistaminen, päivittäminen ja tulostaminen

Transkriptio:

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