ugrás a tartalomhoz

Szerver oldali cache elévülése

vbence · 2007. Május. 9. (Sze), 12.43
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?
 
1

Filerendszer

janoszen · 2007. Május. 9. (Sze), 13.35
Te ez egy jó gondolat, már régen foglalkoztat. Én virtuális filerendszert írtam, amelyikben minden fájlnak van egy modified timestampje, amit a modulok szépen frissítgetnek is és ez alapján küldi ki a cache control headereket...
2

Virtuális fájlrendszer?

vbence · 2007. Május. 9. (Sze), 13.48
Elég komolyan hangzik :) Én azért szeretnémk valódi fájlokat használni, hogy minél kisebb "költséggel" (értsd: overhead) futhasson a tömeges kiszolgálás.
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.
3

Próbálkoztam

janoszen · 2007. Május. 9. (Sze), 14.57
Próbálkoztam vele, de az egyes platformok között olyan brutális különbségek vannak plusz a jogosultságkezeléssel szívás plusz a kereséssel szívás plusz plusz plusz, hogy a fájlrendszer sokkalta lassabb és bonyolultabb az adatbázisnál, ha valamennyire szofisztikált adatokat kell eltárolni. Egyszerűen nem erre való a fájlrendszer.

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.
4

Indexfájl

vbence · 2007. Május. 9. (Sze), 15.20
Azért hozzátartozik a dologhoz, hogy nem száműzném az adatbázist. Úgy gondoltam, hogy az eredeti fájlokból kiolvasott metaadatokat (gyakorlatilag minden fájltípushoz lehet) egy XML fájlban (tulajdonképpen egy index) tartanám. Még az SQLite-ot is számba veszem.

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).
6

Csomó probléma

janoszen · 2007. Május. 9. (Sze), 16.56
Tapasztalatból mondom, hogy ez nagyon nehezen járható út. De tényleg. Elég átmenned egy máshogy bekonfigolt szerverre és lerohad az egész. Hidd el, kipróbáltam.

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.
7

Alaklamzott technikák

vbence · 2007. Május. 10. (Cs), 10.33
Ahogy én végiggondolom a dolgot PHP-ben a legtöbb dolog megoldható. Ha emellé odateszed a mod_rewrite-ot, akkor gyakorlatilag mindent lefedtél.

Í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)...
5

Smarty - Apache mod_cache - Simlink - Linux

nevemrock · 2007. Május. 9. (Sze), 15.34
Tényleg profi gondolat és érdekes téma, de mi van akkor ha pl.: egy adatlapon hibáznak és hibaüzit kell kiírnod a user-nek a tárgy oldalra.
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