Wiadomości

Jak zapewnić wydajność i dostępność strony internetowej?

25 sierpnia 2008 16:13,
Kamil Folga

Prowadzę stronę internetową, która w ostatnim okresie notuje znaczne zwiększenie liczby odwiedzin. W momentach najwyższego obciążenia, serwer obsługujący stronę odmawia odpowiedzi na zapytania. Chciałbym zainwestować w kolejne serwery i zrealizować mechanizm balansowania obciążeniem serwerów. Czy jest na to prosta metoda?

Zasoby każdego serwera są ograniczone. Aplikacja lub strona WWW o dużym obciążeniu, powinna wykorzystywać nie jeden, a wiele serwerów w celu zaakceptowania zwiększonej liczby użytkowników. Problem skalowalności dotyczy głównie serwerów internetowych, w których liczba użytkowników rośnie wraz z dostępnością łącz szerokopasmowych. Balansowanie obciążeniem to partycypowanie wielu serwerów w tej samej usłudze, realizujących te same zadania. Przy dużej ilości maszyn zawsze istnieje ryzyko uszkodzenia jednego z serwerów. Zdolność poprawnego funkcjonowania w momencie błędnego zadziałania usługi określa się mianem dostępności.

Najłatwiejszą drogą do wprowadzenia balansowania obciążeniem jest dedykowanie serwerów predefiniowanym grupom użytkowników. W podstawowej konfiguracji serwera nazw, domena jest rozwiązywana przez serwer na jeden adres IP. Co stanie się, gdy dana nazwa będzie rozwiązywana na kilka adresów IP, czyli kilka fizycznych serwerów? Otrzymamy prosty i skalowalny mechanizm balansowania obciążeniem. Przykładową metodą realizującą te założenia jest mechanizm Round Robin DNS. Wykorzystując RR DNS użytkownicy będą otrzymywali różne adresy IP dla tej samej nazwy serwera. Jak ten proces wygląda od strony użytkownika? Spróbujmy zapytać o rekordy typu A powiązane z domena google.com:

dns:~# host -t a google.com
google.com has address 72.14.207.99
google.com has address 64.233.187.99
google.com has address 64.233.167.99

Sprawdzamy ponownie po kilku sekundach:

dns:~# host -t a google.com
google.com has address 64.233.187.99
google.com has address 64.233.167.99
google.com has address 72.14.207.99

W przypadku serwera BIND możemy zrealizować identyczną usługę przez wprowadzenie następującej konfiguracji w ramach strefy danej domeny:

www IN CNAME serwer1.domena.pl.
IN CNAME serwer2.domena.pl.
IN CNAME serwer3.domena.pl.
IN CNAME serwer4.domena.pl.

Serwer DNS będzie rozwiązywał nazwę www.domena.pl rotacyjnie na jeden z wielu wprowadzonych konfiguracyjnie serwerów (serwer1.domena.pl, serwer2.domena.pl, serwer3.domena.pl, serwer4.domena.pl). W rezultacie użytkownicy będą kierowani na różne fizycznie serwery. To jest bardzo popularna metoda równoważenia obciążenia, ale nie zapewnia wymaganej dostępności. Serwer DNS nie ma informacji o dostępności serwera WWW, więc kontynuuje przełączanie nawet na niedostępne serwery.

Trudno w tym przypadku mówić o wysokiej dostępności. Można powiedzieć, że tym sposobem realizowana jest dystrybucja obciążenia. Niektóre z tych niedogodności mogą zostać usunięte przez implementację zaawansowanej wersji mechanizmów DNS, realizowanych przy wykorzystaniu dodatkowych skryptów. Konieczne będzie okresowe sprawdzanie statusu każdego z serwerów i przełączanie na poprawnie pracujące serwery w przypadku awarii. Dodatkową komplikację będzie stanowiła konieczność ustawienia krótkiego czasu TTL danej strefy, po upływie którego klient powinien jeszcze raz odpytać serwer nazw o daną domenę. Taka konfiguracja powoduje jednak znaczne zwiększenie obciążenia serwera nazw.

Niektóre odmiany mechanizmów równoważenia obciążenia mogą zostać przeprowadzane przy wykorzystaniu serwerów pośredniczących (proxy), w których są one wykorzystywane do balansowania ruchem rzeczywistych serwerów.

Zaawansowane rozwiązania oparte są o sprzętowe mechanizmy balansowania obciążaniem oraz realizację wirtualnych serwerów. Wśród niekomercyjnych rozwiązań bardzo popularnym rozwiązaniem jest LVS. Linux Virtual Server jest wirtualnym i skalowalnym serwerem zbudowanym w oparciu o klaster rzeczywistych serwerów. Oprogramowanie zawierające wbudowany mechanizm balansowania obciążeniem jest dedykowane dla systemu operacyjnego Linux. Architektura serwera jest w pełni przeźroczysta dla końcowego użytkownika. Rzeczywiste serwery mogą być połączone zarówno przez sieć LAN oraz WAN. Od strony użytkownika widoczny jest jeden serwer z jednym adresem IP. Skalowalność systemu jest realizowana przez przeźroczyste dodawanie i usuwanie węzłów klastra. Wysoka dostępność jest realizowana przez węzły wykrywające usterki, a następnie automatycznie rekonfigurujące system. Istnieje wiele systemów zarządzania klastrami, które w połączeniu z LVM mogą zapewnić wysoką wydajność dla każdej aplikacji.

Co wybrać? W przypadku bardzo prostych rozwiązań i nieskomplikowanych stron, możemy zadowolić się mechanizmem Round Robin DNS. W przypadku zaawansowanych projektów warto wykorzystać darmowe oprogramowanie klastra typu LVS. Najbardziej zaawansowane rozwiązania będą oparte o kompilację opisanych metod oraz rozwiązania sprzętowe.
Ocena:
Twoja ocena:

Komentarze (1)

bonio

18-11-2008 12:15

Artykuł dobry, ale ja jestem ciekaw jak to wyglada od strony np. serwera mysql czyli czy dane muszą być podzielone niezależnie na kilka serwerów np. użytkownicy jedni mają konta na serwerze jednym a innni na innym itp. Natomiast, że serwer balansuje ruch to raczej prosto sobie wyobrazić ale jak postawić 5 serwerów PHP z których byłyby dostępne wszystkie dane?? Może ktoś poruszył taki problem, ciekawe jak jest zbudowana nasza-klasa, choć tutaj łatwo sobie podzielić dane na serwery wg. użytkowników.

Polecane

Przełomowy rok... znowu

Lektura firmowych informacji prasowych i prognoz firm analitycznych nie pozostawia wątpliwości - każdego roku...


Spokój i luz administratora

Wymagania wobec pracowników działów IT rosną proporcjonalnie do stopnia rozwoju teleinformatyki. Oczekuje się, że...


04-204 Warszawa ul. Jordanowska 12
tel.: (+48 22) 321 78 00 fax: (+48 22) 321 78 88
© copyright 2011 IDG Poland SA