Jobs manager na serveru

Unlink

Jobs manager na serveru
« kdy: 16. 06. 2017, 20:36:36 »
Zdravím,
navrhujem jednu (webovú) aplikáciu ktorá bude tvoriť úlohy (pod úlohou si predstavte kód napr. v pythone a k nemu dáta). Tieto úlohy chcem posielať na iný server kde sa spracujú. Po spracovaní by sa cez nejaký callback endpoint vo webovej appke poslali výstupy naspäť do aplikácie.

A potreboval by som nejaký manager týchto úloh na tom servery, kde sa budú spracovávať. Niečo čo ich dokáže prijať (buďto nejaký štandardný protokol alebo web service), zaradiť do fronty, spracovať.
Ideálne aby k tomu bolo aj nejaké api, aby som vedel zistiť aké úlohy sa spracovávajú, dĺžku frontu...

Uvažoval som o RabbitMQ len neviem či je to úplne vhodné na tento môj problém, pretože to je asi overkill na to čo potrebujem a vlastne kompletnú prípravu a spracovanie úlohy by som si musel naprogramovať do consumera sám.

Nenapadne niekoho niečo iné čo by sa dalo použiť?
Ďakujem
« Poslední změna: 19. 06. 2017, 13:19:23 od Petr Krčmář »


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jobs manager
« Odpověď #1 kdy: 16. 06. 2017, 21:02:16 »
Nevymýšlej blbosti, napiš si na to několikařádkovej skript a asi takhle

Nějaký sdílení, nfs, samba, sftp, jak je libo

tři adresáře - JOBS, IN, OUT

server s webem v IN vytvoří třeba adresář s nějakým ID, do něj nasype úlohu a data (klidně taky do oddělených adresářů)

až dosype, vytvoří v JOBS soubor ID, kterej bude fungovat jako semafor a zapíše do něj 1

zpracovávající server si skriptem v libovolném intervalu bude hlídat JOBS a pokud je v něm soubor s obsahem 1, spustí úlohu a výsledky sype do OUT.

Až doběhne, přepíše semafor na 2, nebo třeba 3, když bude chyba... cokoliv...

server posílající úlohy si bude taky hlídat adresář a když v něm najde semafor >1, tak si z OUT vezme data, semafor smaže, úlohu taky smaže, nebo přesune, nebo cokoliv...


Pokud se ti nelíbí kontroly s timeoutama, tak stačí, aby každej server poslouchal na nějakým portu, na ten, co zpracovává se pošle třeba to ID a na základě toho si to sám zapíše do fronty a když skončí, pošle zpátky třeba ID + error code.

Můžeš to udělat v bashi, perlu, pythonu, jak je libo, práce max na hoďku a nemusíš na to tahat žádný monstróznosti.

Re:Jobs manager
« Odpověď #2 kdy: 16. 06. 2017, 21:18:02 »
Jak mi nekdo rekne semafor file na smb nebo nfs, tak zacnu byt ostrazity...

Zalezi na spouste dalsich okolnosti, ale co trebas zneuzit jenkins nebo natvrdo vzdalene spoustet pres ssh (pripadne s nejakou nadstavbou nad tim)?

gll

Re:Jobs manager
« Odpověď #3 kdy: 16. 06. 2017, 21:23:50 »
Co je špatného na semafor files?

Re:Jobs manager
« Odpověď #4 kdy: 16. 06. 2017, 21:29:40 »
Co je špatného na semafor files?

Zamykani na sitovych FS muze byt dost problematicka zalezitost - je potreba to poradne rozmyslet a ujistit se, ze zrovna v dane situaci, dane konfiguraci a danem fs jsou potrebne operace atomicke.


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jobs manager
« Odpověď #5 kdy: 16. 06. 2017, 21:42:41 »
Zamykani na sitovych FS muze byt dost problematicka zalezitost - je potreba to poradne rozmyslet a ujistit se, ze zrovna v dane situaci, dane konfiguraci a danem fs jsou potrebne operace atomicke.
v takovýmhle primitivním případě bych v tom neviděl problém, stačí si pohlídat, že to doběhlo, maximálně si k tomu dopsat retry. Pořád je to na pár řádků a přijde mi to lepší, než do toho tahat Jenkins i s javou. A jak jsem psal, lepší možná bude poslouchat na nějakým portu, ty timeouty by mě principiálně štvaly víc, jak ten semafor.

DK

Re:Jobs manager
« Odpověď #6 kdy: 16. 06. 2017, 21:43:56 »
Tohle je presne ten typ akci, kde se pouziva nejaka MQ pro transport. RabbitMQ je dobra volba a existuje spousta knihoven  pro snadnou integraci (za predpokladu, ze programator nema zmatek v pojmech jako queue, exchange, binding). Pri pouziti dead-letter exchanges a spravneho zpracovani na klientech je pak zajistena i jista trasovatelnost.

gll

Re:Jobs manager
« Odpověď #7 kdy: 16. 06. 2017, 21:51:37 »
Co je špatného na semafor files?

Zamykani na sitovych FS muze byt dost problematicka zalezitost - je potreba to poradne rozmyslet a ujistit se, ze zrovna v dane situaci, dane konfiguraci a danem fs jsou potrebne operace atomicke.

To se dá vyřešit lokálním lockfilem pro každou úlohu. Úlohy spouštět příkazem lockfile.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Jobs manager
« Odpověď #8 kdy: 16. 06. 2017, 22:06:54 »
Nebo ano.. když nad tím přemýšlím... přes scp nahrnout program a data a spustit pomocí ssh -f nějakej skript, kterej to přidá do fronty, pokud už neběží, začne ho zpracovávat, pokud už běží, tak se vypne a ta běžící instance si po dokončení jobu zkontroluje frontu a jestli je prázdná, tak se vypne, jestli ne, vezme další job.

To samý na druhou stranu, když se dokončí job, spustí se sshčkem něco na druhé straně, co si přidá hotovej job do fronty a pokud už běží, vypne se, pokud ne, začne stahovat zase přes scp, případně zpracovávat data. Když dostahuje, opět zkontroluje frontu a buď jde na další, nebo se vypne.

Logik

  • *****
  • 854
    • Zobrazit profil
    • E-mail
Re:Jobs manager
« Odpověď #9 kdy: 16. 06. 2017, 22:19:53 »
Dobrý zkušenosti s tím mam se slurmem. Je to teda primárně pro víc worknodů, ale to by nemělo vadit. Umí to všechny takový hezký věci jako priority atd..., a přitom se to nainstaluje velmi snadno.

Jose D

  • *****
  • 626
    • Zobrazit profil
Re:Jobs manager
« Odpověď #10 kdy: 16. 06. 2017, 22:59:55 »
..manager týchto úloh ..
slurm