X dlouhotrvajících úloh pro Y uživatelů webu rubrika: Programování: PHP

1 peanee
položil/-a 15.3.2015

Ahoj,

webová aplikace (PHP - Nette) si po přihlášení uživatele sahá na externí API a data zpracovává (v extrémním případě i 10 sekund).
Proces zpracování dat je například pro skupinu 5-ti uživatelů stejný a nechci (ne že nechci, ale nesmí se to stát!) aby pokud se přihlásí v jeden okamžik všech pět lidí začal proces synchronizace běžet 5×.

Děkuji za rady jak výše uvedený problém realizovat co nejelegantněji

odkaz
7 messa
odpověděl/-a 15.3.2015

Nejelegantnější by asi byla nějaká fronta a worker...

Ale nejjednodušší bude, když uživatele pošleš na stránku, která tohle přihlášení/synchronizaci vyvolá ajaxem - to proto, aby to z pohledu UX běželo "na pozadí" a uživatel nečekal 10 s na načtení stránky.

No a ten synchronizační proces si ty uživatele v db nejdřív "zamkne" - ne databázový zámek, ale prostě si u nich uloží info, že synchronizace zrovna běží a během následující minuty se nemá spouštět znovu (timeout pro případ chyby). Kdyby se synchronizace náhodou spustila paralelně podruhé, tak hned skončí, nebo jen počká. Nic komplikovaného. Pokud synchronizace poběží déle než minutu, tak by bylo fajn ten "zámek" prodlužovat :)

Co znamená, že to nesmí běžet vícenásobně? Už z principu nejistoty síťové komunikace se s tím musí počítat, že se něco může stát dvakrát...

Pro zobrazení všech 4 odpovědí se prosím přihlaste:

Rychlé přihlášení přes sociální sítě:

Nebo se přihlaste jménem a heslem:

Zadejte prosím svou e-mailovou adresu.
Zadejte své heslo.