Hajautettu tiedostojärjestelmä on järjestelmä, joka jakaa tietoja eri fyysisten solmujen tallennuslaitteille määriteltyjen strategioiden mukaan. Tällainen järjestelmä integroi kaikkien solmujen tallennustilan virtuaalisesti muodostaen globaalin loogisen hakemiston, joka mahdollistaa tiedostojen paikantamisen ja niiden käytön. Verrattuna perinteisiin tiedostojärjestelmiin, hajautetut tiedostojärjestelmät ovat monimutkaisempia. Ne joutuvat ratkaisemaan useita haasteita, kuten tiedon eheyden ylläpitämisen eri solmujen välillä sekä hajautetut lukitsemismekanismit. Tämän vuoksi hajautetut tiedostojärjestelmät ovat nousseet yhdeksi pilvilaskennan keskeisistä tutkimusalueista.

Hajautetut tiedostojärjestelmät voidaan jakaa useisiin eri tyyppeihin. Tallennuksen käyttömenetelmän mukaan ne jaetaan jaettuihin tallennusjärjestelmiin ja hajautettuihin tallennusjärjestelmiin. Jaettu tallennusjärjestelmä mahdollistaa useiden tietokoneiden jakavan saman tallennustilan ja hallitsevan sen tiedostoja yhdessä. Tämäntyyppisiä järjestelmiä kutsutaan jaetuiksi tiedostojärjestelmiksi. Esimerkkejä jaetuista tallennusjärjestelmistä ovat Veritas CFS, Quantum Stornext, Blue Whale BWFS ja EMC MPFS. Toisaalta hajautetut tallennusjärjestelmät, joita käytetään laajamittaisissa internetin hajautetuissa klustereissa, kuten HDFS, GFS, Gluster, Ceph ja Swift, tunnetaan vahvasta skaalautuvuudestaan. Näitä järjestelmiä voidaan skaalata jopa 10 000 solmuun.

Hajautetut tiedostojärjestelmät voivat myös poiketa toisistaan metadatan hallintatavan mukaan. Symmetrisissä hajautetuissa järjestelmissä kaikki solmut ovat tasavertaisia tiedostojen metadatan hallinnassa, ja solmujen välinen synkronointi sekä vastavuoroisten estojen käsittely ovat erittäin nopeita. Tyypillinen esimerkki symmetrisestä järjestelmästä on Veritas CFS. Asymmetrisissä hajautetuissa järjestelmissä puolestaan yksi tai useampi solmu hallitsee metadatan hallintaa, ja muut solmut kommunikoivat näiden solmujen kanssa saadakseen ajan tasalla olevan metadatan, kuten hakemistolistat ja tiedostojen attribuutit. Tällaisia järjestelmiä ovat muun muassa HDFS, GFS ja BWFS.

Hajautetut tiedostojärjestelmät voidaan konfiguroida eri tavoin: hajautettu + symmetrinen, hajautettu + asymmetrinen, jaettu + symmetrinen tai jaettu + asymmetrinen, ja kaikki yhdistelmät ovat mahdollisia. Tiedostojen käyttömenetelmien mukaan hajautetut järjestelmät voidaan jakaa sarja- ja rinnakkaiskäyttöjärjestelmiin. Rinnakkaiskäyttöjärjestelmät, joita kutsutaan myös rinnakkaistiedostojärjestelmiksi, mahdollistavat asiakkaiden pääsyn tietoihin samanaikaisesti yhdeltä tai useammalta solmulta, mikä parantaa pääsyn nopeutta. Esimerkiksi HDFS, GFS ja pNFS tukevat rinnakkaiskäyttöä, mutta vaativat erikoistuneita asiakkaita. Perinteiset NFS/CFS-asiakkaat eivät puolestaan tue rinnakkaiskäyttöä.

Hajautetut tiedostojärjestelmät ovat kehittyneet pilviteknologian rinnalla ja ovat keskeisiä suurten datamäärien käsittelyssä ja analysoinnissa. Erityisesti rinnakkaislaskennan edistysaskeleet, kuten tiedostojen rinnakkaiset lukemiset ja kirjoitukset, ovat mahdollistaneet entistä tehokkaammat datakeskukset ja pilvipalvelut.

Rinnakkaislaskenta voidaan jakaa kahtia: ajalliseen ja tilalliseen rinnakkaisuuteen. Ajallinen rinnakkaisuus tarkoittaa putkistoteknologiaa, joka on eräänlainen lähes rinnakkainen käsittelytekniikka, joka ylikirjoittaa ohjelman suorituksessa olevia käskyjä. Tilallinen rinnakkaisuus puolestaan tarkoittaa monien prosessorien samanaikaista käyttöä laskentatehtävien suorittamiseen. Useimmissa rinnakkaislaskennan sovelluksissa keskeisenä tavoitteena on tilallisen rinnakkaisuuden hyödyntäminen.

Rinnakkaislaskennan eri luokittelutavat, kuten Flynnin luokittelu, jaetaan usein kahteen pääkategoriaan: SIMD (Single Instruction, Multiple Data) ja MIMD (Multiple Instruction, Multiple Data). SIMD-järjestelmä käyttää yhtä ohjausyksikköä monille prosessoreille ja suorittaa saman operaation kaikille datan osille. MIMD-järjestelmässä taas useat prosessorit voivat suorittaa eri käskyjä eri datan osille samanaikaisesti.

Rinnakkaislaskenta voi olla myös sovelluksen laskentaluonteen mukaan jaettavissa kahteen pääluokkaan: dataintensiiviseen ja laskentaintensiiviseen rinnakkaislaskentaan. Dataintensiivinen rinnakkaislaskenta käsittelee suuria tietomassoja (usein useita teratavuja tai petatavua) ja on erityisesti käytössä I/O-sidonnaisissa sovelluksissa, joissa suurin osa prosessointiajasta menee datan liikkumiseen ja käsittelyyn. Laskentaintensiivinen rinnakkaislaskenta taas käyttää vähemmän dataa, mutta vaatii suurta laskentatehoa, jolloin suoritusaika kuluu enemmän laskentaan kuin tiedonsiirtoon.

Tämä luokittelu on oleellinen, sillä ymmärtämällä erilaisten rinnakkaislaskentateknologioiden ja hajautettujen tiedostojärjestelmien perusperiaatteet voidaan valita optimaaliset ratkaisut eri pilvipalveluiden ja datakeskusten rakentamisessa, jotka pystyvät käsittelemään nykyajan massiivisia datamääriä ja monimutkaisia laskentatehtäviä.

Miten hallita ja käyttää Storm-järjestelmää reaaliaikaisessa suorituskyvyn käsittelyssä?

Storm on hajautettu reaaliaikainen suorituskyvyn käsittelyjärjestelmä, joka on suunniteltu erityisesti suurien tietomäärien käsittelyyn reaaliajassa. Sen avulla voidaan luoda ja hallita topologioita, jotka määrittelevät, miten data kulkee järjestelmässä ja miten sitä käsitellään. Järjestelmän tehokas konfigurointi ja hallinta ovat keskeisiä tekijöitä sen toimivuuden optimoimisessa.

Jokaiselle solmulle on oletusarvoisesti määritelty neljä Worker-prosessia, jotka toimivat porteilla 6700–6703. Tämän määrän voi säätää solmun suorituskyvyn mukaan. Workerit ovat vastuussa datan käsittelystä ja laskennasta, ja niiden määrän säätämisellä voidaan vaikuttaa koko järjestelmän tehokkuuteen. Konfigurointi voidaan tehdä yksinkertaisesti muokkaamalla storm.yaml-tiedostoa ja siirtämällä se tarvittaviin hakemistoihin kaikkien solmujen välillä.

Stormin käynnistämisessä on neljä päävaihetta. Ensinnäkin käynnistetään Nimbus-prosessi, joka toimii järjestelmän hallintayksikkönä. Seuraavaksi käynnistetään Supervisor-prosessi, joka hallitsee Workerien suoritusta. UI-prosessi tarjoaa web-pohjaisen graafisen käyttöliittymän, jonka avulla käyttäjät voivat seurata järjestelmän tilaa. Lopuksi käynnistetään Log Viewer -prosessi, joka mahdollistaa lokitiedostojen tarkastelun.

Kun Storm on konfiguroitu ja käynnistetty, sen hallintaan on tarjolla useita komentoja, jotka helpottavat topologioiden hallintaa ja tehtävien suorittamista. Esimerkiksi topologian lähettämiseen käytetään storm jar -komentoa, joka määrittelee, mikä JAR-paketti ja topologia suoritetaan. Jos topologiaa ei enää tarvita, sen voi tuhota storm kill -komennolla. On myös mahdollista deaktivoida topologia, jolloin se pysäyttää uusien tietovirtojen käsittelyn, mutta viimeiset käsittelyt vielä suoritellaan.

Topologian aktivointi ja rebalansointi ovat tärkeitä toimenpiteitä, erityisesti suurissa ja dynaamisissa ympäristöissä. Aktivoimalla topologian, se käynnistyy uudelleen, ja sen tehtävät aloitetaan alusta. Rebalansointi puolestaan jakaa tehtävät uudelleen, jos esimerkiksi uusia solmuja lisätään olemassa olevaan klusteriin.

Stormin käytännön esimerkeissä yksi suosituimmista esimerkeistä on WordCountTopology, joka laskee, kuinka monta kertaa kukin sana esiintyy tiedostossa. Tämä esimerkki havainnollistaa Stormin kyvyn käsitellä suuria datamääriä reaaliajassa ja antaa käyttäjille käsityksen siitä, miten topologiat luodaan ja hallitaan käytännössä. Ennen tämän esimerkin toteutusta on hyvä tutustua Maven-työkalun käyttöön, sillä se auttaa projektin hallinnassa ja kääntämisessä.

Maven on projektinhallinta- ja rakennustyökalu, joka mahdollistaa Stormin topologioiden hallinnan. Mavenin avulla voidaan automaattisesti ladata tarvittavat riippuvuudet ja paketoida projekti JAR-tiedostoksi, joka sitten lähetetään Storm-järjestelmään. Mavenin asennus on yksinkertaista ja sen ympäristömuuttujat voidaan määrittää suoraan käyttöjärjestelmässä. Kun Maven on asennettu ja konfiguroitu, voidaan projekti kääntää komennolla mvn package, joka luo tarvittavat tiedostot.

Kun topologia on käännetty ja valmis, se voidaan lähettää Storm-järjestelmään komennolla storm jar. Tämä komento ottaa JAR-paketin, määrittelee topologian ja lähettää sen käynnistettäväksi. Topologian suoritus voidaan tarkistaa Stormin käyttöliittymästä, joka tarjoaa yksityiskohtaiset tiedot klusterin tilasta, topologioiden tilasta ja solmujen suorituskyvystä.

Stormin käyttöliittymä tarjoaa neljä pääosaa: Cluster Summary, Topology Summary, Supervisor Summary ja Nimbus Configuration. Cluster Summary antaa tietoa koko klusterin tilasta, kuten vapaiden solmujen määrästä ja kapasiteetista. Topology Summary tarjoaa yksityiskohtaisen katsauksen kaikista käynnissä olevista topologioista. Supervisor Summary antaa tietoa yksittäisten solmujen tilasta ja niiden tehtävistä, kun taas Nimbus Configuration näyttää Nimbus-solmun asetukset.

On tärkeää ymmärtää, että Storm on erittäin joustava ja skaalautuva järjestelmä, joka vaatii jatkuvaa seurantaa ja optimointia. Käytettäessä suuria datamääriä ja monimutkaisia topologioita, klusterin kapasiteetti ja suorituskyky voivat muuttua nopeasti, mikä tekee skaalautuvuuden hallinnasta elintärkeää. Yksittäisten topologioiden säätäminen ja tasapainottaminen on jatkuva prosessi, joka voi vaatia toistuvia säätöjä ja monitorointia.