Suorituskykypatterneja Luento 12 58153003 Ohjelmistojen suorituskyky 1 Patterni Patterni (eli ratkaisumalli, pattern) kuvaa ohjelmistoratkaisun ytimen johonkin toistuvaan ongelmaan, joka esiintyy tietyssä kontekstissa Patternien vakiintunut esitysmuoto Nimi Ongelma Ratkaisu Ratkaisun hyödyt Muut seuraukset 58153003 Ohjelmistojen suorituskyky 2 Helsingin Yliopisto / Tktl 1
Suorituskykypatternit Ovat abstraktimpeja kuin (olio-)suunnittelumallit (design patterns) ja koskevat yleensä suurempaa osaa implementaatiosta Patterneissa sovelletaan yleisiä suunnitteluperiaatteita Yksi patterni voi perustua useampaan periatteeseen Ovat usein suoraan arkijärjellä helposti ymmärrettävissä (mutta helpommin sanottu kuin tehty ) Hyvien ratkaisumallien lisäksi on myös tärkeää tunnistaa usein toistuvia suorituskyvyn kannalta huonoja ratkaisuja Näitä on dokumentoitu anti-patterneina Seuraavassa käydään läpi joitakin suorituskyvyn kannalta oleellisia patterneja ja anti-patterneja 58153003 Ohjelmistojen suorituskyky 3 PATTERNEJA 58153003 Ohjelmistojen suorituskyky 4 Helsingin Yliopisto / Tktl 2
Fast Path (Oikopolku) Tavoitteena on vähentää dominoivien työnkuormien vaatimaa prosessointia Suhteellisen pientä osaa sovelluksen toiminnallisuudesta käytetään yleensä huomattavasti useammin kuin muita toimintoja Näiden työkuormat dominoivat sovelluksen resurssien käyttöä Sovelluksen suoritustehoa halutaan kasvattaa 58153003 Ohjelmistojen suorituskyky 5 Fast Path (Oikopolku) Keskitysperiaate (centering principle) neuvoo minimoimaan dominoivien työnkulkujen prosessointiin kuluvan ajan Yksi tapa minimoida suoritusaika on tarjota useimmin käytetyille toiminnoille vaihtoehtoinen, turhat väliaskeleet ohittava oikopolku (fast path) Heti toimintopolun alussa tiedetään, mitä asiakas haluaa, joten sitä ei tarvitse joka välissä erikseen kysyä 58153003 Ohjelmistojen suorituskyky 6 Helsingin Yliopisto / Tktl 3
Fast Path (Oikopolku) Esimerkiksi pankkiautomaatti tarjoaa heti PIN-koodin kyselyn jälkeen mahdollisuuden nostaa tietty summa tililtä (ylivoimaisesti yleisin toiminto) tai tehdä jotain muuta (muun nostettavan summan syöttö, saldokysely) Myös monet web-sivustot tarjoavat pikalinkkejä suosituimpiin sisältöihin tai toimintoihin heti lataussivulta Oikopolkuja voi tarjota myös dataan, eli pitämällä useimmin tarvittavat tietoalkiot käteismuistissa, jolloin niitä ei aina tarvitse hakea tietovarastosta asti Oikopolku voidaan myös luoda dynaamisesti ja adaptiivisesti käyttöhistoria huomioon ottaen 58153003 Ohjelmistojen suorituskyky 7 Fast Path (Oikopolku) Oikopolku perustuu keskitysperiaatteen soveltamiseen, mutta muutkin periaatteet sopivat itse oikopolun lyhentämiseen, esimerkiksi Paikallisuusperiaate (esim. ajallisesti lähekkäin tarvittava data samassa paikassa) Kysynnän minimointi Hyödyt Dominoivien töiden vastausaikojen lyhentäminen parantaa järjestelmän responsiivisuutta käyttäjän näkökulmasta Dom. töiden resurssien käytön vähentäminen voi lievittää resurssikilpailun negatiivisia vaikutuksia, mikä lyhentää muidenkin töiden vastausaikoja 58153003 Ohjelmistojen suorituskyky 8 Helsingin Yliopisto / Tktl 4
Muut seuraukset Fast Path (Oikopolku) Tarjottujen oikopolkujen on oltava relevantteja käyttäjien näkökulmasta, eli on tunnettava käyttäjien oikeat tarpeet ja tavat Käyttötavat voivat muuttua ajan myötä Sovellus on syytä instrumentoida niin, että tarjottujen oikopolkujen käyttöä voidaan seurata ja havaita käyttötapojen muutokset 58153003 Ohjelmistojen suorituskyky 9 First Things First (Tärkeimmät ensin) Ajan ollessa tiukalla, asiat pitää priorisoida ja varmistaa, että ainakin tärkeimmät tulevat hoidetuksi Ohimenevä ylikuormitustilanne voi aiheuttaa järjestelmän käsittelykapasiteetin ylittymisen Järjestelmä ei joko pysty käsittelemään kaikkia syötteitään (vaan hukkaa osan) tai pyyntöjen vastausajat venyvät kohtuuttoman pitkiksi Voi aiheutua vaaratilanteita tai taloudellisia menetyksiä 58153003 Ohjelmistojen suorituskyky 10 Helsingin Yliopisto / Tktl 5
First Things First (Tärkeimmät ensin) Asetetaan suoritettavat työt/tehtävät tärkeysjärjestykseen, ja tehdään tärkeimmät aina ennen vähemmän tärkeitä Jaa loogiset tehtävät, kuten syötetapahtuman käsittely, omiksi fyysisiksi tehtävikseen (säikeiksi tai prosesseiksi) Aseta fyysisten tehtävien prioriteetit vastaamaan loogisten tehtävien tärkeyttä 58153003 Ohjelmistojen suorituskyky 11 First Things First (Tärkeimmät ensin) Esimerkiksi reaaliaikajärjestelmissä säikeiden ja prosessien prioriteettien sekä säikeiden skedulointialgoritmien säätäminen on tärkeää tapahtumien käsittelyn kovien aikarajojen saavuttamiseksi Prioriteetit asetetaan yleensä staattisesti, mutta niihin voi liittyä dynaamisiakin piirteitä ( priority inheritance ) Skedulointialgoritmeilta ja tietorakenteilta voidaan vaatia tiettyjä ominaisuuksia, jotka mahdollistavat haluttujen aikarajojen saavuttamisen formaalin (matemaattisen) todistamisen Soveltaa keskitysperiaatetta kiinnittäessään huomion tärkeimpiin töihin 58153003 Ohjelmistojen suorituskyky 12 Helsingin Yliopisto / Tktl 6
First Things First (Tärkeimmät ensin) Hyödyt Varmistaa tärkeimpien töiden tulevan suoritetuiksi Ylikuormituksen sattuessa järjestelmän suoritus-kyky heikkenee hallitusti ja paranee vastaavasti tilanteen mentyä ohi Muut seuraukset Jos ylikuormitustilanne ei ole ohimenevä vaan jatkuva ilmiö, matalamman prioriteetin tehtävät voivat nälkiintyä tai jäädä jopa kokonaan suorittamatta Tässä tapauksessa suoritusympäristön tehoa täytyy lisätä tai töiden vaatimaan prosessoinnin määrää täytyy vähentää 58153003 Ohjelmistojen suorituskyky 13 Coupling (Rajapinta tehtävän mukaan) Kootaan loogisesti yhteen kuuluvat, usein yhdessä tarvittavat asiat yhden rajapinnan/apin kautta saatavaksi Huom- eri asia kuin kytkentä (coupling) modulaarisuuden indikaattorina! Monikerroksinen (esitys-logiikka-data) web-sovellus käyttää relaatiotietokantaa datan pysyvään säilytykseen Jos tietokannan taulujen rivit esitetään sovelluslogiikkakerrokselle sellaisenaan olioina, joiden attribuutit vastaavat taulun sarakkeita, olioiden attribuuttien käsittely (esimerkiksi oliorakenteen navigointi linkkien kautta) aiheuttaa helposti suuren määrän yksittäisiä tietokantakyselyitä Hajautetussa arkkitehtuurissa tietokantakutsut voivat olla pullonkaula Tietokannan sisäinen rakenne paljastuu myös suoraan logiikkakerrokselle, mikä luo voimakkaan riippuvuuden logiikkakerroksesta datakerrokseen ja sen toteutukseen 58153003 Ohjelmistojen suorituskyky 14 Helsingin Yliopisto / Tktl 7
Coupling (Rajapinta tehtävän mukaan) Koostetaan ja piilotetaan hienojakoinen toteutusrakenne rajapinnan/oliomallin taakse, joka tarjoaa käyttäjän tarpeisiin sopivan data-abstraktion Yhdessä käytettävät dataelementit kootaan samaan koosteeseen Koosteen välittävä toteutus huolehtii datan hausta ja päivityksestä tietovarastoon minimoiden hakujen määrän ja maksimoiden siirrettävän datan määrän Sovelletut periaatteet: kysynnän miminointi, paikallisuus, keskitys Esimerkki modernista ORM-ratkaisusta: Hibernate ORM (http://hibernate.org/orm/) 58153003 Ohjelmistojen suorituskyky 15 Coupling (Rajapinta tehtävän mukaan) Hyödyt Sovittaa tarjotun palvelun muodon sovellukseen semantiikkaan ja rajoittaa datakerroksen muutosten heijastusvaikutuksia logiikkakerrokseen Muut seuraukset Hyöty saadaan vasta, kun sovelluksen logiikka on vakiintunut (ei muutu), koska oikean rajapinnan määrittely vaatii jonkin verran työtä 58153003 Ohjelmistojen suorituskyky 16 Helsingin Yliopisto / Tktl 8
Flex Time (Aikajoustot) Joustavilla työajoilla pyritään Helpottamaan työntekijöiden yksityiselämän ja liiketoiminnan tarpeiden yhteensovittamista Tasaamaan inhimillisen ja yhteiskunnan (esim liikenne) kapasiteetin käyttöä ylikuormituksen välttämiseksi Monet toistuvat ja tietyin väliajoin tehtävät työt ajoittuvat suoritettavaksi samaan aikaan aiheuttaen kysyntäpiikin ja töiden ruuhkautumisen 58153003 Ohjelmistojen suorituskyky 17 Flex Time (Aikajoustot) Ajoitetaan ennakoitavat työt tapahtumaan eri aikoihin Jos jonkin toistuvan työn suoritushetkellä ei sinänsä ole merkitystä, pyritään ajoittamaan se hiljaiseen ajankohtaan (esim käyttäjän kotihakemiston varmuuskopiointi) tai tekemään se osittain ennakkoon (yhteenvetoraporttien jatkuva koostaminen) Jos työn ajankohdalla on merkitystä käyttäjälle (esim ajantasaisen raportin tuottaminen tuotantotietokannasta), mutta toimitusajassa on silti jonkin verran joustoa, järjestetään eri käyttäjille ja eri raporteille omat aikaikkunansa, jossa työ toteutetaan Raskaan periodisen työn suorituskykyimpaktia voidaan myös vähentää jakamalla iso työ pienempiin useammin suoritettaviin osatehtäviin 58153003 Ohjelmistojen suorituskyky 18 Helsingin Yliopisto / Tktl 9
Flex Time (Aikajoustot) Hyödyt Töiden tasainen ajallinen jakautuminen vähentää ruuhkaa rajallisilla resursseilla ja lyhentää siten odotusaikoja Isojen töiden jakaminen pienempiin osiin vähentää myös yksittäisen työn resurssien käyttöä, mikä edelleen lyhentää samanaikaisten töiden kokemia viiveitä Muut seuraukset Vaikutus perustuu töiden odotusaikojen lyhenemiseen; töiden skedulointi, niiden ennakoiva suorittaminen ja töiden pilkkominen saattavat kasvattaa resurssien kokonaiskäyttöä Töiden ajallisen hajautuksen onnistuminen on kriittinen tekijä Sovelletut periaatteet Taakan jakaminen, jaetut resurssit, kysynnän minimointi 58153003 Ohjelmistojen suorituskyky 19 ANTI-PATTERNEJA 58153003 Ohjelmistojen suorituskyky 20 Helsingin Yliopisto / Tktl 10
The god Class (jumalolio) Ohjelmassa on yksi olio, joka käytännössä vastaa suuresta osasta toiminnallisuutta ja joka delegoi vain vähäpätöisiä tukitehtäviä muille Olio on kontrollerin roolissa ohjaten merkittäviä tilamuutoksia ja suorituspolkujen valintaa ( kontrollifriikki ) Muut oliot ovat lähinnä tyhmiä dataobjekteja Toisenlainen jumalolio taas haluaa omistaa kaiken ohjelman datan ( dataholisti ) Suorituskykyä heikentävä vaikutus tulee siitä, että jumalolio on mukana kaikessa toiminnassa, jolloin olioiden välistä viestintää on tarpeettoman paljon Vaikutus korostuu hajautetussa arkkitehtuurissa viestiviiveen takia 58153003 Ohjelmistojen suorituskyky 21 The god Class (jumalolio) Refaktoroidaan rakenne siten, että päätösvalta ja data jakautuu tasaisemmin ja roolinmukaisesti ohjelman keskeisten olioiden välillä, hyviä oliosuunnittelun periaatteita noudattaen (esimerkiksi Responsibilitydriven Design http://en.wikipedia.org/wiki/responsibilitydriven_design) Sovelletaan paikallisuusperiaatetta kapseloimalla data, päätökset, operaatiot ja niiden tila asianmukaisiin olioihin 58153003 Ohjelmistojen suorituskyky 22 Helsingin Yliopisto / Tktl 11
Circuitous Treasure Hunt (vihjepeli) Löytääkseen jonkin tietyn datan, asiakas tekee ensin tietokantahaun yhteen tauluun ja käyttää sitten saamaansa vastausta muodostaakseen uuden kyselyn johonkin toiseen tauluun; tätä jatkuu, kunnes asiakas lopulta löytää hakemansa datan Vaikutus suorituskykyyn on suuri varsinkin jos tietokantapalvelin sijaitsee eri verkkosolmussa kuin asiakas Sama ilmiö voi esiintyä myös muistissa olevien oliorakenteiden käsittelyssä, jos jonkin tiedon hakeminen vaatii ensin pitkän linkkiketjun (assosiaatioiden) seuraamista oliosta toiseen halutun datan löytämiseksi ja sitten paluuta samaa polkua vastauksen palauttamiseksi hakijalle (metodikutsut, muistin hallinnan operaatiot) 58153003 Ohjelmistojen suorituskyky 23 Circuitous Treasure Hunt (vihjepeli) Esimerkiksi 4. luennolla käsitellyssä ICADesimerkissä (Arkkitehtuuri 1, diat 12-13), jokainen kulmapiste oli tallennettu omana kolmesta kokonaisluvusta ja tunnisteesta koostuvana tietueenaan Jokaista tietokannasta haettua palkkia kohden joudutaan siis tekemään 2 muuta kyselyä sen kulmapisteiden hakemiseksi toisesta taulusta Koko mallin hakemiseksi tietokannasta joudutaan tyypillisessä 2000 palkin tapauksessa tekemään 1 + 2000 + (2 * 2000) = 6001 kyselyä 58153003 Ohjelmistojen suorituskyky 24 Helsingin Yliopisto / Tktl 12
Circuitous Treasure Hunt (vihjepeli) Valitaan datan tallennusrakenne siten, että tilaa koskeva paikallisuus paranee Esimerkiksi ICAD-tapauksessa, kulmapisteiden paikkakoordinaatit voitaisiin tallentaa suoraan sarakkeina (kenttinä) palkkitauluun Tämä vähentää datan hakuun tarvittavien kyselyjen määrää 4000:lla (66%) Tai järjestetään vaihtoehtoisia, suorempia saantipolkuja dataan Huomaa, että tällaisella tallennusrakenteen optimoinnilla voi olla negatiivista vaikutusta muihin järjestelmän ominaisuuksiin ja toimintoihin Esimerkin tapauksessa muun muassa talletettavan datan määrä voi kasvaa, koska päistään yhteen liitetyt palkit eivät voi jakaa samaa kulmapistettä 58153003 Ohjelmistojen suorituskyky 25 The One-Lane Bridge (yksikaistainen silta) Vain yksi tai muutama prosessi kerrallaan voi käyttää jotakin kriittistä resurssia (exclusive access, yksinkäyttöoikeus), mikä aiheuttaa muiden sillalle pyrkivien prosessien jonoutumista ja sens vapautumisen odottelua Järjestä vaihtoehtoisia reittejä vähentämään eksklusiivisen resurssin kysyntää Esimerkiksi Pyri hajauttamaan kriittisen tietokantataulun päivitykset eri osiin taulua rivien lukitsemista aiheutuvien viiveiden lyhentämiseksi Kerää samanaikaiset muutokset erillisiin väliaikaisiin tauluihin, jotka konsolidoidaan myöhemmin master dataan 58153003 Ohjelmistojen suorituskyky 26 Helsingin Yliopisto / Tktl 13