Razširjanje sporočil nadgradite z zagotavljanjem vrstnega reda dostave sporočil aplikaciji:
-
Pripravite ogrodje za razširjanje sporočil, ki na vsakem procesu vzpostavi medpomnilnik za sporočila in vključuje metode za
- pošiljanje sporočil,
- sprejemanje in shranjevanje sporočil v medpomnilnik,
- izbiranje sporočila glede na zahteve vrstnega reda dostave in
- posredovanje izbranega sporočila aplikaciji.
-
Sporočila dopolnite s potrebnimi metapodatki, ki vam bodo omogočali izbiranje sporočil za pošiljanje glede na uporabljeno shemo.
-
Za komunikacijo lahko uporabite protokol UDP, protokol TCP, ali eno od rešitev za oddaljeno klicanje metod.
Podprite eno od spodnjih različic za razširjanja sporočil z zagotavljanjem vrstnega reda dostave:
-
Pri vzročnem razširjanju nadgradite razširjanje z govoricami z mehanizmom, podobnim vektorskim uram. Sledite psevdo algoritmu. Da zagotovite deterministično obnašanje procesov, naj pošiljatelj iz konfiguracijske datoteke prebere oznake prejemnikov sporočila.
-
Pri popolnoma urejenem razširjanju FIFO sledite pristopu z enim voditeljem. Za povečanje odpornosti uporabite algoritem raft, pri tem lahko izhajate iz obstoječe kode ali knjižnice za jezik go. Popolnoma urejeno razširjanje FIFO zagotavlja skupina procesov v shemi raft, kjer ni zunanjih odjemalcev - odjemalci so kar procesi v shemi raft (sledilci, kandidati, voditelj) in voditelju pošiljajo sporočila. Naloga voditelja je, da prejeta sporočila v zahtevanem vrstnem redu razširi na vse sledilce.
Procesi naj ob zagonu preberejo konfiguracijsko datoteko v fromatu json
(primer izziv.json). Za branje datotek lahko uporabite paket json. Konfiguracija vključuje:
- število procesov (
processes
), - urnik (
schedule
) prenašanja sporočil med procesi, ki vključuje poljubno število zapisov z naslednjimi podatki:- oznako pošiljatelja (
sender
), - seznam prejemnikov (
receivers
), - sporočilo (
message
), - čas začetka pošiljanja sporočila (
timestart
) v sekundah - ob tem času pošiljatelj sporočilo pošlje prvemu procesu v tabelireceivers
, - časovni zamik (
delay
) pred pošiljanjem sporočila naslednjemu procesu v seznamureceivers
(podan v sekundah).
- oznako pošiljatelja (
Da bodo procesi kolikor toliko časovno usklajeni, bomo vse procese zaganjali na enem vozlišču. Procese oštevilčite od 0..processes
-1. Ob vzpostavitvi naj vsi procesi vprašajo proces
Seveda najprej zato, da porazdeljene algoritme bolje razumete in da se še bolje spoznate z jezikom go.
Potem pa tudi zato, da si zagotovite lepšo končno oceno. Končna ocena predmeta je sestavljena iz ocene domačih nalog (50 %) in iz pisnega izpita (50 %). Pravilna in lepo predstavljena rešitev za vzročno razširjanje vam h končni oceni prinese do 10 %, prepričljiva rešitev s popolnoma urejenim razširjanjem FIFO pa do 30 %.
Rešitve morate oddati najkasneje do srede, 15. 1. 2024, in jih uspešno zagovarjati pred prvim izpitnim rokom.
Rešitev naložite na učilnico in jo zagovarjate profesorju. Na zagovoru
- predstavite kodo in
- demonstrirate pravilnost delovanja (lahko na gruči ali na vašem prenosniku)
- zanimivi testni primeri
- dogodke beležite z vektorskimi urami, dnevnik vizualizirate, ...