Wydajność

Istnieje kilka sposobów na zwiększenie wydajności serwisu WWW. Można je podzielić na takie, które nie wymagają zmian w samym serwisie, a jedynie w konfiguracji serwera/serwerów i takie, gdzie sam serwis musi ostać zmodyfikowany.
Wybór i konfiguracja serwera WWW
Wielu usługodawców wybiera serwer Apache jako bardzo uniwersalny i elastyczny. Jego możliwości konfiguracyjne są tak duże, że można je dostosować do wymagań każdego klienta. Niestety nie jest to najszybszy serwer. Dla dedykowanych serwisów często wybiera się inne rozwiązania: serwery "jednoprocesowe" np. lighttpd. Są to serwery, które potrafią obsługiwać o wiele większą ilość jednocześnie połączonych klientów, a ich konfigurację najczęściej da się dostosować do serwisów, które działały wcześniej na Apache.
Farma serwerów WWW
Jest to często stosowana technika nie wymagająca żadnych zmian w serwisie. Umożliwia ona zwiększenie wydajności przez przyśpieszenie działania serwera WWW (wykonywanie kodu PHP, serwowania kontentu statycznego). Polega na umieszczeniu serwowanych dokumentów i skryptów PHP na serwerze plikowym np. za pomocą NFS, do którego ma dostęp kilka identycznych serwerów WWW. W ten sposób każdy z nich może zająć się obsługą serwisu. Rozdzielenie ruchu może odbywać się np. za pomocą DNS (najprostszy sposób). Takim przykładem jest strona główna Google, jeżeli użyjemy narzędzia do sprawdzenia adresu IP www.google.com zobaczymy, że takich adresów jest kilka. Widać, że jest to jedna z technik używana przez google do rozdzielenia obciążenia na wiele serwerów.
Reverse proxy
Zastosowanie reverse proxy jest jednym ze sposobów aby przyśpieszyć serwis, który musi działać z Apache. Jest to serwer proxy skonfigurowany tak, że użytkownicy łączą się do niego, a on dopiero do właściwego serwera WWW. Jest to konfiguracja niewidoczna dla użytkownika i prawie niewidoczna dla serwisu. Pozwala ona przede wszystkim zlikwidować jedną z wad Apache: niewydajną obsługę połączonych równocześnie dużej ilości klientów.
Rozdzielenie sposobów serwowania kontentu w zależności od rodzaju
Jest to jedna z technik, które wymagają niewielkich zmian w serwisie. Polega na wydzieleniu osobnego hosta, który serwuje tylko kontent statyczny (obrazki, pliki .css itd.) podczas gdy inne zajmują się głównie kontentem dynamicznym (PHP). Jako, że największa ilość żądań w dzisiejszych serwisach polega właśnie na pobraniu dużej ilości plików graficznych (w tym elementów strony takich jak obrazki "zaokrągleń", miniaturki) jak również innych (np. kilka plików .css dla pojedynczej stronie) to wydzielenie ich pozwala na skonfigurowanie dedykowanego serwera/serwerów z konfiguracją, która jest wydajna dla tego typu obciążenia. Rozwiązanie to widać w dużych serwisach, można np. wejść na stronę http://poczta.wp.pl i zobaczyć, że elementy graficzne oraz część kodu JavaScript jest ładowana z innego hosta (i.wp.pl).
Bazy danych
Baza danych to często szeroki temat do optymalizacji, szczególnie jeżeli taka optymalizacja nie była nigdy wykonywana. Mamy tutaj wiele możliwości:
- Analizę i optymalizację zapytań - jest to podstawowa rzecz od której należy zacząć.
- Optymalizacja struktury bazy: indeksów, partycjonowania tabel, stworzenie procedur itd.
- Pooling połączeń do bazy. Przez specyfikę obciążenia serwisów internetowych - dużo szybkich zapytań w wielu połączeniach ustanawianych tylko na czas generowanie odsłony - czasami baza danych jest obciążona samym przyjmowaniem połączeń w większym stopniu niż wykonywaniem zapytań. Taka sytuacja dotyczy szczególnie niektórych baz danych (np. PostgreSQL) i pomocne okazuje się użycie narzędzia zapewniającego pooling połączeń.
- Load balancing za pomocą replikowanej bazy. Jest to technika, która wymaga (być może niemałych) zmian w serwisie.
- Optymalizacja konfiguracji samej bazy: rozmiarów cache i innych parametrów.
Mechanizmy wyszukiwania i inne sposoby
Istnieją również techniki, które wymagają zarówno zmian w samym serwisie jak i odpowiedniej konfiguracji, których nie da się implementować jeżeli używany hostingu, a nie dedykowanego serwera. Są to np:
- Użycie alternatywnych mechanizmów wyszukiwania pełnotekstowego zamiast tych, które oferuje baza danych. Przykładem jest mechanizm Sphinx.
- Cache elementów lub całych stron serwisu przy użyciu memcached.
W praktyce...
Należy zacząć od diagnostyki! jeżeli "w ciemno" spróbujemy którejś z technik może się okazać, że wąskim gardłem było coś innego, więc czas i pieniądze na sprzęt zostały zmarnowane. W praktyce też stosuje się kilka opisanych technik równocześnie.
Oferuję doradztwo i konfigurację serwerów na wszystkie opisane sposoby, po wcześniejszej analizie serwisu. Jeżeli chcesz się dowiedzieć czy twój serwis może działać szybciej i jakie są tego koszty, skontaktuj się ze mną.