Rinnakkaisohjelmistot syksy 2004, Harjoitus 6

7.-10.12.2004

Opiskeltava alue: Andrews: 7.1-7.5 Message Passing, 8 RPC and Rendezvous, 10.3 RPC and Rendezvous.
Stallings: 13.2 Distributed Message Passing, 13.3 Remote Procedure Calls.

Kurssin viimeisissä harjoituksissa käsitellään sanomanvälitystä ja etäproseduurikutsua hajautetussa järjestelmässä. Ymmärtämisen helpottamiseksi kannattaa piirrellä kuvia.


Huom! Kurssikoe on perjantaina 10.12. klo 15-19 päärakennuksen salissa 1.

Muista vastata ( kurssikyselyyn ) joko nyt heti tai sitten kokeen jälkeen.


1 - TIETOKANTAPALVELIN

Toteutetaan lukijat/kirjoittajat -ongelmalle sellainen ratkaisu, jossa varsinaiset lukija- ja kirjoittajaprosessit eivät pääsekään suoraan käsiksi tietokantaan, vaan esittävät luku- ja kirjoituspyyntönsä tietokannan kirjoittamisesta ja lukemisesta huolehtiville palvelijaprosesseille (n kappaletta). Valvottava tietokanta on omassa erillisessä palvelimessaan ja vain palvelijaprosesseilla on pääsy tietokantaan. Asiakkaiden (lukijat ja kirjoittajat) ja palvelijoiden välinen kommunikointi perustuu asynkroniseen sanomanvälitykseen. Piirrä kuva tilanteesta. Mitä kommunikointikanavia tarvitaan? Millaisia ovat niissä kulkevat sanomat? Miten asiakkaat pyytävät luku- tai kirjoituspalvelua? Hahmottele palvelijaprosessien koodi.

Vihje: Koska yhteistä tietokantaa käyttäviä palvelijaprosesseja on monta, niin ratkaisussa on varmistettava, että vain yksi prosessi kerrallaan on kirjoittamassa eikä kukaan ole tällöin lukemassa. Lukuja voidaan tehdä useita samanaikaisesti. Palvelijaprosessit voivat käyttää kirjan kuvassa 5.5 esitettyä monitoria luku- ja kirjoitustoimintojen synkronointiin.

2 - KUORMANTASAUSTA

Verkon työasemat S[i] on kytketty "nauhaksi" (siis: S[0]-S[1]- ...-S[N-1] ). Verkossa on hajautettu kuormantasapainotusjärjestelmä, joka pyrkii sijoittelemaan töitä kevyesti kuormitettuihin solmuihin. Kukin solmu
1) ottaa vastaan paikallisia ilmoituksia kuormituksen muuttumisesta ja kertoo näistä naapureilleen
2) välittää naapurilta saamansa kuormituksen muutostiedot edelleen sekä
3) vastaa ylläpitäjän tekemään tiedusteluun järjestelmän kuormitustilanteesta.
Kommunikoinnissa paikallisen järjestelmän, naapurien ja ylläpitäjän kanssa käytetään sanomanvälitystä.
Tässä on siis tarkkailtavana kolme rinnakkaista tapahtumaa. Ohjelmoi kutakin toimintoa kohden oma prosessi (yksityinen kanava) tai käytä globaalia kanavaa ja liitä pyyntöön toimintokoodi.

Esitä kuvana solmun S[i] kommunikointi. Selvitä, mitä tietoja ja tietorakenteita solmu S[i] tarvitsee voidakseen hoitaa oman osuutensa kuormantasauksessa. Kirjoita kuormantasauksessa kommunikoivien osien koodi.

3 - MONILÄHETYS JA VÄLITTÄJÄSOLMU

Monilähetystä (multicast; lähettäjä nimeää kaikki vastaanottajat) hitaan linkin yli voi tehostaa siten, että sanoma menee ensin nopean verkon puolella olevalle välittäjäsolmulle. Välittäjäsolmu lähettää sitten sanoman edelleen kullekin vastaanottajalle.

                         --> receiver[i]
sender[x] ---> välittäjä --> receiver[j]
                         --> reveiver[k]

Kirjoita välittäjäsolmun toiminta-algoritmi. Sanomanvälitys perustuu send- ja receive-operaatioiden käyttöön ja osoitteet ilmoitetaan kanavina (monilähetyssanoman lopullinen vastaanottaja "i" vastaanottaa sanoman kanavasta inbox[i]; mahdollisia vastaanottajia ovat 0,1,2,...,N-1 ).

Ratkaisussa ei tarvitse ottaa kantaa siihen, kuinka tuo sanomanvälitysyhteys muodostetaan tai kuinka tietty prosessi sidotaan johonkin tiettyyn kanavaan.

4 - ETÄPROSEDUURIKUTSUN PERUSIDEAT

Selitä mistä etäproseduurikutsussa on kyse! Miten toiminta näkyy kutsuvalle prosessille, miten palvelu löytyy ja mitä KJ:lta vaaditaan etäproseduurikutsun onnistumiseksi. Mikä prosessi suorittaa etäproseduurin koodin? Mitä ongelmia on pitänyt ratkoa etäproseduurikutsun toteutuksessa? yms. yms. [Vihje: kaiva tietoa käyttöjärjestelmäkirjoista, internetistä... Jos haluat tutustua Javan vastaavaan mekanismiin, avainsana on RMI, remote method invocation]

5 - LIUKUHIHNAN SOLMUN KOODI ETÄPROSEDUURINA

Sovellus on hajautettu verkkoon "liukuhihnaksi", jossa kukin liukuhihnaan kuuluva prosessi ottaa vastaan dataa edeltävältä solmulta, käsittelee sen ja välittää datan eteenpäin seuraavalle solmulle. Kirjoita yhden (liukuhihnan keskellä olevan) solmun tiedonvalityksessä tarvittava koodi. Kommunikointiin on käytettävissä etäproseduurikutsu.

Vihje: tässä on kaksi operaatiota: 1) tiedon vastaanotto edeltäjältä ja 2) välitys eteenpäin seuraajalle. Jotta ne voisivat toimia rinnakkaisesti, ohjelmoi vastaanotto etäproseduurina ja tee eteenpäinvälitykselle oma prosessi (kutsuu seuraajan etäproseduuria). Koska ne käyttävät yhteistä puskuria, muista ratkoa myös poissulkeminen.

Prosessien ja kanavien sitomiseen ei tarvitse ottaa kantaa.

Oppi ei ole palkkio, se on seuraus.

Liisa Marttinen