Nette a Clustery – použití cache a FileStorage?

Polki
Člen | 553
+
0
-

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í:

  1. 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
  2. Ukládat počet na všechny stanice z clusteru – značně neefektivní z důvodů duplicity
  3. 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
  4. Ú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?

Jan Tvrdík
Nette guru | 2595
+
+6
-

Použijte Redis.