[MWy] Ctvrte cviceni pondeli 28. 4. 14:00 SU2
Martin Decky
decky at dsrg.mff.cuni.cz
Fri Apr 25 20:55:24 CEST 2008
Hezky vecer,
ctvrte cviceni z predmetu Middleware se uskutecni v terminu uvedenem
v predmetu tohoto emailu. Tema bude tentokrat Key-Based Routing.
Budeme pouzivat middleware Chimera 1.2.0, ktery lze stahnout z webu
http://current.cs.ucsb.edu/projects/chimera/. Z odkazu uvedeneho nize si
muzete stahnout predprelozenou knihovnu (pro Linux x86), kterou staci
rozbalit do domovskeho adresare.
http://dsrg.mff.cuni.cz/~ceres/sch/mwy/download/Chimera-1.2.0-bin.tar.gz
Ukazka pouziti slouzi tentokrat zaroven jako zaklad ulohy a muzete si ji
stahnout z adresy uvedene nize. Makefile je tradicne napsan tak, aby se
ukazka prelozila s Chimerou nainstalovanou do domovskeho adresare, napr.
z predpripravene binarky (viz vyse).
http://dsrg.mff.cuni.cz/~ceres/sch/mwy/download/as4.zip
Vzhledem k tomu, ze dokumentace k Chimere je pomerne strucna, opravdu
Vam velmi vrele doporucujeme, abyste se dukladne seznamili s prikladem
pouziti, ktery mate k dispozici (a ktery predstavuje take zaklad pro
ulohu na cviceni). Idealne si vyzkousejte take nejakou lehkou modifikaci
ukazky, zopakujte zpusob pouziti prekladace GCC, utility make atd.
Situace s dokumentaci je kompenzovana tim, ze Chimera je na rozdil od
predchozich middleware technologii skutecne velmi jednoducha.
Na konci emailu naleznete predbeznou podobu zadani ulohy. Veskera
pravidla pro vypracovani zustavaji standardni.
M.D.
===[ Ctvrta uloha z Middleware: Zaklady Key-Based Routingu ]===
---[ Zakladni zadani ]---
Za uspesne dokonceni zadani behem cviceni jsou 2 body.
Studenti, kterym se nepodari ulohu dokoncit behem cviceni,
mohou za jeji uspesne dokonceni jeste tentyz den dostat 1 bod.
Cilem zadani je ziskat zakladni zkusenost s peer-to-peer overlay sitemi
zalozenymi na Key-Based Routingu (Addressing by Content).
Pozadovane znalosti:
Zadani ulohy popisuje rozsireni jednoducheho chatu, kde si ucastnici
mohou posilat privatni zpravy, o moznost pripojovani se k takzvanym
kanalum, ktere distribuuji zpravy zaslane do kanalu vsem pripojenym
ucastnikum (podobne jako napr. v IRC). Pro pochopeni ulohy neni
potreba zadna zvlastni znalost.
Jako technologie posilani zprav je pouzita peer-to-peer overlay
zalozena na Key-Based Routingu, konkretne implementace Chimera 1.20
v jazyce C (lze pouzit i C++). Pro implementaci ulohy je potreba
znalost nasledujicich veci:
- Zakladni myslenka Key-Based routingu: dorucovani zprav ucastnikum
na zaklade hashovacich klicu, prace s klici v implementaci Chimera
(funkce key_makehash, get_key_string, str_to_key, chimera_setkey).
- Inicializace Chimery, pripojeni ucastniku do site, bootstrap z jiz
beziciho ucastnika (funkce chimera_init, host_get, chimera_join).
- Zpusob zasilani zprav: format zpravy (typ, delka, payload),
registrace typu zprav (chimera_register), asynchronni upcall funkce
pro prijem zprav a zpracovani dalsich udalosti (chimera_deliver,
_update, _forward), zasilani zprav (chimera_send).
K dispozici bude ukazkovy priklad jednoducheho chatu, ktery muze take
pouzit k implementaci ulohy rozsirenim tohoto prikladu.
Popis ulohy:
Implementujte jednoduchy chat po siti bez centralniho serveru pomoci
peer-to-peer middleware Chimera.
Aplikace musi plnit tyto funkce:
1. Pri spousteni zada uzivatel jmeno, pod kterym chce na chatu
vystupovat. Z nej aplikace vytvori hashovaci klic klienta. Uzivatel
muze take zadat adresu a port stroje, ze ktereho se ma provest
bootstrap. Po spusteni aplikace inicializuje Chimeru s danym klicem
(a s pripadnym bootstrapem) a ceka na prikazy uzivatele.
2. Uzivatel muze prikazem (napr. "msg user message") poslat privatni
zpravu jinemu uzivateli chatu -- zprava bude adresovana spravnemu
klientu pomoci hashe jmena prijemce. Aplikace pri prijmu teto
zpravy overi, zda souhlasi prijemce a v takovem pripade zobrazi
zpravu uzivateli.
Pozn.: V ukazkovem priklade jsou body 1 a 2 jiz implementovany.
3. Uzivatel se muze prikazem (napr. "join #channel") pripojit ke
zvolenemu kanalu. Aplikace zasle pozadavek na pripojeni klientovi
pomoci hashe jmena kanalu -- tento klient pak kanal spravuje, tj.
eviduje pripojene ucastniky a rozesila jim zpravy (viz bod 4).
Zprava s pozadavkem by tedy mela obsahovat vhodnou identifikaci
pripojujiciho se klienta.
4. Uzivatel muze prikazem (napr. "send #channel message) poslat zpravu
do daneho kanalu pomoci klienta (spravce kanalu), ktery zpravu
rozesle vsem ucastnikum prihlasenym do daneho kanalu. Klient, ktery
zpravu posila, nemusi byt sam prihlaseny. Pokud prihlaseny je, je
mu zprava spravcem kanalu dorucena take.
5. Uzivatel muze prikazem (napr. "leave #channel") opustit dany kanal.
Budouci zpravy z tohoto kanalu mu jiz doruceny nebudou.
---[ Rozsirene zadani ]---
Studenti, kterym se nepodari ulohu dokoncit behem cviceni,
mohou za uspesne dokonceni jeji rozsirene verze do peti
dnu dostat 2 body.
Popis ulohy:
Zakladni zadani predpoklada, ze kanaly jsou pevne svazany s jejich
spravci. Rozsirte implementaci o moznost vytvareni a ruseni kanalu a
jejich presun mezi spravci.
1. Uzivatel muze vytvaret a rusit kanaly prikazem (napr. "create
#channel" a "destroy #channel"). Neni potreba zarucovat, ze kanaly
budou v ramci site unikatni.
2. Pripojovani, odpojovani a posilani zprav do kanalu jiz nebude
vazano na jmeno spravce, ale na jmeno kanalu. Pokud nebude
pozadavek na praci s danym kanalem schopen vykonat primo dany
klient/spravce, preposle pozadavek vsem ostatnim spravcum,
o jejichz existenci vi.
Pri preposilani by mely byt osetreny situace, kdy muze dojit
k zahlceni site nebo zacykleni preposilane zpravy (ignorovani
zpravy, ktera jiz byla preposlana, time-to-live apod.).
3. Pomoci specialni zpravy a prikazu (napr. "migrate #channel user")
bude mozne presunout lokalne spravovany kanal (vcetne vsech
prihlasenych) na jineho spravce. Pri ukonceni behu daneho spravce
budou takto presunuty vsechny jim spravovane kanaly na libovolneho
jineho spravce, o jehoz existenci vi (pokud takovy existuje).
More information about the NSWI080
mailing list