ApolloCrawler / microcrawler-webapp

Microcrawler Web Application written in Elixir / Phoenix
MIT License
2 stars 3 forks source link

Coordinator #47

Open korczis opened 7 years ago

korczis commented 7 years ago

Features

Implementation

Braindump

sha({worker, processor, url}) => {state, timestamp}

state = requested | queued | done

scenare 1) Process 1 chce nejakou praci, tak si rekne koordinatorovi. Ten zadny takovy zaznam nenajde, tak si ulozi requested a zacne process 1 monitorovat. 2) Process 2 chce stejnou praci, tak si rekne koordinatorovi. Ten najde zaznam requested, tak si tam zadost prida a zatim neodpovida. 3) Process 1 spadne. Koodinator najde zaznam requested (podle pidu, ktery spadnul) , najde v seznamu process 2, tak ho monitoruje a posle mu ok. 4) Process 2 posle praci do rabbita a rekne koordinatorovi, ze queued. Koordinator pokud najde zaznam requested, tak vsem ve fronte cekajicich rekne ne - prace uz je v queue a vytvori zaznam queued Pozn.: Pokud worker spadne mezi tim, co poslal praci do rabbita a tim, ze posila koordinatorovi queued, koordinator smaze zaznam requested a pokud v te chvili nekdo pozada o stejnou praci, muze bezet 2x. Ale to je hodne mala pravdepodobnost (nema proc spadnout). 5) Process 3 chce stejnou praci, ale koordinator rekne ne, protoze queued 6) Worker 1 dostane z rabbita praci, kdyz spadne, rabbit to posle jinam 7) Kdyz worker praci dodela:

chovani koordinatora 1) request

Obecne kdyz koordinator spadne, tak se proste prijde o stav a nektere vypocty se muzou spustit vicekrat. Ale po case se to zase ustali...

bossek commented 7 years ago

Currenly coordinator implements only 'Prevent Duplicate Work' feature. Feature 'Re-queue Work' will be handled by RabbitMQ.