Nette a Clustery – použití cache a FileStorage?
- Polki
- Člen | 553
Hey. Zdravím borci.
Máme za sebou ve vývoji pár aplikací. Jedna z nich se ovšem rozrostla a tím pádem je nedstačující kapacita serveru a jako návrh byl předložen Cluster.
V naší Nette aplikaci dochází ke Cachování pomocí výchozího FileStorage. To ovšem může být značný problém v našem případě.
V aplikaci máme nějaké produkty a tyto se zobrazují uživateli. V případě, že ale uživatel vejde na detail produktu, inkrementujeme počítadlo přístupů (toto ale provedeme pouze uvnitř cache, abychom nemusely data promítnout do DB, kdybychom musely, tak by nějaké cachování bylo zbytečné.) No a zde narážíme na kámen úrazu.
V případě, že je server rozložen jako Cluster, tak každý tento cluster má svou FileStorage a pokud by šlo jen o načítání prvků z DB a ukládání do cache, tak to je ještě ok. Ovšem čítač přístupů je docela problém, když je uložen pouze v Cache, jelikož díky němu nevíme, která ze stanic clusteru má v sobě uloženou aktuální hodnotu počítadla. Tedy při inkrementaci, popřípadě zpracování dat může dojít k chybě.
Napadají mě 4 řešení:
- Udělat si nějakou mapu, u které budu vědět, která část clusteru se stará o načítání jaké části dat z DB a tedy ukládání cache pro dané záznamy
- Ukládat počet na všechny stanice z clusteru – značně neefektivní z důvodů duplicity
- Udělat nějaký společný cache systém (stanici), která bude tato data o přístupech používat – problém je ovšem opět v počtu přístupů, kvůli čemuž se volí cluster
- Úplně se vykašlat na nějaké Cachování – No a zde máme problém s miliony dotazů do DB.
Nějaké nápady? Možná změnit úložiště cache?