<?xml version="1.0" encoding="ISO-8859-15"?>
<rss version="2.0"><channel>
<title>yksinkertainen integraatioarkkitehtuuri</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/</link>
<description>Recent changes in yksinkertainen integraatioarkkitehtuuri</description>
<item><title>yksinkertainen integraatioarkkitehtuuri</title>
<link>http://sange.fi/~atehwa/cgi-bin/piki.cgi/yksinkertainen%20integraatioarkkitehtuuri</link>
<guid>http://sange.fi/~atehwa/cgi-bin/piki.cgi/#1453967207</guid>
<description>&lt;p&gt;&lt;ins&gt;(nettipäiväkirja 28.01.2016) Luin tässä taas yhtä kirjoitusta 
(http://www.enterpriseintegrationpatterns.com/patterns/messaging/Integra
tionStylesIntro.html), jossa rajapintaviestintää pidetään jotenkin 
"hienompana" (tällä kertaa ''more sophisticated'') kuin jaettua 
tietokantaa. Molemmat ovat vastauksia ongelmaan: miten useampi ohjelma 
pystyy käyttämään samoja tietoja, niin ettei samoja tietoja tarvitse 
pitää yllä kahdessa paikassa. Mutta tiedon konsistenssista on 
huomattavasti helpompaa huolehtia yhdessä paikassa kuin useammassa, ja 
rajapinnoitse keskenään keskustelevien ohjelmien jatkokehitys ja 
testaaminen on usein sokkeloista, kun testiympäristöissä tarvitaan eri 
tavoin toisiinsa liitettyjä versioita näistä hajautetuista 
ohjelmaympäristöistä.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Niinpä ajattelin dokumentoida sellaisen integraatiorakenteen, 
joka on yksinkertaisuutensa vuoksi saavuttanut koko ajan lisää suosiota 
viime aikoina (ks. esim. [Pycon Finland 2015], "Viestiloki sovelluksen 
pohjana"). Tässä rakenteessa pointti on se, että kaikille yhteistyötä 
tekeville ohjelmille (tai palveluille) on kaksi yhteistä tietovarastoa: 
tietokanta ja viestiloki. Tietokanta sisältää tiedon "vallitsevasta 
tilanteesta". Aina, kun jokin ohjelma haluaa tietää, miten jokin 
''on'', se kääntyy tietokannan puoleen ja lukee tiedon sieltä. 
Viestiloki taas sisältää tiedon "ajankohtaisista tapahtumista". Aina, 
kun jokin ohjelma haluaa tietää, mitä kaikkea uutta on tapahtunut, se 
lukee viestilokista uudet viestit. (Viestilokin ja tietokannan voi toki 
toteuttaa rajapintapalveluina, jos haluaa niille toteutusriippumattoman 
rajapinnan.)&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Näiden kahden keskeisen palvelun suhde on se, että 
tietokantapäivitykset ovat tapahtumia ja niinpä on oltava ainakin yksi 
palvelu, joka lukee tietokantapäivityksiä viestilokista ja toteuttaa ne 
tietokantaan. Voi vielä tehdä niin, että sama palvelu sitten tiedottaa, 
että tietty muutos on tehty, niin tietoja seuraavat ohjelmat voivat 
päivittää tietonsa tietokannasta.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Aina asioita ei tarvitse tehdä näin monimutkaisesti, mutta jos 
joskus huomaat, että käytännössä jokainen tietokantamuutos pitäisi 
kertoa myös palveluille X ja Y (esimerkkejä: audit-lokitus, valmiiksi 
rendattujen www-sivujen cache, käyttöraportointi, ...) niin yksi 
keskitetty viestiloki alkaa tulla yksinkertaisemmaksi kuin laittaa 
jokainen muutoksia tekevä ohjelma ottamaan yhteyttä jokaiseen muutoksia 
kuuntelevaan ohjelmaan.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;Mutta sen sijaan keskitetty tietokanta on olennaista, jotta 
sovellusten arkkitehtuuria voi yksinkertaistaa. Se ratkaisee kerralla 
hyvin monta asiaa: antaa sovelluksille yhteisen tietomallin, antaa 
hyvät ja hyvin dokumentoidut välineet tietojen kyselyyn, ja huolehtii, 
että kaikki ohjelmat näkevät samat tiedot (lisäksi se huolehtii näiden 
tietojen eheydestä). Oikeastaan ainoa syy olla käyttämättä jaettua 
tietokantaa on nähdäkseni se, jos ei pysty: jos esimerkiksi käyttää 
jotain pilvipalvelua, joka on täysin naimisissa oman tietokantansa 
kanssa.&lt;/ins&gt; 

&lt;p&gt;&lt;ins&gt;* [merkintä: 2016-01] * [atehwa] * [kategoria: 
päiväkirjamerkintä]&lt;/ins&gt;

</description>
<pubDate>Thu, 28 Jan 2016 07:46:47 +0000</pubDate>
</item>

</channel></rss>
