P2P-järjestelmät

P2P-järjestelmät (peer-to-peer computing/networking) eli vertaisverkot toimivat ilman keskitettyä hallintaa. Verkot ovat skaalautuvia eli P2P-protokolla toimii sellaisenaan, vaikka verkon jäsenten määrä kasvaa. Tällaisessa tilanteessa asiakas-palvelin -arkkitehtuuri tyypillisesti tarvitsee lisää taustaresursseja. Lisäksi vertaisverkoilla on luontaista kestävyyttä yksittäisten jäsenten virheitä tai muita häiriöitä vastaan. Jäsenpopulaatio muodostaa palveluntarjonnan infrastruktuurin eli palvelun kuluttajien on osallistuttava resurssien tarjoamiseen. Jo www:n idea pohjautui vertaisajattelulle ja 1990-luvun lopulta alkaen on syntynyt lukuisia P2P-malleja. Ne noudattavat yleensä viittä periaatetta:

  1. rajapintojen symmetria, koska verkon jäsenet voivat suorittaa tehtäviä sekä palvelimina että asiakkaina. Tämä heijastuu myös termeissä sikäli, että verkon jäseniä kutsutaan myös solmuiksi (nodes) ja englannin kautta käytetään joskus termiä vertaiset (peers).
  2. sietokyky pohjalla olevan tietoliikenneverkon alustan häiriöitä ja vertaisvirheitä vastaan;
  3. tietojen ja palvelujen kestävyys replikointimenetelmien avulla;
  4. resurssien sijainti verkon reunalla, mikä alentaa infrastruktuurin kustannuksia ja edistää skaalautuvuutta sekä hajauttamista;
  5. resurssien tarjontaosoitteen vaihtelu vertaisten kesken, eli kuorma ei kasaudu yhdelle.

Nämä periaatteet tekevät P2P:stä tärkeän perustan erilaisille sovelluksille. Alun perin P2P-järjestelmät olivat kyseenalaisella tavalla kuuluisia, koska niillä toteutettiin tiedostonjakosovelluksia, kuten Napster (1999), eMule tai KaZaA, joilla rikottiin tekijänoikeuksia. Nykyään P2P:n käyttö on yleistä monissa sovelluksissa: sosiaaliset verkostot, multimediasisällön jakelu, verkkopelit, Internet-puhelut, pikaviestintä, IoT, autojen välinen viestintä, valvomo-ohjelmistot (SCADA, Supervisory control and data acquisition) sekä laajan alueen valvontajärjestelmät. Kuten tuonnempana tulee ilmi, myös hajautetut tilikirjat käyttävät joitakin P2P-toimintoja.

Kaksi tärkeintä P2P-paradigmaa ovat rakenteettomat ja rakenteiset protokollat (tai strukturoimattomat ja strukturoidut). Rakenteettomat protokollat soveltuvat enimmäkseen tiedon levittämiseen, kun se on laajaa ja tarvitaan skaalautuvuutta, kun taas rakenteellisia käytetään yleensä tiedonhaun tehostamiseksi.

Hybridimallit yhdistävät rakenteita ja niiden puutetta. Lisäksi on olemassa hierarkkisia P2P-järjestelmiä. Nämä ovat osittain ristiriidassa vertaisperiaatteen kanssa. Hierarkkisia järjestelmiä voidaan pitää kerroksellisina, esim. useiden topologioiden koosteina, joissa on edusta- ja taustajäseniä.

Vertaisverkon tyypistä riippumatta on tärkeää huomata, että P2P-perustoiminnot perustuvat kolmeen elementtiin, nimittäin (a) solmujen nimeämiseen tai muuhun identifiointiin, (b) reititysskeemoihin solmujen välillä ja (c) solmujen löytämiseen niiden tunnisteiden ja reitityksen funktiona.

P2P-tyyppinen järjestelmä soveltuu moneen tarkoitukseen mutta ei mihin tahansa, eikä mikä tahansa päällysverkko ole P2P-verkko. Esimerkiksi TORia, eli anonymisoivaa “sipulireititysverkkoa” käytetään liittymättä siihen. Mikä tai mitkä seuraavista ovat mahdollisia sovellusalueita?

Strukturoimattomat P2P-protokollat

Rakenteettomia P2P-protokollia — esim. Freenet ja Gnutella — käytetään pääasiassa tiedonlevityksessä, kuten sensuroimattomassa viestinnässä tai tiedostojen jakamisessa. Vaikka verkon solmuilla ei ole mitään määrättyä topologiaa, niille muodostuu usein puun tai mesh-verkon (“ritilän”) kaltaiset rakenteet, jotka mahdollistavat viestien vaihdolle alhaisen viiveen. Puita löytyy yhden lähteen suoratoistomedian tapauksissa. Mesh-verkot liittyvät useiden lähteiden ja kuluttajien tapauksiin, esim. tiedostonjakoon.

Rakenteettomat P2P-protokollat etsivät tyypillisesti resursseja nimen tai tunnisteiden perusteella käyttämättä osoitejärjestelmää. Tämä skaalautuvaa hyvin levityksen kannalta mutta huonosti resurssien löytämisen tai toistettavien reitityspolkujen kannalta. Vertaiskumppanit säilyttävät kuitenkin tunnisteen, joka mahdollistaa riippumattomuuden pohjaverkon osoitteesta. Resurssit löydetään päällysverkon hakualgoritmeilla, jollaisia ovat esim. leveys- tai syvyyshaku, satunnaiskulku ja laajeneva rengashaku, yhdisteltyinä sovelluksen vaatimusten mukaan.

Kommunikointi vertaisten välillä tapahtuu viesteillä. Niiden välittäminen voi olla suoraa, pohjaverkkoyhteyden perusteella, mutta tämä edellyttää yleensä, että kumppanit tietävät eksplisiittisesti toistensa osoitteen ja reitin. Kun lähetettävän viestin kohde ei ole tiedossa, viestin rakenteessa ja sen käsittelyssä on mukana etsintään liittyviä ominaisuuksia.

Kaikki jäsenet ylläpitävät luetteloita, jotka sisältävät muiden jäsenten yhteystietoja (tai sellaisten hash-arvoja). Näin verkko ei tukkeudu osoitehaun viesteistä. Luetteloiden tehokkuus riippuu jäsenten mukanaolosta (liveness). Sen vuoksi luettelon jäsenille lähetetään ajoittain kysely (ping). Luetteloa siivotaan, jos vastausta ei tule. Kyselyiden väliaikaa säädetään dynaamisesti jäsenten havaitun vaihtuvuuden perusteella.

Strukturoidut P2P-protokollat

Strukturoituja eli rakenteisia P2P-protokollia, kuten Chord, Pastry, Tapestry, Kademlia, CAN jne. käytetään tyypillisesti tietojen etsintäsovelluksissa. Topologioissa on yleensä “pienen maailman” ominaisuuksia, eli kahden jäsenen välillä on suhteellisen lyhyt polku. Topologia on usein muodostettu rengasmaisesti käyttäen oikopolkuja (Chord on nimenomaan jänne ympyrän kehällä, CAN puolestaan on Content addressable network). Tärkeimmät ominaisuudet ovat solmun löytämisen ja reitityksen tehokkuus.

Rakenteisissa P2P-protokollissa osoittimet resursseihin tallennetaan tietorakenteeseen, jota kutsutaan hajautetuksi hash-tauluksi (distributed hash table, DHT). Päällysverkon osoiteavaruus on yleensä kokonaislukujoukko 0,…, 2w−1., missä w on tavallisesti 128 tai 160. Yleensä määritellään etäisyysfunktio d(a, b), joka mahdollistaa etäisyyslaskennan minkä tahansa kahden osoitteen a ja b välillä. Etäisyyden laskeminen on ratkaisevan tärkeää hakumekanismin ja tiedontallennusvastuiden kannalta. Etäisyysfunktio ja sen ominaisuudet vaihtelevat eri protokollissa. Tiedonhaku toteutetaan laskemalla avain resurssin nimestä tai muusta helposti ymmärrettävästä tunnisteesta. Tätä avainta vastaavia tietoja sitten pyydetään yhdeltä siihen kytkeytyvältä verkon jäseneltä.

Viestit vaihdetaan useimmissa rakenteisissa protokollissa suoraan, eli käyttämällä kahden solmun välistä pohjaverkkoyhteyttä. Jos solmut eivät tunne toisiaan, suoraa yhteyttä ei voida muodostaa ja kohdejäsenen sijainti on määritettävä reitityksen suorittamiseksi. Tätä tarkoitusta varten päällysverkon hakumekanismi pyrkii pienentämään etäisyyttä kohteesta hakualgoritmin jokaisella iteraatiolla, kunnes tunniste voidaan selvittää. Tämä tapa on erittäin tehokas ja edistää skaalautuvuutta. Kun haku on onnistuneesti noutanut kohteen alla olevan verkko-osoitteen, viestejä voidaan vaihtaa. Hakumuunnelmat sisältävät iteratiiviset tai rekursiiviset algoritmit sekä rinnakkaiset kyselyt lähimpien naapureiden joukolle. Reititystaulut säilyttävät tietoja vain elossa olevista ja tavoitettavista solmuista, ja sitä varten tehdään säännöllisiä kyselyjä (ping). Protokollaviestintää tarvitaan myös, jotta uudet vastikään liittyneet solmut voidaan sijoittaa reititystauluihin — samalla kun poistuneet ja reagoimattomat solmut pyyhitään niistä. Topologian säätäminen tekee rakenteisten P2P-verkkojen ylläpidon kalliimmaksi kuin rakenteettomien.

Hybridi-P2P-protokollat

P2P-protokollien hybridimuunnelmat integroivat elementtejä rakenteettomista ja rakenteisista skeemoista, koska niiden päätarkoitus on sekä tiedon haku että levittäminen. Tunnettuja hybridiesimerkkejä ovat tiedostonjakopalvelut, kuten Napster ja BitTorrent. BitTorrent oli alun perin klassinen rakenteeton protokolla, mutta sitä laajennettiin rakenteisilla ominaisuuksilla tarjoamaan täysin hajautettu tiedonhakumekanismi. Tässä yhteydessä BitTorrent saattoi luopua hakua helpottaneesta tracker server -toiminnosta, mikä paransi sen saatavuutta.

Hierarkkiset P2P-protokollat

Joissakin sovellusskenaarioissa hierarkkinen P2P on osoittautunut hyödylliseksi. Hierarkkisissa malleissa verkon solmut luokitellaan kaistanleveyden, latenssin, tallennustilan tai laskentakapasiteetin perusteella, ja jotkut “supersolmut” ottavat koordinoivan roolin. Yleensä luokka, jossa on vähemmän jäseniä, muodostaa järjestelmään taustaosan, kun taas enemmistö toimii edustana, joka käsittelee palvelupyyntöjä ensimmäisenä ja välittää pyynnöt taustalle vain, jos ei itse pysty niitä täyttämään. Tämä tehostaa hakua ja tuottaa myös vähemmän viestejä verkkoon. Lisäksi suosittu sisältö voidaan tallentaa välimuistiin latausviiveen vähentämiseksi. Tällainen rakenne on toiminut hyvin esimerkiksi eDonkey-tiedostonjakojärjestelmässä tai Super P2P -malleissa, kuten KaZaA, joissa valittu jäsen toimii palvelimena jäsenten osajoukolle.

Mikä tekee rakenteellisesta vertaisverkosta rakenteellisen?
Palautusta lähetetään...