Cache po stronie serwera WWW czyli lepsza wydajność w wolnym internecie

Tempo działania serwisu WWW zależy od tempa działania klientów.

Proces serwera WWW musi nie tylko wygenerować odpowiednią stronę, ale także dostarczyć ją klientowi. To drugie wymaga poczekania, aż klient odbierze dane. Gdy strona jest spora (kilkadziesiąt kB i więcej - co nie jest wcale rzadkie dla stron wypełnianych stosami funkcji JavaScriptowych) a klient korzysta z wolnego łącza (np. użytkownik modemu, który zresztą może równocześnie oglądać kilka stron albo ściągać w tle jakieś pliki), może to trwać paręnaście sekund albo i więcej - przez które nasz proces jest wyłączony z działania i nie obsługuje innych użytkowników.

Problem jest szczególnie istotny w zastosowaniach, w których używamy różnorakich mechanizmów dynamicznego generowania stron (choćby PHP czy mod_perl w Apache) - których ubocznym efektem jest zwiększenie rozmiaru procesów serwera WWW. Nasz duży, zajmujący sporo pamięci proces, zostaje przez wolnego klienta wyłączony na pewien czas z działania.

Rozwiązanie jest proste - warto 'przykryć' główny serwer WWW lżejszym mechanizmem proxy (np. Squid albo odchudzony Apache zawierający niemal wyłącznie mod_proxy), który może działać na tym samym lub innym komputerze. Główny serwer WWW komunikuje się jedynie - przy pomocy szybkiego łącza - z serwerem proxy, a ten ostatni czeka aż klient zakończy działanie. Publikowanym adresem naszego serwisu jest adres proxy, właściwy adres możemy ukryć (wymaga to pewnych dodatkowych działań - trzeba stosować bezwzględne odsyłacze albo odpowiednie dyrektywy base).

Opisywany mechanizm ma też pewną dodatkową zaletę - proxy odsiewa nieprawidłowe komunikaty HTTP, zabezpieczając przed nimi główny serwer.

Znacznie więcej informacji na temat tego problemu i jego rozwiązania można znaleźć w ramach dokumentacji mod_perla. Choć powyższy dokument koncentruje się na przykładach dotyczących perla i Apache, przedstawione informacje mają ogólne zastosowanie.

Pokrewnym zagadnieniem jest sprawa publikowania obrazków. Zwłaszcza jeśli mechanizmu proxy nie używamy, warto rozważyć wykorzystywanie osobnego, odchudzonego serwera WWW do ich publikacji - by nie zajmować tym serwera aplikacji.

Oczywiście działania tego typu warto prowadzić, gdy nasz serwis cieszy się dużą popularnością i strojenie jego wydajności staje się dla nas istotne.

komentarze obsługiwane przez Disqus