Tietokantapalvelin ja sulautettu tietokanta
Tietokantapalvelin
Tietokantapalvelin tarkoittaa itsenäisenä palvelinprosessina toimivaa tietokantaa, joka käsittelee sovellusten pyyntöjä verkon kautta. Suurin osa meille tutuista RDBMS-järjestelmistä, kuten MySQL, PostgreSQL ja Oracle DB, edustaa tätä mallia. Tietokantapalvelimella on seuraavat edut:
- Keskitetty hallinta: Dataa hallitaan integroidusti yhdessä paikassa, mikä helpottaa johdonmukaisuutta, tietoturvaa, varmuuskopiointia ja palauttamista.
- Resurssien itsenäisyys: Sille on allokoitu oma CPU, muisti ja tallennustila, mikä varmistaa vakaan suorituskyvyn riippumatta sovelluksen tilasta.
- Korkea samanaikaisuus ja skaalautuvuus: Optimoitu useiden käyttäjien samanaikaiselle käytölle, ja skaalautuminen vaakasuunnassa klusterointia tai replikointia hyödyntäen on suhteellisen vaivatonta.
Näiden ominaisuuksien ansiosta tietokantapalvelin on ollut ohjelmistoinfrastruktuurin standardi vuosikymmenten ajan. Teknologian kehityksen ja ympäristön muutosten myötä tietokantapalvelimen haitat ovat kuitenkin alkaneet tulla esiin tietyissä ympäristöissä, ja sulautetut tietokannat ovat jälleen saaneet huomiota vaihtoehtona.
Uusi suuntaus: Sulautetut tietokannat
Sulautettu tietokanta on tietokantamoottori, joka sisältyy sovellukseen kirjastomuodossa ja toimii samassa prosessissa ilman erillistä palvelinprosessia. Esimerkkejä tyypillisistä sulautetuista tietokannoista ovat SQLite, LevelDB ja RocksDB. Seuraavat tekijät selittävät, miksi tällaiset sulautetut tietokannat ovat nousseet vahvaksi vaihtoehdoksi nykyaikaisissa teknologiaympäristöissä:
SSD-levyjen tulo
Aiemmin HDD-keskeisissä järjestelmäympäristöissä satunnaiskäytön suorituskyky oli huomattavasti heikompi kuin peräkkäisen tiedon luku-/kirjoitussuorituskyky. Siksi suorituskyvyn optimoinnin ytimenä oli levyn I/O:n minimointi ja muistin välimuistin maksimointi. Tietokantapalvelimet ovat mukautuneet tähän käyttämällä suuria välimuisteja ja käsittelemällä kirjoitusoperaatioita yhdistetysti, jotta HDD:n fyysiset rajoitukset on voitu ylittää.
SSD-levyjen tulo on kuitenkin muuttanut tämän lähtökohdan täysin. SSD-levyjen satunnaiskäytön suorituskyky on tuhansia kertoja nopeampi kuin HDD-levyjen, ja viive on huomattavasti lyhyempi. Tämän seurauksena vanha käsitys "levyn I/O on suurin pullonkaula" on hävinnyt, ja sen sijaan verkon kautta tapahtuvasta etä-DB-palvelimen käytöstä aiheutuva viive on alkanut korostua uutena pullonkaulana.
MSA ja tiedon itsenäisyys
Aiemmin oli yleistä, että yksi valtava monoliittinen sovellus oli riippuvainen yhdestä keskitetystä tietokannasta. Tämä lähestymistapa oli yksinkertainen, mutta palvelun koon kasvaessa tietokannan skeeman muuttaminen vaikeutui, ja kaikkien palveluiden jakaessa saman tietokannan sidokset muuttuivat liian vahvoiksi.
Nykyaikaisessa mikroserviisarkkitehtuurissa "Database per Service" -periaate on tärkeä näiden ongelmien ratkaisemiseksi. Kun jokainen palvelu omistaa ja kapseloi oman tietovarastonsa, palveluiden välinen itsenäisyys varmistetaan, ja vikojen eristäminen sekä skaalautuminen helpottuvat. Tässä prosessissa sulautettu DB on ihanteellinen valinta palvelukohtaiseksi tietovarastoksi. Se on kevyt, nopea ja voidaan jakaa palvelukoodin mukana, mikä sopii erinomaisesti MSA-ympäristöön.
Esimerkiksi Kubernetes-ympäristössä sidecar-kuvio on laajalti käytössä, jossa sulautettu DB sijoitetaan sovelluskonteinerin viereen paikallisen tiedonkäsittelyn optimoimiseksi. Tämä vähentää verkon pullonkauloja ja minimoi tiedonsaannin viiveen.
Käyttöympäristön yksinkertaistaminen
Tietokantapalvelin vaatii monimutkaisia käyttötoimenpiteitä, kuten asennuksen, paikkaamisen, varmuuskopioinnin, vianpalautuksen, replikoinnin ja suorituskyvyn seurannan, ja näihin tarvitaan omistautunut DBA ja ammattitaitoinen käyttöhenkilöstö. Erityisesti suurissa ympäristöissä tämä hallintataakka on erittäin suuri.
Sulautettu DB helpottaa näitä ongelmia merkittävästi. Kun tietokanta integroidaan sovellukseen, yksikkötestaus, rakentaminen, versionhallinta ja jakelu tapahtuvat yhdessä, joten erillistä palvelimen käyttöä ei tarvita. Lisäksi kun sovellus skaalataan ulos, sulautettu DB skaalautuu sen mukana, ja automaattinen hallinta DevOps-kulttuurin ja CI/CD-putkien kautta tulee mahdolliseksi. Erityisesti startup-yrityksissä, pienissä palveluissa ja prototyypin kehitysympäristöissä sulautetut tietokannat vähentävät merkittävästi käytön monimutkaisuutta ja nopeuttavat kehitys- ja jakelunopeutta.
Korkean suorituskyvyn järjestelmäkielten ja ekosysteemien kehitys
Aiemmin oli tavallista, että tietokannat ja sovellukset kirjoitettiin eri kielillä. Esimerkiksi korkean suorituskyvyn vaativat tietokantamoottorit kirjoitettiin pääasiassa C:llä ja C++:lla, ja sovellukset kehitettiin kielillä kuten Java, Python ja PHP. Tämä lähestymistapa oli tehokas suorituskyvyn optimoinnissa, mutta sillä oli rajoituksia, kuten muistin vakausongelmat, monimutkainen samanaikaisuuden käsittely, viive ja vaikeudet kirjastojen integroinnissa ja jakelussa.
Kuitenkin nykyaikaisten järjestelmäohjelmointikielien, kuten Go:n ja Rustin, nousu on merkittävästi lieventänyt näitä rajoituksia. Erityisesti Go sopii sekä korkean suorituskyvyn sovellusten että matalan tason ohjelmien, kuten tietokantamoottoreiden, kirjoittamiseen, mikä mahdollistaa tietokantojen ja sovellusten käsittelyn samassa kieliekosysteemissä.
Itse asiassa Golangissa käytetään aktiivisesti korkean suorituskyvyn sulautettuja tietokantoja, kuten BadgerDB ja PebbleDB. Tämä tarkoittaa, että sulautetut tietokannat eivät ole enää pelkästään kevyt vaihtoehto tietokantapalvelimille, vaan ne ovat vakiinnuttaneet asemansa tärkeänä valintana, jolla on oma kilpailukykynsä.
Johtopäätös
Tietokantapalvelin on edelleen tehokkain ratkaisu silloin, kun tarvitaan suurten tietomäärien keskitettyä hallintaa, monimutkaisia transaktioita ja suurta samanaikaisuutta. Kuitenkin MSA-ympäristön yksittäisissä palveluissa, IoT-reunalaiteissa, nopeassa prototyypityksessä ja projekteissa, joissa käyttötehokkuus on tärkeää, sulautettu tietokanta voi olla tehokkaampi ja järkevämpi valinta. Loppujen lopuksi tärkeintä on valita optimaalinen työkalu, joka sopii parhaiten annettuun tilanteeseen ja vaatimuksiin, ja sulautettujen tietokantojen kehitys tarjoaa meille laajemman ja monipuolisemman valikoiman vaihtoehtoja.