Cytat(Gość @ 28.11.2012, 23:33:23 )

Na podanej stronie jest napisane:
"Generalnie cache służy do przyspieszenia generowania strony oraz do zmniejszenia obciążenia systemu."
Stąd miałbym pytanie. Powiedzmy, że na jakiejś stronie www jest bardzo duży ruch i w wyniku przeciążenia serwera strona ta przestaje działać.
Czy gdyby na tej stronie wiele rzeczy było cacheowanych (np. odwołania do plików tekstowych, czy relacyjnej bazy danych), to strona ta dzięki temu miała by dużo większe szans działać (mimo ogromnego ruchu), bo obciążenie serwera byłoby znacznie mniejsze (właśnie dzięki temu cacheowaniu)?
Dobrze rozumiem?
Mniej więcej tak.
Ostro trywializuję poniżej, więc proszę forumowiczów: nie lać i nie wymądrzać się na temat poniższego.
Jak działa strona niecachowana:
Skrypt leci po kolei po poleceniach, a tam gdzie napotka zapytania sql to zadaje pytania bazie i czeka na jej odpowiedz.
Jak dostanie odpowiedź z bazy, to musi ją obrobić w jakąś wizualną formę i wysłać jako kod HTML
Jeśli zapytań na stronie/skrypcie będzie np. 20 to zabawę z odpytywaniem bazy, czekaniem na odpowiedź i obrabianiem odpowiedzi skrypt musi zrobić 20x.
To trwa, blokuje połączenia serwera www, angażuje bazę danych, zużywa czas procesora i RAM.
Jeśli internautów wchodzących na daną stronę w sekundzie będzie 100, to trzeba sobie powyższe przemnożyć (zużycie RAMu i procesora też).
Ale jeśli tychże 100 internautów i tak ma dostać to samo, to po co 100x łączyć się z bazą i czekać na odpwoiedzi?
I tutaj wkracza właśnie cache - stronę lub jej fragmenty można przechowywać jako pliki cache, a nie generować za każdym razem.
Wystarczy w skrypcie zawrzeć, żeby sprawdzał czy jest plik cache i jest ważny w czasie - wtedy przy pierwszym internaucie trzeba zrobić procedurę jak powyżej, z tym ze wyniki zapisujemy sobie do pliku cache.
Ale przy pozostałych 99 już nie trzeba angażować bazy danych, tylko wysłać im gotowe, przygotowane w plikach cache dane - oszczędność zasobów serwera kolosalna, a tym samym można obsłużyć więcej internautów.
Oczywiście wszystko zależy od typu serwisu i zmienności danych, ale użycie cache pozwala całkiem sporo zwiększyć "wytrzymałość" serwera.
Z porad praktycznych:
1. nie trzeba cacheować całych stron, można przechowywać w cache ich części, niezmienne elementy (np. boksy z newsami)
2. ważność czasowa oznacza, że dany plik cache (czyli strona lub jej elementy) jest ważny przez określony czas, a później zostaje odświeżony na podstawie odpowiedzi z bazy.
Nijak nie uciekniemy od tego, ze serwer www musi obsłużyć zapytanie internauty, ale co innego gdy do wysłania gotowej strony www będzie potrzebny tylko serwer www + pliki cache,
a co innego gdy będzie potrzebny serwer www + serwer bazy danych + cała zabawa w obróbkę danych.