tehokkaat eräohjelmat
DESCRIPTION
Tehokkaat eräohjelmat. Osuuspankkikeskus Ville Hurmalainen. Eräajot, mitä kiinnostavaa?. Vähiten arvostettu, mutta käytännössä tärkein tapa käsitellä tietoa Ei mitään ”hörhöilyä”, vain tärkeimmät uutuudet tuodaan myös eräajoympäristöihin Suuria haasteita 24/7 käyttövaatimusten takia - PowerPoint PPT PresentationTRANSCRIPT
Tehokkaat eräohjelmat
OsuuspankkikeskusVille Hurmalainen
Eräajot, mitä kiinnostavaa?
• Vähiten arvostettu, mutta käytännössä tärkein tapa käsitellä tietoa
• Ei mitään ”hörhöilyä”, vain tärkeimmät uutuudet tuodaan myös eräajoympäristöihin
• Suuria haasteita 24/7 käyttövaatimusten takia
• Siksi juuri sopiva aihe ylemmän ammattikorkeakoulututkinnon opinnäytetyöksi
Ylempi ammattikorkeatutkinto
• Ylempi ammattikorkeakoulututkinto tarkoitettu työelämässä oleville korkeakoulututkinnon suorittaneille, jotka haluavat syventää ja laajentaa erikoisosaamistaan.
• Ylempi ammattikorkeakoulututkinto tuottaa saman kelpoisuuden julkiseen virkaan kuin yliopistoissa ja muissa tiedekorkeakouluissa suoritettu ylempi korkeakoulututkinto.
• Ylempien ammattikorkeakoulututkintojen laajuus on 60 - 90 opintopistettä. Kokopäiväisesti opiskellen opinnot kestävät vuodesta puoleentoista vuoteen.
• Virallinen titteli: Tradenomi (ylempi AMK), englannin kielinen tutkintonimike Master of Business Administration eli MBA
• Itselläni meni työn ohessa suoritettuna 4 vuotta.
Opinnäytetyö
• Ylemmän ammattikorkeakoulututkinnon opinnäytetyö tehdään työelämän lähtökohdista
• "Tavoitteena tehokkaat eräajot" liikkeelle Autoturvajärjestelmän suurien uudistusajojen tehovaatimuksista
• Tehoa tutkittu seuraavista näkökulmista– laitteistot– tiedonhallintaohjelmistot– sovellusohjelmointi
The Hardware
LaitteistotTallennus- väline
Hakuaika Kapasiteetti
Hinta Pysyvyys
Rekisteri 1 nsek < 1 KB Erittäin kallis
Ei pysyvä
Cache 2 nsek 4 MB Erittäin kallis
Ei pysyvä
Keskusmuisti 10 nsek 512 – 4096 MB
Kallis Ei pysyvä
SSD-muistilaitteet
4 msek 64 - 256 GB Melko kallis
Pysyvä
Levylaiteet 10 msek 200 - 1000 GB
Edullinen
Pysyvä
Magneetti- 100 s 400 – 800 GB
Halpa PysyvänauhatTaulukko 1. Muistilaitteiden ominaisuudet (Tannenbaum, 2008, 23 - 25).
Levy ja SSD muistit
Kuvassa esitetään SSD laitteiden hajalukemisen teho verrattuna levylaitteisiin. Kuvasta käy ilmi, miten lukeminen hajajärjestyksessä (oikealla) on paljon tehokkaampaa SSD laitteilla verrattuna kovalevyihin. Vasemmalla kuvataan, miten kirjoittaminen hajajärjestyksessä on edelleen tehokkaampaa perinteisillä kovalevyillä .
Tehokkuuden saavuttamiseksi I/O operaatioiden vähentäminen on olennaista, sillä keskusmuisti on kuitenkin paljon nopeampaa. ”Electrons move faster than disk heads”(Clevinger, 2005).
Muisti
• Keskusmuisti– 64 bittiä tarjoaa teoriassa 16 exatavua,
käytännössä paljon vähemmän• Sivuuttaminen
– Eräajoille paha juttu– Trashing = tukehtuminen sivuuttamiseen
CPU
• Ei oikeastaan ole ollut vuosiin mikään pullonkaula taloushallinnollisessa tietojenkäsittelyssä– "Intel giveth, Microsoft taketh away"– Lähinnä kustannuskysymys– keskuskoneratkaisuissa hyvinkin selkeä kipupiste
Eräajot, verkko ja ”pilvi”
• Yksittäisen tiedoston suurin siirtonopeus voi olla hyvinkin suuri, mutta…
• Pilvipalvelut sittenkin eräepäystävällisiä– Siirtoviive, eli siirtopalvelun käynnistämiseen kuluva on
suuri, 10 – 100 ms. – Käytännössä eräajot eivät pysty käyttämään palveluita
”pilven” ylitse• poikkeus: toimii, jos prosessointi hajautetaan ja siirrettävä aineisto
jaellaan isoina kokonaisuuksina (Google - Map Reduce)
Tiedostojärjestelmät
• Peräkkäistiedostot ovat erittäin nopeita, mutta voivat yllättää, kun– levyjärjestelmässä vapaa tila pirstoutunut– tiedoston tilavaraus ei kunnolla tiedossa ja
lisävaraukset epäkäytännöllisen kokoisia• Google käyttää tietomassojensa käsittelyyn
yksinomaan tiedostoja - ei tietokantoja– Hajautettu MapReduce menetelmä
Death by Random I/O
• Tilanne, jossa hyvin suuri tietomassa käydään lävitse yksinomaan hajalukua käyttäen
• Oliotekniikoilla toteutetuissa eräohjelmissa, yleinen– John Cambell (IBM) kuvailee näitä ohjelmia
”luupissa” pyöriviksi tosiaikatapahtumiksi. – Yleismoduulit toteutettu usein tällä mallilla
Yhteenveto laitteista
• SSD muistilaitteet lupaavia– mutta edelleen kalliita– kirjoittaminen hidasta
• Levylaitteet "still going strong"– hajakäsittelynopeus jatkuvasti heikko– suurien peräkkäistietomassojen käsittely nopeaa
• Keskusmuisti– nopeuden kannalta tärkein komponentti
Virittämisen muistilista1. Varmistettava, että ajoympäristö on konfiguroitu
kunnolla2. Sijoitetaan mahdollisuuksien mukaan tiedot
keskusmuistiin3. Säännölliset huoltotoimenpiteet (Tree R's)4. Vähennetään ja optimoidaan I/O operaatiot5. Jaetaan työ rinnakkaisiin prosesseihin6. Varautuminen ohjelma- ja laitteistohäiriöihin7. Ohjelmistojen tehostaminen
Tietokannan huoltotoimenpiteet
• Bonnie Bakerin tärkein ohje DB2:lle on englanninkielessä tunnetut perustaidot ”reading, 'riting and 'ritmetics” (lukeminen, kirjoittaminen ja laskento), tree R's eli kolmen ärrää:– REORG (Reading) - uudelleenorganisointi– RUNSTATS (’Riting)- tilastointi– REBIND (’Ritmetics) - uudelleensidonta
Tehostaminen näkökulmat
• Tehostuksessa monta näkökulmaa1. Ylläpidollinen minimointi2. Vasteajan minimointi3. CPU:n minimointi
• yhden näkökulman suunnalta tehostaminen voi aiheuttaa toisen kustannuksen nousun
• tässä lopputyössä ajattelumalli oli täsmälleen vastakkaisessa järjestyksessä
Lukitukset
• Aikaisemmin meillä oli eräikkuna, yksinomaan eräajoille pyhitetty aikajakso– mahdollisti taulujen lukitsemisen yhdelle eräajolle
• tehostaa ajoja• yksinkertaistaa logiikkaa
• Nyt vaatimuksena on 24 x 7 käytettävyys– joko sivutason lukitukset– tai optimistinen aikaleimapohjainen lukitus
Lukitusstrategioiden vertailu
• Sivulukot ovat suositeltavia, kun kantaa käytetään kiivaasti (paljon online-käyttöä)
• ei päivitysten peruuttamista• vähemmän prosessointia• odottavista tapahtumista
suuri osa menee läpi
• Optimistinen lukitus on suositeltavaa, kun päivittäjiä on vähän
• kanta lukukäytössä kaiken aikaa
• mahdollistaa prosessoinnin useammalla peräkkäisellä stepillä
Ohjelmoinnin ajatusmallit
• Imperatiivinen paradigma• "ensin tee näin ja sitten näin"• perinteinen ohjelmointi.
• Funktionaalinen paradigma• "ratkaise yhtälö ja käytä tulosta hyväksi"• kaikki ohjelmat ovat funktioita ja koostuvat funktioista
• Looginen paradigma• "tulos löytyy käymällä säännöt ja faktat lävitse"• SQL kieli noudattaa tätä paradigmaa
• Olio-orientoitunut paradigma• "lähetä viestejä eri olioiden välillä, näin muuttaen niiden tiloja"
Olio-paradigma• Miten tietokantakäsittely
sijoittautuu olio-paradigman mukaisessa mallissa (Bjerg Jensen, 2006).
• Huomionarvoista tässä kuvassa on se, että resurssikerros on kokonaan alistettu liiketoimintakerrokselle. – Tämä on esteenä
resurssien kokonaisvaltaiselle optimoinnille.
The Real Thing
DB2 tehovinkkejä (1)• Käytä LOAD apuohjelmaa, jos voit
– LOAD … SHRLEVEL CHANGE vastaa toiminnallisesti lähes täysin ohjelmaa, jossa olisi INSERT + COMMIT lausepareja
• käyttökelpoinen vaikka keskellä päivää• nopeampi - mittausten perusteella 1/5 itse kirjoitetusta.• vie paljon vähemmän CPU:ta (toki aito LOAD vielä tuplasti
parempi)• Indeksitön aputaulu
– taulu, jossa ei indeksejä, on käytännössä peräkkäistiedosto.
• INSERT nopeus jopa kaksinkertainen, myös CPU kustannus puolitettu
• tilapäiseen tiedon tallentamiseen, kirjoitus esim. CICS tapahtumista ja käsittely eräajossa.
DB2 tehovinkkejä (2)
• Tiedon hakeminen käyttämällä RID:ä. – jos johonkin tietoon pitää palata uudestaan,
voidaan se hakea käyttämällä RID-tunnistetta.• SELECT from DELETE, UPDATE tai INSERT
– ohjelmassa voidaan samalla lauseella lukea ja poistaa tietoa
• DELETE + SELECT + INSERT ei sentään toimi– jos olisi toiminut, olisi saanut tehtyä MOVE-lauseen…
DB2 tehovinkkejä (3)
• Multi row FETCH– ohjelmallisesti vähän kömpelö toteuttaa– pitkällisen analysoinnin jälkeen vakuutusjärjestelmissä
vähän kohtia, jossa kannattaisi ottaa käyttöön (työmäärä vs säästöt)
– multi row SELECT voisi olla oikeasti näppärämpi
• singleton SELECT…FIRST 1 ROW ONLY– tälle löytyy paljon käyttöä– yksinkertaistaa koodia– ei kuitenkaan tuettuna GEN-kehittimessä vielä
Tietokannan rakenne
• Eräajolle sopiva kannan rakenne– Cluster-järjestys käsittelyjärjestys– mahdollisimman paljon INSERT only piirteitä
• kun ajo on käsitellyt materiaalin, niin uudet lisäykset voitaisiin yksikertaisesti lisätä LOAD/SHRLEVEL CHANGE stepillä kantaan
• jos kannassa detaljiriveistä riippuvaisia tietoja, niin tällöin voidaan joutua merkitsemään rivit keskeneräisiksi
– esimerkiksi summarivit voidaan päivittää vasta kun kaikki detaljirivit kannassa - keskeneräinen tilanne on epäeheä
Eräajon rakenne
Lukitseminen: aikaleimapohjainen optimistinen lukitus
Lukeminen: yksinomaan kannan cluster järjestyksessä
Käsitteleminen: yksittäinen tapaus ladataan muistiin tiedostosta ja INSERT sekä UPDATE tiedot kirjoitetaan tiedostoon
Päivitys: pääosin LOADilla javiimeistely ohjelmallisilla UPDATE lauseilla. Ne vakuutussopimukset, joihin on koskettu ohjelman alkuaikaleiman jälkeen, jätetään ennalleen.
Ositettu eräajo• Jako useampaan steppiin järkevää
– testaaminen helpottuu– kannan palautusta ei tarvita missään muualla kuin
viimeisissä päivityksiä ja lisäyksiä tekevissä stepeissä
– testitiedostojen monistaminen helppoa• vaikein osuus, itse uudistaminen, pyörii
käytännössä lähes ilman tietokantaa– ajoja voidaan testata vaikka rinnakkain
Autoturvan eräajot (1)
Autoturvan eräajot (2)
• Onnistunut kokonaisuus– vaikka online-osaajille haastava ajattelutavan
muutos– vaatii ja vaatisi enemmän kouluttamista
• Ei kuitenkaan vallankumousta– Laskutus- ja reskontra palvelut, joita on pakko
käyttää päivittävässä stepissä, on kallis
Pohdiskelua
Miksi vain vähän hyviä eräajoja (1)
• Olio-ohjelmoinnin periaatteet• Äärimmilleen vedetyt projektit /
rakentamiskustannuksien minimointi• Valmisohjelmissa ei varauduta suuriin
massoihin• Modulaarisissa ratkaisuissa painopiste online-
toiminnoissa– eräohjelmat saavat luvan käyttää valmiita
moduuleita, jotka sopivat huonosti eräkäyttöön
Miksi vain vähän hyviä eräajoja (2)• Taloudellinen lyhytnäköisyys
– elinkaaren aikaisia kustannuksia ei haluta ymmärtää– luullaan, että lisäämällä rautaa ongelmat poistuvat:
"Mooren laki" ratkaisee kaiken– ulkoiset toimittajat ja tarjouskilpailut: "halvimmat
tietojärjestelmät, maksoi mitä maksoi".• Maksaja eli liiketoiminta haluaa päättää ITSE
– mutta ei oikeasti osaa IT-teknologiaa– haluttomuus nähdä faktoja, jotka osoittavat
päätöksenteossa tulleita virheitä– rohkeutta korjata huonoja päätöksiä puuttuu (ja paljon)
Käyttökulut vs rakentamiskustannukset
Ohjelma IS30Koostuu 53 moduulistaKunkin moduulin keskimääräinen koko on 60 riviäOhjelman yhteenlaskettu rivimäärä 31801000 rivin keskimääräinen hinta 5000 €Koodauskustannus n. 16.000 €Muu projektityö n. 32.000 €
Rakennuskustannukset n. 48.000 €Käyttökustannukset kuukaudessa 1.550 €.Sovelluksen arvioitu käyttöikä on 20 vuotta.
Käyttökustannukset n. 372.000 €Järjestelmän ylläpito 3.000 € vuodessa.
Ylläpito n. 60.000 €YHTEENSÄ 432.000 €
Kokonaiskustannukset (1)
• Verrataan online moduuleista rakennettua eräohjelmaa ja valmiiksi erätehokkaaksi rakennettua ohjelmaa:Eräajotehokas ohjelmisto 11.300 riviä
Uudelleen käytettävät erä-I/O moduulit 4.800 riviäPäivitys ja lukitus logiikka 800 riviäVarsinainen logiikka 5.700 riviä
Tosiaika-moduuleista koottuna 11.860 riviäTosiaika I/O moduulit 6.160 riviäVarsinainen logiikka 5.700 riviä
Kokonaiskustannukset (2)
• Verrataan online moduuleista rakennettua eräohjelmaa ja valmiiksi erätehokkaaksi rakennettua ohjelmaa:
Tehokkaan eräajon kustannukset verrattuna tosiaika-moduuleista koottuun.Hankintahinta +10 % -4.800 €Käyttökustannukset -80 % +297.600 €Kokonaiskustannukset -69 % +292.800 €
Muita juttuja
Googlen MapReduce?• Osa NoSQL hypeä
– NoSQL tarkoittaa yleisesti ei-relaationaalisia tietovarastoja• Patentoitu (!) framework
– Map -steppi tuottaa lajitellun tiedoston– Reduce -steppi lomittaa tiedostot ja kirjoittaa tulosjoukon
tiedostoon, mahdollista jatkokäsittelyä varten• Työ voidaan jakaa valtavaan määrään rinnakkaisia ja
peräkkäisiä prosesseja, framework sisältää logiikan, jolla hallitaan työn sisäisiä riipuvuuksia
• Hadoop on Javalla toteutettu open source projekti, joka hyödyntää samaa periaatetta.