Artikkelit

Palveluväylään lisää tehoa – kuormantasaajan käyttö mahdolliseksi

Suorituskykyä ja toimintavarmuutta lisää

Suomi.fi-palveluväylään liitettävien palveluiden suorituskykyä ja toimintavarmuutta voidaan jatkossa merkittävästi parantaa, kun seuraava palveluväylän versio (versio 6.16.x) julkaistaan syksyllä. Uudessa versiossa on mahdollista käyttää ulkoista kuormantasaajaa tasaamaan liityntäpalvelinten kuormitusta. Tämä tarkoittaa sitä, että liityntäpalvelimia voi olla useita. Tällöin ne kaikki tarjoavat saman palvelun palveluväylään mutta väylän suuntaan ne näkyvät kuitenkin vain yhtenä rajapintana. Ulkoinen kuormantasaaja huolehtii rajapinnassa siitä, että viestiliikenteen kuormitus jaetaan tasaisesti klusterissa olevien eri liityntäpalvelinten kesken. Tällöin palvelukutsuja voidaan käsitellä yhtäaikaisesti huomattavan paljon enemmän verrattuna yhteen palvelukutsuja käsittelevään liityntäpalvelimeen.

Palveluväylän sisäinen kuormantasaus

Aikaisemmin palveluväylässä on jo ollut mahdollista käyttää X-Roadin sisäistä ns. High Availability-toiminnallisuutta (HA), jolloin väylän sanomia välittävät liityntäpalvelimet ovat voineet olla kahdennettuja tai jopa monennettuja. Tällöin yhden liityntäpalvelimen vikaantuessa on ”vara-liityntäpalvelin” otettu käyttöön ja palvelun toiminta on jatkunut lähes keskeytyksettä. HA-toiminnallisuus ei ole kuitenkaan osannut jakaa kuormaa eri liityntäpalvelimien kesken, vaan käytännössä se on vain ohjannut kuorman jollekin liityntäpalvelimelle.

 

Kuva 1. Sisäisen kuormantasauksen periaate. Kuvassa käytetyt lyhenteet: IS = information system (tietojärjestelmä, sovellus), SS = Security Server (liityntäpalvelin).

 

Palveluväylän ulkoinen kuormantasaus

Kuormantasaus tarkoittaa sitä, että käsiteltävä kuorma jaetaan käytössä olevien liityntäpalvelimien kesken, jolloin yksittäinen palvelin ei ylikuormitu. Jos yksittäinen palvelin vikaantuu eikä sitä voida enää käyttää, osaa kuormantasaaja tällöin reitittää liikenteen uudelleen niin, ettei vikaantunutta palvelinta turhaan yritetä käyttää. Näin liikenne ohjautuu muille, toimiville palvelimille.

Kuva 2. Ulkoisen kuormantasauksen periaate.

Palveluväylän tapauksessa merkittävä asia on myös se, että vaikka klusterissa olisi useampia liityntäpalvelimia, tarvitaan palveluväylän varmenteita (autentikointi- ja allekirjoitusvarmenne) vain yhtä liityntäpalvelinta varten. Väylässä on siis virallisesti yksi liityntäpalvelin (master), joka klusterin muut liityntäpalvelimet (noodit, slavet) teeskentelevät olevansa. Klusterissa olevat liityntäpalvelimet käyttävät kaikki samoja varmenteita eikä jokainen liityntäpalvelin tarvitse omia varmenteita, mikä on merkittävä parannus varmenteiden käsittelyssä. Palveluväylän liityntäpalvelin-ohjelmisto osaa replikoida varmenteet ja käyttää niitä klusterissa olevien palvelinten kanssa oikein.

Kuormantasaajan suorituskykymittaukset

Ulkoisen kuormantasaajan käyttämistä palveluväylän tarpeisiin on testattu kevään ja kesän aikana kehitystiimin omissa suorituskyky- ja regressiotesteissä. Lisäksi ulkoinen toimittaja on tehnyt erillisen suorituskykytestauksen omassa palveluväylä-ympäristössään käyttäen omaa ulkoista kuormantasaaja.

Suorituskykytestejä varten FI-TEST -palveluväylä-ympäristöön luotiin alla oleva kuvan mukainen testauskonfiguraatio. Kuormantasausta käytettiin sekä palvelupyyntöjen lähettäjän että palveluntarjoajan päässä palveluväylän ja liityntäpalvelinten välissä. Lisäksi sekä asiakasjärjestelmän että palveluntarjoajan järjestelmien ja liityntäpalvelinten välissä käytettiin ulkoisia kuormantasaajia. Kuormaa pyrittiin tasaamaan mahdollisimman paljon.

Kuva 3. Ulkoisen kuormantasauksen testauskonfiguraatio.

 

Yksittäinen viesti kulkee järjestelmässä niin, että asiakasjärjestelmän sovellus generoi palvelukutsujen SOAP-sanomia kuormantasaajan #1 läpi asiakaspään liityntäpalvelimille (liityntäpalvelimet #1 ja #3), jotka pyytävät sanomiin vastausta palveluntarjoajan liityntäpalvelimelta (liityntäpalvelimet #2 ja #4). Kuormantasaaja #3 jakaa palvelukutsut palveluntarjoajan liityntäpalvelinten #2 ja #4 kesken. Nämä liityntäpalvelimet saavat vastaukset palvelukutsuihin palveluntarjoajan sovellukselta. Tämä sovellus tuottaa vakiovastauksen ja vastaussanomat voidaan määritellä testin konfiguroinnilla. Vastaussanoma kulkee samaa reittiä takaisinpäin, jolloin kuormantasaajat #4 ja #2 jakavat matkan varrella kuormaa.

Testissä mitattiin kuinka kauan koko viestiketjun (palvelukutsu–vastaus) suorittamiseen kuluu aikaa ja montako viestiä järjestelmän läpi kulkee. Lisäksi mitattiin sekä liityntäpalvelimien että asiakasjärjestelmän ja palveluntarjoajan sovelluksen palvelimien CPU-kuormitusta. Näin pystyttiin päättelemään mikä osa järjestelmästä mahdollisesti hidasti eniten viestin välitystä. Testin aikana palvelukutsujen määrää lisättiin niin, että testin aluksi yhtäaikaisia palvelukutsuja oli vain yksi kappale, mutta testin lopussa yhtäaikaisia kutsuja oli 250.

Testin aikana kaikissa liityntäpalvelimissa oli samanlainen alustakokoonpano, joka on käytännössä sama kuin suositeltava minimikokoonpano liityntäpalvelimelle:

  • OS: Red Hat 7
  • Keskusmuisti: 4 Gb
  • 2 CPUs
  • Levytila: 70 Gt

Seuraavissa kuvissa on esitetty sanomien läpimenomäärät ja keskimääräiset vasteajat testeissä käytetyille palvelukutsuille kullakin sanomakoolla. Kuvassa 4 näkyy kuinka monta sanomapakettia on siirretty kullakin sanomakoolla yksittäisen testin aikana. Testin suoritusaika on vakio ja viestejä lähetetään väylän siirrettäväksi niin nopeasti kuin mahdollista.

Kuva 4. Viestien läpimenomäärät kuormantasauksella ja ilman kullakin sanomakoolla mitattuna.

Kuvassa 5 näkyy palvelukutsujen keskimääräiset vasteajat kullakin sanomakoolla testien aikana.

Kuva 5. Keskimääräiset palvelukutsujen vasteajat kullakin sanomakoolla.

 

Tulokset näyttävät, että osassa testejä suorituskyky tuplaantui tai kasvoi jopa tätäkin enemmän. Toisaalta testauksen aikana huomattiin, että testauksessa palveluntarjoajan päässä käytetty vastaanottava sovellus muodostui pullonkaulaksi silloin kun käytettiin isompia sanomakokoja. Vastaanottava sovellus ei pystynyt käsittelemään saapuneita palvelukutsujen sanomia tarpeeksi nopeasti, vaan kutsut jonoutuivat ja niiden käsittely hidastui. Tästä syystä testitulokset ovat näissä testitapauksissa huonompia kuin jos vastaanottava sovellus olisi pystynyt käsittelemään palvelukutsuja yhtä nopeasti kuin liityntäpalvelimet niitä välittivät. Tämä näkyy siinä, että 100K:n kokoisissa ja sitä isommissa sanomissa kuormantasauksen vaikutus suorituskykyyn putoaa ja tasoittuu suurin piirtein samaan lukemaan kuin ilman kuormantasausta. Jälkikäteen arvioiden myös palveluntarjoajan sovellus olisi pitänyt olla kahdennettu (kaksi sovellusta olisi vastannut palvelukutsuihin), jotta palveluväylän siirtokykyä olisi saatu paremmin mitattua. Joka tapauksessa tällä testillä pystyttiin osoittamaan, että palveluväylässä pullonkaulaa sanomien välityksessä ei muodostunut. Jos pullonkaula muodostui, olivat syyt jossain muualla järjestelmässä, esimerkiksi verkkoyhteyksissä tai palvelupuolen sovelluksessa – kuten tässä tapauksessa todettiin.

Yhteenvetona voi sanoa, että palveluväylän suorituskyky osoittautui merkittävästi paremmaksi ulkoista kuormantasaajaa käytettäessä.

Ulkoisen kuormantasaajan kolme tärkeää hyötyä

Kolme suurinta kuormantasaajan tuomaa etua ovat skaalautuvuus, korkea saatavuus ja hallittavuus. Jos esimerkiksi liityntäpalvelimen toimintaan tarvitaan lisää suorituskykyä vaikkapa lisääntyneen käytön takia (palvelukutsuja tulee jatkossa yhä enemmän), voidaan nykyinen liityntäpalvelin kloonata toiseksi tai useammaksi liityntäpalvelimeksi. Kuorma jakaantuu tällöin kahdelle tai useammalle liityntäpalvelimelle. Näin yhtäaikaisten käyttäjien määrää voidaan kasvattaa ja vasteajat pienevät.

Kuormantasaajan avulla järjestelmä toimii aikaisempaa paremmin myös mahdollisissa vikatilanteissa. Kuormantasaaja poistaa vikaantuneen liityntäpalvelimen käytöstä (liikennettä ei enää ohjata sille) ja liikenne ohjautuu muille, toiminnassa oleville liityntäpalvelimille. Järjestelmän toimintavarmuutta voidaan parantaa vielä lisää kahdentamalla (HA toiminnallisuus) myös itse kuormantasaaja niin, että niitä on kaksi kappaletta toimintakunnossa. Tällöin yhden kuormantasaajan vikaantuminen ei lamauta järjestelmän toimintaa.

Hallittavuudella tarkoitetaan sitä, että liityntäpalvelinklusterin toimintaa voidaan hallita kuormantasaajan avulla. Esimerkiksi liityntäpalvelimia huollettaessa tai päivitettäessä voidaan kuormantasaajalle kertoa, että kyseinen liityntäpalvelin ei ole toimintakunnossa, eikä sille saa ohjata toistaiseksi liikennettä. Tällainen tilanne voi tulla vastaan vaikkapa päivitettäessä liityntäpalvelimen ohjelmistoa uuteen versioon, jolloin päivityksen ajaksi kyseinen palvelin otetaan pois klusterista. Palvelin palautetaan kun ohjelmisto on päivitetty.

Milloin kuormantasausta kannattaa käyttää?

Ulkoisen kuormantasaajan käyttöä kannattaa harkita ainakin siitä tapauksessa, jos yhtäaikaisia palvelukutsuja tulee (tai voi tulla) niin paljon, ettei yhden liityntäpalvelimen kapasiteetti riitä palvelemaan kaikkia palvelukutsuja riittävän nopealla vasteajalla. Lisäksi, jos äkillisiä kuormituspiikkejä on odotettavissa, voidaan palvelun toimivuus varmistaa näiden ruuhkahetkien ajalle kuormatasauksella ja lisäämällä liityntäpalvelimia klusteriin. Tarkkoja palvelukutsujen määriä, jolloin kuormantasaajan käyttö on suositeltavaa on hankalaa sanoa. Muuttuvia tekijöitä tässä yhtälössä ovat esimerkiksi palveluntarjoajan liityntäpalvelimen kapasiteetti ja suorituskyky (mm. muisti ja suoritin), sekä palveluväylään tarjottavalle palvelulle ominainen käytös, esimerkiksi miten suuria sanomia sen pitää käsitellään ja miten usein. Ohjeistusta yksittäisen liityntäpalvelimen mitoitukseen löytyy täältä: Liityntäpalvelimen tekniset vaatimukset. Arviona voisi sanoa, että silloin kun yhtäaikaisten käyttäjien määrä nousee useisiin kymmeniin tai satoihin (tai jopa tuhansiin) ja palvelun on pystyttävä käsittelemään satoja tai tuhansia sanomia lyhyessä ajassa, on kuormantasaajan käyttö suositeltavaa.

Mikäli palvelun saatavuus on ehdottaman tärkeää on kuormantasaajan käyttö tällöin perusteltua. Jos esimerkiksi ohjelmistopäivitykset on pystyttävä tekemään ilman katkosta, on kuormantasaaja ehdoton valinta, koska yksittäinen liityntäpalvelin voidaan irrottaa huoltotoimenpiteitä varten klusterista. Muut klusterin liityntäpalvelimet mahdollistavat palvelun toiminnan tällä välin.

Ulkoisen kuormantasaajan käyttämisestä palveluväylässä julkaistaan asennus- ja konfigurointiohjeet. Kannattaa huomioida, että palveluväylä mahdollistaa ulkoisen kuormantasaajan käytön, mutta kuormantasaajan hankinta, konfigurointi ja ylläpito oman palvelun käyttöön on kunkin organisaation vastuulla. Teknisenä yksityiskohtana mainittakoon, että käytettävän kuormantasaajan pitää tukea HTTP-pohjaista statustilan tarkistusta (ns. health check toiminnallisuus klusterin noodeille) sekä TCP-tason kuormantasausta. Ehdottomasti suositellaan myös, että kuormantasaajan toiminta on varmennettu HA toiminnallisuudella, jolloin yksittäisen kuormantasaajan vikaantuminen ei lamauta koko järjestelmän toimintaa.

Yhteenveto

Palveluväylä on suorituskykyinen tapa siirtää tietoa. Jatkossa sinne liitettyjen palveluiden suorituskykyä voidaan skaalata ylöspäin melkeinpä miten paljon vain. Tämä tehdään kuormantasauksen avulla liittämällä klusteriin lisää liityntäpalvelimia. Palveluväylä tuo tiedonsiirtoon tietoturvaa, aikaleimausta, varmenteita ja vakioituja ratkaisuja palveluiden liittämiseksi ja käyttämiseksi väylässä. Palveluväylä tarjoaa siis tietoturvalla varustettua siirtokyvykkyyttä. Ostoskanavan sanoin, ei siinä vielä kaikki: tämä kaikki on saatavilla valmiina paketoituna kokonaisuutena, jossa on mukana monipuoliset ohjeistukset. Ja se on vieläpä käytettävissä ilmaiseksi! Liity mukaan Palveluväylään

Hannu Hakala

Kirjoittaja työskentelee IT-alan palveluyritys Cybercomin palveluksessa ja on Suomi.fi-palveluväylän tuoteomistaja. Hän on innokas digitalisoitumisen puolestapuhuja: ”Mikä onkaan hienompaa, kuin tehdä digitalisaatiota kotimaan hyväksi”.