Aapo Puhakka
13.5.2004
http://aapo.iki.fi
Väliohjelmistoiksi tai middleware-ohjelmistoiksi kutsutaan palvelinkoneella ajettavia ohjelmistoja, jotka toimivat käyttöliittymää hallinnoivan ohjelman ja tiedon tallennuksesta ja säilytyksestä vastaavan ohjelman välissä. Käyttöliittymänä voi toimia esim. graafinen käyttöliittymä (kuten perinteisissä Windows-sovelluksissa), selainkäyttöliittymä tai kännykkäkäyttöliittymä. Tiedon tallennuksesta ja hallinnasta vastaa tietokantaohjelmisto. Väliohjelmistoja kutsutaan myös sovelluspalvelimiksi. Sovelluspalvelimia voi olla useita ja ne voivat keskustella keskenään, jolloin tietty sovelluspalvelin ei välttämättä itse ole yhteydessä käyttöliittymäohjelmistoon tai tietokantaan.
Väliohjelmiston rooli tulee ehkä selkeimmin esille verrattaessa sitä 90-luvun johtavaan tietojärjestelmäarkkitehtuuriin eli asiakas/palvelinohjelmoistoihin. Tässä mallissa asiakas eli käyttöliittymä on suoraan yhteydessä palvelimeen eli tietokantaan. Sovelluspalvelinta käytettäessä käyttöliittymä ei saa suoraan ottaa yhteyttä tietokantaan vaan kaiken keskustelun on käytävä sovelluspalvelimen kautta.
Sovelluspalvelimen avulla saavutetaan monia etuja asiakas/palvelin -malliin verrattuna rakennettaessa monimutkaisia tietojärjestelmiä. Ehkä merkittävin etu on ohjelmistorakenteen muuttuminen järjestelmällisemmäksi ja helpommin ylläpidettäväksi. Käyttöliittymäohjelman tehtävänä on pyörittää käyttöliittymää. Se ei saa ottaa kantaa tietokantarakenteeseen, tiedon hakuun tai talletukseen eikä tehdä monimutkaisia ja järjestelmän toiminnan kannalta kriittisiä laskentaoperaatioita. Nämä asiat siirtyvät sovelluspalvelimen vastuulle.
Useiden samanaikaisten käyttäjien hallinta on melko suoraviivaista tavallisin rinnakkaisohjelmoinnin keinoin kunkin käyttäjän ollessa yhteydessä samaan sovelluspalvelimeen. Uusien, erityyppisten käyttöliittymien rakentaminen nopeutuu keskeisen toiminnallisuuden ollessa jo valmiiksi toteutettuna väliohjelmistossa.
Väliohjelmistojen haittapuolena voidaan pitää niiden lisäämää työmäärää ja opeteltavien asioiden määrää pienissä ohjelmistoissa. On tehty kokeita, joissa eri opiskelijaryhmät on laitettu toteuttamaan samantyyppisiä tietojärjestelmiä väliohjelmiston kanssa ja ilman. Ilman väliohjelmistoa toimineet ryhmät ovat saaneet enemän toiminnallisuutta aikaiseksi nopeammin. Monimutkaisissa järjestelmissä sovelluspalvelinten hyödyllisyydestä ei kuitenkaan vallitse kovin suurta erimielisyyttä.
Väliohjelmistoille soveltuvana uutena roolina pidetään eri tietojärjestelmien ja tietokantojen yhdistämistä. Voidaan toimia joko siten, että sama sovelluspalvelin hakee tietoa useista tietokannoista ja yhdistää ne samaksi, luontevasti käyttöliittymässä esitettäväksi soveltuvaksi kokonaisuudeksi. Vastaavasti sovelluspalvelin voi tallettaa käyttöliittymältä saapuvat tiedot useampaan tietokantaan. Tällainen toimintatapa on luonteva, jos tietokannat on alunperin suunniteltu suoraan käsiteltäviksi eli asiakas/palvelin -arkkitehtuuria varten.
Jos yhdistettävät tietojärjestelmät on suunniteltu siten, että jokaisella on oma sovelluspalvelin, joka yksinomaan vastaa tietokannan käytöstä ja eheydestä, ei ole hyvä päästää sovelluspalvelimia koskemaan toistensa tietokantoihin. Raportointitarkoituksissa, joissa tietoa ei muuteta, näin voitaisiin tehdä tietokannan rikkumatta, mutta tällöin ohitetaan toiseen sovelluspalvelimeen rakennetut tietosuoja- ja tietoturvatarkistukset. Tällaisessa tapauksessa onkin parempi asettaa sovelluspalvelimet keskustelemaan keskenään. Keskustelun muoto voi olla sama, kuin käyttöliittymän ja sovelluspalvelimen välillä tai tarkoitusta varten voidaan rakentaa oma keskustelutapa.
Väliohjelmistoja voitaisiin käyttää järjestelmien luotettavuuden ja saatavuuden parantamiseen. Sovelluspalvelin voi välittää muutospyynnöt samalla kertaa useammalle tietokannalle. Tällöin yksittäisen tietokantapalvelimen rikkoutuessa tai yhteyden siihen katketessa voidaan toimintaa jatkaa jopa ilman käyttökatkosta muiden tietokantapalvelinten avulla.
Jotta tietokannan monistamisesta saataisiin täysi hyöty irti, pitäisi myös sovelluspalvelimet monistaa. Tällöin sovelluspalvelinten pitäisi välittää keskenään tilatietoa ainakin kriittisistä lukituksista. Lukitusten täydellinen ja yksikäsitteinen hallinta voi vaatia pääsovelluspalvelimen, josta muodostuu uusi heikko lenkki. Pyrittäessä arkkitehtuuriin, jossa ei ole mitään yksittäistä heikkoa lenkkiä, täytyneekin ottaa lähtökohdaksi, että minkään tilatiedon ei ole pakko olla yksikäsitteistä. Eri sovelluspalvelimilla voi olla ristiriitaista tietoa esim. lukituksista; näiden ristiriitojen sovittamiseksi vain täytyy olla täsmälliset menettelyt suunniteltuina.
Palveluiden monistamista voidaan käyttää myös suorituskyvyn parantamiseen. Periaatteessa on kuviteltavissa arkkitehtuuri, jossa käyttäjämäärien kasvun aiheuttama kuormitus voidaan hoitaa yksinkertaisesti vain lisäämällä palvelimia. Ongelmaksi ja pullonkaulaksi tässä muodostuu tietokantojen suorituskyky muutoslauseiden suhteen. Hakulauseet voidaan jakaa eri palvelimille, mutta kaikkien pitäisi suorittaa muutokset. Tätä ongelmaa ei voitane ratkaista muutoin, kuin luopumalla tiedon yhdenmukaisuuden vaatimuksesta eli kehittämällä ristiriitaisuuksien ratkaisutapoja.
Palvelinten monistaminen tarjoaa suojaa laitteisto- ja käyttöjärjestelmävirheiltä - ei niinkään väliohjelmistoissa itsessään olevilta virheiltä. Tähän ongelmaan voidaan tuoda apua rakentamalla testausohjelmistoja. Yhtenä väliohjelmiston käyttöliittymänä voitaisiin nähdä testiohjelmisto, jonka tehtävänä on varmistaa sovelluspalvelimen toiminnan oikeellisuutta. Testiohjelmistoon voitaisiin ohjelmoida yleisten testien lisäksi esimerkkitapaukset kaikista palvelimessa havaituista virheistä, millä voitaisiin estää samojen virheiden toistuminen.
Väliohjelmistojen tarkoituksena on irrottaa tietokantakäsittely, monimutkaiset laskenta-algoritmit ja rinnakkaisuuden hallinta käyttöliittymäohjelmista, jolloin kokonaisuudesta saadaan toimintavarmempi ja helpommin ylläpidettävä. Väliohjelmistojen haittapuolena on osaamiskynnyksen kasvu.
Väliohjelmistoja voidaan käyttää myös erilaisten tietojärjestelmien yhdistämiseen, joko tietokantatasolla tai sovelluspalvelinten välisen keskustelun avulla. Väliohjelmistoja voidaan käyttää apuna palvelinten monistamisessa. Palvelinten monistamisen tarkoituksena on joko järjestelmän luotettavuuden tai suorituskyvyn parantaminen. Palvelinten monistamisessa on odotettavissa yläraja, jonka jälkeen täytyy luopua täydellisestä tiedon yksikäsitteisyydestä ja eheydestä ja pureutua ristiriitatilanteiden ratkaisemiseen.
Väliohjelmistot tarjoavat myös houkuttelevia mahdollisuuksia ohjelmistojen luotettavuuden parantamiseen testausautomatiikalla. Näiden väliohjelmistojen hyvien puolien ja mahdollisuuksien valossa pitäisin todennäköisenä, että väliohjelmistojen suosio tulee jatkumaan monimutkaisten tietojärjestelmien rakentamisessa.