Szerver oldali cache elévülése
Egy hete kacérkodom egy fájl alapú CMS gondolatával. Egyik funkciója lenne, hogy a feltöltött minimális HTML fájlokból (mondjuk XSLT vagy PHP) segítségével előállítsa a kész oldalt (tehát ellássa a dizájn, navigációs stb. elemekkel).
Az elkészült (átalakított) oldalt természetesen elmentené szerveroldalon, és a továbbiakban ezt szolgálná ki. A kérdés az, hogyan érzékelje, ha az eredeti fájl változott, mert ilyenkor újra kell "fordítani" a megdizájnolt változatot is. Az ellenőrzés minél alacsonyabb szinten géne, hogy zajlodjon.
Vitaindítónak itt egy meglehetősen buta megoldás:
A CACHE fájlok (fájlnév) végén lesz egy időbélyeg pl: 200705091152, azaz a mod_rewrite {$TIME}-ja másodperc nélkül. Ha ilyen cache fájlt talál a szerver, akkot kiszolgálja. Tehát egy percen belül nem lesz két ellenőrzés.
Ha nincs eléggé új cache fájl, akkor egy minimális PHP szkript kapná meg a vezérlést, ami csak a fájl és a cache-fájl módosítási idejét hasonlítaná össze. Ha az eredeti fájl módosult, újrafordítjuk, ha nem, akkor csak a cache-fájl végén frissítjük az időbélyeget (átnevezés). Ez percenként egy alkalommal még kibírható.
Öteltek? Esetleg más apache modul segítségével?
■ Az elkészült (átalakított) oldalt természetesen elmentené szerveroldalon, és a továbbiakban ezt szolgálná ki. A kérdés az, hogyan érzékelje, ha az eredeti fájl változott, mert ilyenkor újra kell "fordítani" a megdizájnolt változatot is. Az ellenőrzés minél alacsonyabb szinten géne, hogy zajlodjon.
Vitaindítónak itt egy meglehetősen buta megoldás:
A CACHE fájlok (fájlnév) végén lesz egy időbélyeg pl: 200705091152, azaz a mod_rewrite {$TIME}-ja másodperc nélkül. Ha ilyen cache fájlt talál a szerver, akkot kiszolgálja. Tehát egy percen belül nem lesz két ellenőrzés.
Ha nincs eléggé új cache fájl, akkor egy minimális PHP szkript kapná meg a vezérlést, ami csak a fájl és a cache-fájl módosítási idejét hasonlítaná össze. Ha az eredeti fájl módosult, újrafordítjuk, ha nem, akkor csak a cache-fájl végén frissítjük az időbélyeget (átnevezés). Ez percenként egy alkalommal még kibírható.
Öteltek? Esetleg más apache modul segítségével?
Filerendszer
Virtuális fájlrendszer?
Azon is gondolkodtam, hogy PHP-ben lehetne írni egy nagyon egyszerű WebDAV implementációt, ami már lehetővé tenné, hogy trigger-szerűen függvények fussanak le a módosításkor / feltöltéskor. Ez egycsapásra megoldaná a cache-problémát. Az apache2 beépített DAV-ját még nem néztem, de talán azzal is megoldható ez a trigger-szerű működés.
Próbálkoztam
Az adatbázis lehet, hogy első körben lassabb, viszont nagyban segíti a cachelést és a struktúrált adattárolást és abban behozza a dolgot. Most egy tesztprojekten úgy, hogy baromi lassú hackeket kellett használni a PHP 4 miatt ott tartok, hogy éles, terhelés alatt levő szerveren jogosultságokat lekezelve (!) 0.039 másodperc alatt generál ki egy oldalt SQL FS-ből.
Indexfájl
A keresés az tényleg kicsit problémás, de ott a google, aki szivesen elvállalja. Időrend, tagek meg archívum, sőt többnyelvű változatok is símán megoldhatóak egyetlen index állományból. (Amit ugyebár szintén frissíteni kell ha módosítás történik).
Csomó probléma
Ami a filerendszeremben igazából a poén, bár ez csak menet közben alakult ki, hogy részben nem on-the-fly generálódnak le a dolgok, hanem szépen elő vannak készítve. A szerkesztőfelület valamivel bonyolultabb, a lekérő viszont egyszerűbb.
Alaklamzott technikák
Írhatnál pár technikai problémát, ami neked felmerült, illetve milyen technikákat használsz a mostani rendszerben (az a betöltési idő elég impresszív)...
Smarty - Apache mod_cache - Simlink - Linux
Tudom nem annyira téma de Smarty cache-t használtam, és az is elég jónak tűnik.
De komoly terhelés csökkentés lehetne.
- Apache - mod_cache
- Linux Simlink
- template rendszer