Ohjelmistoarkkitehtuurit Kevät 2016 Arkkitehtuurityylit, osa 1 Samuel Lahtinen http://www.cs.tut.fi/~ohar/ 1
Yleistä 2
Kertausta Mitä suunnittelumallia käyttäisit seuraavassa ongelmatilanteessa? 3
Kertausta 1 Olet kasailemassa kotiisi sääasemaa ja ameriikan-englantilainen serkkusi on toteuttanut anturille ja lämpötilojen keskilaskennalle kivan komponentin, mutta tiedot saa vain Fahrenheitteina ja sademäärän mittaus käyttää tilavuusmittana ¼ pässinkivespussia. Mikä avuksi? 4
Kertausta 2 Olet ostanut BlueberryPie-härpättimen ja aiot koodata siihen musiikki- ja videosoittimen, koska muiden tekemät sovellukset sisältävät mm. NSA:n vakoiluohjelmistoja. Blueperryn päässä pitäisi pystyä hakemaan tiedostoja myös toisilta koneilta (esim. pöytäkoneesi ja läppärisi) ja näissä pyörivän pääteohjelman pitäisi kertoa jotenkin soitto-ohjelmalle päällä olostaan/sijainnistaan. Mikä auttaa? 5
Kertausta 3 Olet tekemässä strategiapeliä, jossa voi antaa komentoja yksittäiselle sotilaalle, useille sotilaille, joukko-osastolle, useammalle joukko-osastolle jne. (+muodostaa uusia kokonaisuuksia valitojen perusteella). Haluaisit, että komentojen käskytys toimisi koodissa samaan tapaan riippumatta siitä, minkä kokoiselle muodostelmalle tämä tehdään. Mikä suunnittelumalli voisi auttaa? 6
Kertausta 4 Sulautettuun ympäristöön koodailemasi älykotijärjestelmä saa tapahtumia eri laitteilta ja käyttöliittymän eri elementtien kautta. Yhdistelet tapahtumia niiden käsittelijöihin siellä täällä, mutta nyt kaipaisit ohjelmaan selkeyttä, mikä auttaisi? 7
Arkkitehtuurityylit Osittavat arkkitehtuurityylit Kerrosarkkitehtuurit (rakenteen ositus) Tietovuoarkkitehtuurit (toiminnan ositus) Palveluihin perustuvat arkkitehtuurityylit Asiakas-palvelin arkkitehtuurit Peer-to-peer Viestinvälitysarkkitehtuurit Publish-subscribe Erikoisarkkitehtuurityylit MVC arkkitehtuurit Tulkkiarkkitehtuurit 8
Mitä ovat arkkitehtuurityylit? Arkkitehtuurityyli = yleinen malli, joka kertoo miten järjestelmä organisoidaan ylimmällä abstraktiotasolla, määräten järjestelmän yleisen teknisen luonteen Arkkitehtuurityylit eivät sulje toisiaan pois! Kysymyksiä, jotka voivat johtaa arkkitehtuurityylin valintaan: - Koostuuko järjestelmä komponenteista, jotka ovat selvästi eri käsitetasoilla? - Onko järjestelmän päätarkoitus jalostaa tietoa? - Jaetaanko järjestelmässä jotain resurssia tai tietoa erillisille sovelluksille? - Koostuuko järjestelmä joukosta komponentteja, jotka kommunikoivat keskenään etukäteen tuntemattomilla tavoilla? Ovatko komponentit usein vaihtuvia? 9
Kerrosarkkitehtuurit Kerrosarkkitehtuuri (layer/tier architecture): Järjestelmän organisointi käsitetasoltaan nouseviin kerroksiin.. 10
Abstraktiotasojen rikkominen ja ohitus Ohitus käyttää toteuttamiseen Abstraktiotasojen rikkominen 11
Takaisinkutsut kerrosarkkitehtuurissa Sovelluskerros normaali kutsu takaisinkutsu Alustakerros Takaisinkutsulla voidaan rikkoa kerrosarkkitehtuurin periaatetta ilman, että alempi kerros riippuu ylemmästä 12
Kerrosarkkitehtuurien kuvaus: hampurilainen Ei ohituksia Ohituksia Ohituksia 13
Kerrosten rajapinnat Kerros A Comp1 Comp2 Comp3 takaisinkutsurajapinta Kerros B Comp4 Comp5 Comp6 Ks. Fasaadi 14
Esimerkki: tyypillinen liiketoimintajärjestelmä Käyttöliittymä Sovelluskohtainen logiikka Sovellusaluekohtainen logiikka Tietokanta 15
16
17
Kerrosrakenne ja komponentteja http://www.edureka.co/blog/beginners-guide-android-architecture/ 18
Kerrosarkkitehtuuri voi olla moniulotteinen Core GUI Default GUI App GUI GUI Käyttöliittymä Core Logic Default Logic App Logic Logic Core Support Default Support App Support Support Peruspalvelut 19
Kerrosarkkitehtuuri voi olla moniulotteinen Core GUI Default GUI App GUI Core Logic Default Logic App Logic Core Support Default Support App Support Yleiskäyttöinen Tuotekohtainen Core Default App Domain-Yritys-Tuote 20
Kerrosten riippuvuusanalyysi rivikerros riippuu sarakeker P1 P2 P3 P4 P5 P1 X X P2 X X P3 X X OK, ohitusaste = 1 P4 X P5 21
Kerrosten riippuvuusanalyysi row depends on col P1 P2 P3 P4 P5 P1 X X P2 X Ei OK, mitä tehdä? P3 X X X P4 X P5 Vaihdetaan P2:n ja P3:n paikat, jos P2 ei ole selvästi korkeammalla käsitetasolla 22
Kerrosten riippuvuusanalyysi row depends on col P1 P2 P3 P4 P5 P1 X X P2 X X Ei OK, mitä tehdä? P3 X X X P4 X Yhdistetään P2 ja P3? P5 23
Kerrosten riippuvuusanalyysi Kerros P2 Yksittäisten komponenttien siirto Comp1 Comp2 Comp3 Kerros P3 Siirto OK, jos ei käsitetason ristiriitaa Comp4 Comp5 Comp6 24
Kerrosten riippuvuusanalyysi Kerros P2 Yksittäisten komponenttien vaihto Comp1 Comp2 Comp3 Kerros P3 Ei voi siirtää Comp4 Comp5 Comp6 25
Harjoitus Suunnittele kerrosarkkitehtuuri seikkailupelille. Järjestelmään kuuluvat seuraavat osat: - Yleinen seikkailupelilogiikka (AL) - Tietokanta (DB) - Pelikäyttöliittymä (GUI) - Graafinen tuki seikkailupeleille (GS) - Pelitietokantapalvelut (GB) - Pelin logiikka (GL) - Yleinen graafinen kirjasto (GLIB) Sijoita nämä osat kerroksiin. 26
Game data Database Common Graphics Library Graphic Support (GS) Common Adventure game logic Game Logic GUI 27
Kerrosarkkitehtuurien edut ja ongelmat Etuja Melkein aina sovellettavissa Tukee järjestelmän ymmärtämistä ja hallintaa Vähentää riippuvuuksia (ylläpidettävyys, muunneltavuus) Helppo liittää yrityksen organisaatioon (Conway) Tukee uudelleenkäyttöä (tuoterunkoarkkitehtuurin pohjana) Ongelmia Suorituskyky voi heikentyä (epäsuoruus) Saattaa johtaa tarpeettomaan/moninkertaiseen laskentaan Poikkeusten käsittely 29
Esimerkki (patologinen) GUI OrderApplication OrderPlatform OrderApplication:orderCheck(XMLdoc apporder) parse apporder check apporder (app specific checking) g = make XMLdoc genorder generalordercheck(g) OrderPlatform:generalOrderCheck(XMLdoc genorder) parse genorder check genorder(general checking) 30
Kolmikerrosarkkitehtuuri Yleinen lähestymistapa webissä: Presentation layer/tier / front-end: selaimessa pyörivä osa Application/Logic tier: Sovellustason toiminnallisuus, sovelluspalvelimen ajamaa koodia (Ruby, Java, PHP, ASP.NET, Perl ) Back-end / Data tier: tietokanta ja tietokannan hallinta, miten tallennettuihin tietoihin päästään käsiksi 31
Kolmikerrosesimerkki 32
https://devcentral.f5.com/articles/the-new-distribution-of-the-3-tiered-architecture-changes-everything 33
Kerrosarkkitehtuurit, ominaisuudet/featuret ja tiimit https://labs.spotify.com/2013/03/15/backend-infrastructure-at-spotify/#more-189 34
Kysyttävää?
Ongelma-aluetta A1 C Erilliset itsenäisesti kehitetyt komponentit Molemmissa samaa toiminnallisuutta, mutta sopeutettu muihin Sisäisiin komponentteihin Ei uudelleenkäyttöä Sisäisellä tasolla suorituskyvyn optimointi hankalaa Muokkaaminen vaikeampaa... Kutsu & tietoja lähteestä 1 B1 D A2 E Kutsu & tietoja lähteestä 2 B2 F 36
Tietovuoarkkitehtuurit (pipes and filters) Tietovuoarkkitehtuuri koostuu komponenteista (filter), jotka tuottavat ja kuluttavat tietoalkioita, ja tietoalkioita komponentilta toiselle kuljettavista väylistä (pipe). filter pipe filter pipe filter pipe pipe filter pipe filter 37
Erikoistapaus: liukuhihnatyyli (pipeline) pipe pipe filter1 filter2 filter3 38
Kontrollin toteutus liukuhihnatyylissä: push/työntävä tapa 39
Kontrollin toteutus liukuhihnatyylissä: pull / vetävä tapa 40
Tyypillistä tietovuoarkkitehtuurille Prosessointiyksiköt toimivat toisistaan riippumattomasti (eivät jaa tilatietoa) Prosessointiyksiköt eivät tunne toisiaan, ainoastaan väylien vaatiman tietoformaatin Tieto voidaan prosessoida paloittain Yksiköt ovat tilattomia 41
Tietovuoarkkitehtuuria Kuva: https://msdn.microsoft.com/en-us/library/dn568100.aspx 42
Rinnakkaiset yksiköt: puskurointi Puskuri filter filter Kukin yksikkö omassa prosessissaan Hitain yksikkö määrää kokonaisajan Puskurien koko on kriittinen tekijä Puskuri on tyypillisesti jonorakenne 43
Sisääntuleva viesti filter, noutaa tehtävän jonosta viestijono Kokonaan käsitelty viesti 44
Kuormituksen jakoa (load balance) Kuva: https://msdn.microsoft.com/en-us/library/dn568100.aspx 45
Mihin käyttäisit tietovuoarkkitehtuuria/missä olet nähnyt sellaisen? 46
Esimerkki: yksivaihekääntäjä Selaaja Jäsentäjä Koodin generointi merkkejä tekstialkioita kielen rakenteita koodi ongelma: ohjelmatekstin kontekstisidonnainen käsittely ratkaisu: (i) tietoa kerätään globaaliin symbolitauluun (data) (ii) jäsentäjä toimii pääohjelmana (kontrolli) 47
Tietovuorakkitehtuurin edut ja ongelmat? 48
Esimerkki: kuvankäsittely (Photoshop lightroom) Alkuperäinen kuvadata terävöinti väritasapaino... Valmis kuva Alkuperäinen säilyy, käsitelty kuva ohjelmassa alkuperäinen + operaatiot Poista filtteri välistä, kuva muuttuu, vaihda paikkaa jne. sama homma Konvertointi esim. verkkojulkaisua tai paperikuvatilausta varten, prosessin ajaminen läpi Mahdollisuus valita koko kuvakirjastolle samat operaatiot jne. (moniajo, rinnakkaisuustuet) 49
Esimerkki: MapReduce http://aws.amazon.com/ 50
Esimerkkejä Komentorivi (nix) ja komentojen putkittaminen Grafiikka, (GPU-laskenta) ja rinnakkaistuvat tehtävät 51
Tietovuoarkkitehtuurien edut ja ongelmat Etuja: Mutkikas tiedon käsittelyprosessi voidaan jakaa helpommin hallittaviin palasiin Tukee uudelleenkäyttöä: prosessointiyksiköitä voidaan kombinoida eri tavoin Tukee ylläpitoa: prosessointiyksikköä voidaan helposti muuttaa Tukee rinnakkaisuutta Ongelmia: Ei sovi interaktiivisille järjestelmille (tai riippuu interaktiosta, esim. hakukone) Tiedon tulkinnasta tulee suorituskykyrasitetta Virhetilanteiden käsittely voi olla vaikeaa 52
Virheidenkäsittelyä Yksi mahdollisuus, oma erillinen virhevuo, normaali data ja virhedata erikseen (kuten unix-komentorivi Virhepuolella oma filter-osa, joka käsittelee saamansa syötteen ja toimii sen mukaan 53
Kääntely-jäsentely virheenkäsittelyn kera Konekielelle kääntö (machine code generator) Selaaja (scanner) Jäsentäjä (parser) Semanttinen tarkistus Semantic checker Tavukoodin tuottaminen (bytecode generator) optimointi konekieltä tavukoodi + + + virheet
Kysyttävää?
Palveluihin perustuvat arkkitehtuurityylit Oliot (1970-luku) olio lista lisää Käyttävä yksikkö poista 56
Palveluihin perustuvat arkkitehtuurityylit Komponentit (1980-luku) Suomenkielen tavutus komponentti Tavutusrajapinta Tekstijärjestelmä 57
Palveluihin perustuvat arkkitehtuurityylit Asiakas-palvelin (1990-luku) Palvelun pyytäjä Palvelun tarjoaja Palvelun pyytäjä Esim. EJB verkko 58
Palveluihin perustuvat arkkitehtuurityylit Service-Oriented Architecture (SOA) (2000-luku) kysyy palvelua Palvelurekisteri verkko rekisteröityy Palvelun pyytäjä palvelun saaminen Palvelun tarjoaja Esim. Web services 59
Palveluihin perustuvat arkkitehtuurityylit Palveluväylä (Enterprise Service Bus, ESB) Sovellus Sovellus Sovellus Sovellus Sovitin Sovitin Sovitin Sovitin Väylä - sovellukset tarjoavat palvelujaan väylän kautta - idea: viestin reititys riippuu viestistä -> ei synny riippuvuuksia sovellusten välille 60
SOA-henkisyyttä Itsenäisiä, itsenäisesti ylläpidettävissä & hallittavissa olevia komponentteja Ohjelmistojen koostaminen näistä Ei tiukkaan sidottuja yhteyksiä komponenttien välillä, viestien tms. käyttö kommunikaatiossa Helppo ketjuttaa komponenttien toimintoja jne. SOA ei välttämättä Oracle, Microsoft tms. järkäleen käyttöä 61
Asiakas-palvelin arkkitehtuurit Asiakas-palvelin arkkitehtuuri: järjestelmä koostuu jotakin resurssia kontrolloivista ja siihen liittyviä palveluja tarjoavista palvelimista (server) ja palveluja tarvitsevista asiakkaista (client). 62
Asiakas-palvelin arkkitehtuurit Palvelut tarjotaan istunnoissa, tiettyyn kokonaisuuteen kuuluvat palvelut annetaan saman yhteyden aikana kontrolloidusti (transaktioina) Asiakkaat ja palvelimet toimivat omissa prosesseissaan, tyypillisesti hajautettuina Asiakkaat ovat tyypillisesti omia sovelluksia, jotka eivät tunne toisiaan Palvelimet eivät tunne asiakkaita Palvelimet tyypillisesti hallinnoivat jotain resurssia tai tietovarastoa 63
Missä käyttäisit asiakaspalvelin arkkitehtuuria? 64
Esimerkkejä Tietovarastopalvelimet Sovelluspalvelimiin perustuvat järjestelmät Sähköpostiohjelmat (palvelin-pääteohjelma) Verkkosovellukset jne. Yleinen ratkaisutapa, REST-rajapinnat ja käyttäjät Suurin osa nykyisistä sovelluksista ja laitteista jollain tavalla asiakas-palvelinmallin mukaisia, yhteys johonkin nettipalveluun Symbian ja laitteiden näkyminen palveluina 65
Tietovarasto- ja sovelluspalvelimet Asiakas Asiakas Käyttöliittymä Sovelluskohtainen logiikka Sovellusaluekohtainen logiikka Palvelin Tietokanta Palvelin Käyttöliittymä Sovelluskohtainen logiikka Sovellusaluekohtainen logiikka Tietokanta 66
Asiakas-palvelin arkkitehtuurien edut ja ongelmat Etuja Helpottaa yhteisen resurssin hallintaa (esim. tietoturva) Helpottaa ylläpitoa ja muunneltavuutta (esim. palvelimen vaihto) Hyvä teknologinen tuki Ongelmia Verkkoliikenteestä johtuvat suorituskykyongelmat Palvelinkeskeisyys: kriittisen palvelimen vikaantuminen Poikkeusten käsittely 67
P2P: Peer to Peer Asiakas-palvelimen erikoistus Asiakkaat samalla palvelimia, perusasetelmassa tasa-arvoisia Resurssien jakoa, tieto, laskentateho, kaista jne. Virheherkkyys pienenee, resurssien jako mahdollistaa isompien asioiden suorittamisen joukkovoimalla (siirtonopeus, laskentateho, jne.) Myös hybridiversioita, joissa keskitetty palvelinpuoli ja lisänä asiakkaiden välillä p2p toimintaa 68
P2P: sovellusalueita Erilaiset tiedostojenjakosovellukset ja tekniikat (esim. Torrent) Hajautettu laskenta, esim. Bitcoin, (Seti at home) Botnetit Skype, keskitetty palvelin, puhelupuoli p2p:n avulla Spotify osa liikenteestä asiakkaiden avulla osa keskitetysti (siirtymässä pois) Toistensa kanssa kommunikoivat laitteet ja koneet 69
Miksi Spotify aloitti P2P:n kanssa? 70
Spotifyn lähestymistapa (josta luovuttu 2015 aikana) http://www.slideshare.net/ricardovice/spotify-behind-the-scenes 71
Spotifyn lähestymistapa 72
p2p: plussat ja miinukset +Vikasietoisuus, kaistan jne. resurssien jaon kautta säästöt, resurssien jaon helppous, skaalautuvuus -turvallisuus, tietoturva, palvelutason vaihtelu, monimutkaisempia toteutusratkaisuja (hybridimalli) 73
P2P ja Windows 10 Microsoft ja salakavala p2p Windowspäivitykseen kytkettynä 74
Internet of Things (IoT) 75
Esimerkkikoodia, P2P http://www.codeproject.com/articles/6379/generic-p-p-architecture- Tutorial-and-Example http://libtorrent.org/ https://developers.google.com/talk/libjingle/?csw=1 76
Yhteenvetoa Kerrosarkkitehtuuri osittaa järjestelmän käsitetasojen mukaan Tietovuoarkkitehtuuri osittaa järjestelmän työstämisvaiheiden mukaan Palvelupohjaiset järjestelmät ovat kehittyneet olioohjelmoinnista lähtien kohti palveluväyläratkaisuja ja pilvijärjestelmiä 77
Kysyttävää?