X dlouhotrvajících úloh pro Y uživatelů webu rubrika: Programování: PHP
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
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:
Nebo se přihlaste jménem a heslem: