Akceleracja działania aplikacji w sieci

Akceleracja działania aplikacji w sieci sxc.hu

Wykorzystanie specjalizowanych sieciowych urządzeń akcelerujących jest sposobem na zwiększanie wydajności systemu bazującego na mocy serwerów. Urządzenia takie są w stanie znacząco przyspieszyć dostarczanie treści do klienta końcowego.

W ostatnich latach nastąpił gwałtowny rozwój aplikacji biznesowych, które dostępne są m.in. poprzez sieć Internet dla masowego odbiorcy. Większość z nas korzysta z bankowości internetowej czy systemów billingowych udostępnianych przez operatorów. Wzrastająca popularność tego typu aplikacji oraz liczba użytkowników skutkuje częstymi problemami z wydajnością systemów, co dla zwykłego użytkownika objawia się np. wolnym działaniem lub wręcz niemożliwością zalogowania się.

Najczęściej stosowanym rozwiązaniem minimalizującym problemy z wydajnością jest rozbudowa farm serwerów obsługujących dany system. W przypadku problemów z przepustowością centralnego łącza do Internetu stosuje się jego rozszerzanie. Obie metody, choć oczywiście skuteczne, mają jednak jedną poważną wadę - koszty. Alternatywą dla zwiększania wydajności systemu bazującego na mocy serwerów jest wykorzystanie specjalizowanych sieciowych urządzeń akcelerujących. Równie ważne jest to, że urządzenia takie są w stanie znacząco przyspieszyć dostarczanie treści do klienta końcowego, co wpływa na jego satysfakcję.

Jakie były początki?

W latach 90. ubiegłego wieku rozpowszechnił się bezpieczny dostęp do systemów internetowych w oparciu o protokół SSL. Przyczynił się do tego przede wszystkim rozwój sklepów internetowych. Obecnie dostęp internetowy do praktycznie każdego systemu przetwarzającego dane poufne odbywa się z wykorzystaniem SSL. SSL (mimo pojawiających się luk) został zaakceptowany jako rozwiązanie bezpieczne i wygodne dla każdego użytkownika. Wymiana kluczy oraz szyfrowanie transmisji wykorzystywane w SSL wymaga jednak sporej mocy obliczeniowej, co wiąże się z koniecznością wykonywania przez serwer (oraz klienta) złożonych wyliczeń matematycznych. Szacuje się, że wydajność serwera obsługującego transmisje SSL może być kilkanaście lub kilkadziesiąt razy niższa niż wydajność serwera terminującego zwykłe sesje http. Jest to spowodowane faktem, że procesory ogólnego przeznaczenia nie radzą sobie dobrze z wykonywaniem operacji na bardzo dużych liczbach oraz operacji matematycznych niezakodowanych wprost w instrukcjach podstawowych procesora. W związku z tym prosta implementacja SSL na serwerach webowych powoduje, że marnowana jest większość mocy obliczeniowej tego urządzenia. W takim przypadku musimy stosować serwer kilkukrotnie silniejszy pod względem mocy obliczeniowej niż w przypadku, gdyby terminowane były sesje nieszyfrowane.

Rozwiązanie tego problemu zostało znalezione już dawno - to urządzenia specjalistyczne do obsługi SSL. Najczęściej spotyka się dedykowane karty instalowane bezpośrednio w serwerach lub zewnętrzne urządzenia sieciowe. W pierwszym przypadku karta przejmuje całość obsługi SSL, odciążając w ten sposób procesor serwera. Dedykowane urządzenia sieciowe terminują sesje SSL, co powoduje, że serwery webowe terminują zwykłe transmisje http, nie uczestnicząc w szyfrowaniu danych. Oba rozwiązania pozwalają na uzyskanie znaczących oszczędności finansowych. Drugim problemem, jaki zauważono już w latach 90-tych, była często zbyt mała moc pojedynczych serwerów klasy midrange w stosunku do wymagań aplikacji dostępnych przez Internet. Dochodziły do tego kwestie związane z koniecznością zapewnienia wysokiej dostępności i eliminacji pojedynczych punktów awarii. Stosowanie serwerów high end oraz konfiguracji klastrowych wiązało się najczęściej z radykalnym wzrostem kosztów. Rozwiązaniem okazało się użycie systemów balansujących (sprzętowych lub programowych). Sprzętowe rozwiązania balansujące pozwalają na rozłożenie ruchu na kilka serwerów webowych. Jednak od strony klienta końcowego jest to niezauważalne - odwołuje się on wciąż do jednego adresu (np. www.ebay.com), nie mając często świadomości, że każda jego sesja może być obsługiwana przez inny serwer fizyczny. Od strony dostawcy aplikacji pozwala to na zastąpienie serwerów klasy high end odpowiednią liczbą serwerów niższej klasy, a co za tym idzie - na obniżenie kosztów systemu. Drugą istotną zaletą oferowaną przez load balancery jest zwiększenie niezawodności systemu.

Dobrej klasy urządzenia typu load balancer są w stanie wykrywać nie tylko awarie systemu (np. sytuacje, gdy dane zwracane przez serwer są nieprawidłowe), ale także działać proaktywnie. W przypadku, kiedy liczba sesji obsługiwanych przez dany serwer osiąga pułap, powyżej którego nie można już ich prawidłowo obsługiwać, load balancer zaprzestaje wysyłania na obciążony serwer nowych sesji, przekierowując je na urządzenia mniej wykorzystywane. Także w przypadku awarii serwerów fizycznych system pozostaje wciąż dostępny dla użytkownika końcowego, gdyż ich sesje są przenoszone na serwery pracujące poprawnie.

Co jeszcze można zrobić?

Działalność systemów webowych (jak i całej sieci Internet) opiera się na protokole IP (i najczęściej TCP). Zasady działania protokołu IP w wersji 4 zostały opisane w dokumencie RFC791 opublikowanym we wrześniu 1981 roku. I choć nie zmieniły się one bardzo od tego czasu, realia są już zupełnie inne. Protokół TCP, w oparciu o który odbywa się m.in. transmisja http, był opracowany do działania na wolnych łączach z dużą liczbą błędów i znaczącą utratą pakietów. W związku z tym posiada on wiele cech niezbędnych przed kilkunastu laty, lecz powodujących obecnie poważne problemy wydajnościowe. Dlatego też, budując duży system internetowy i myśląc o jego optymalizacji wydajnościowej, konieczne jest zejście na poziom stosu TCP/IP. Istniejekilka podstawowych sposobów na znaczące przyspieszenie dostępu do systemów internetowych, bazujące na optymalizacji TCP/IP:

TPC Multiplexing

Użytkownik końcowy, łączącsię z stroną internetową, zauważa, że pojedyncza sesja http może wygenerować nawet kilkanaście sesji TCP/IP. I o ile on nie ma z tego powodu większych problemów, o tyle w przypadku serwera obsługującego np. 10 000 użytkowników łączy się to z koniecznością nawiązywania oraz obsługi np. 150 000 sesji TCP. Taka skala wpływa już ewidentnie na obniżenie wydajności serwera. Rozwiązaniem jest zastosowanie specjalizowanego urządzenia sieciowego odpowiedzialnego za akcelerację TPC/IP. Urządzenie takie odpowiada za proces nawiązywania/utrzymywania/zrywania sesji z użytkownikami końcowymi, posiadając z drugiej strony tylko kilka aktywnych sesji TCP/IP do serwera webowego. W takiej sytuacji serwer webowy odpowiedzialny jest praktycznie tylko za dostarczanie treści. Pozwala to nawet na kilkukrotny wzrost liczby obsługiwanych żądań.

Kompresja

Mechanizmy zaimplementowane w protokole TCP/IP pozwalają na kompresjęprzesyłanych danych. Najczęściej stosowanymi algorytmami kompresji są GZIP oraz Deflate. Wykonywanie kompresji na serwerach posiada jednak ograniczenia związane zarówno z wydajnością (procesory ogólnego przeznaczenia nie są w tym najlepsze), jak i maksymalną wielkością danych możliwych do kompresji. Alternatywą jest przeniesienie kompresji na urządzenia specjalizowane, realizujące ją w oparciu o specjalizowane procesory ASIC oraz nieposiadające praktycznie ograniczeń w stosunku do wielkości kompresowanego obiektu. Nowością jest również powiązanie mechanizmów kompresji oraz tzw. http chunkingu. Http chunking pozwala na dzielenie dużych danych na mniejsze porcje - czego rezultatem jest np. przyspieszenie wyświetlania stron WWW.

Sterowanie sesjami TCP/IP

Jednym z głównych problemów związanych z TCP/IP jest przestarzały sposób sterowania nawiązywaniem i obsługą sesji TCP/IP. Wbudowany w protokół mechanizm slow-start powoduje, że osiągnięcie optymalnego pod względem szybkości przesyłania strumienia TCP zajmuje kilka rund. Powoduje to, że w początkowym etapie sesji TCP dane przesyłane są znacznie wolniej niż pozwala na to przepustowość, także po nieprawidłowym zerwaniu sesji szybkość transmisji nowej sesji jest mała i odbudowuje się dopiero stopniowo. Zdarza się, że czas odbudowania pełnej prędkości transmisji liczony jest w minutach. Drugim problemem jest niski standardowy czas podtrzymania sesji. W praktyce powoduje to, że choć użytkownik posiada wciąż aktywną sesję w przeglądarce (gdyż np. przeczytanie strony zajmuje 2 minuty), sesje transmisyjne są w tym czasie zrywane z powodu wygaśnięcia czasu jej trwania. Kontynuacja przeglądania strony powoduje więc konieczność ponownego nawiązywania sesji TCP/IP, co z omówionych powyżej względów jest procesem bardzo niepożądanym. Sposobem na uniknięcie tego problemu jest sztuczne podtrzymywanie sesji TCP/IP wykonywane przez specjalizowane urządzenia sieciowe. W efekcie sesje nie wygasają, a dane żądane przez klienta docierają do niego szybciej. Unika się dzięki temu również obsługi nawiązywania i zrywania sesji TCP, co jest bardzo istotne, bowiem procesy te wymagają dużej alokacji zasobów systemowych.

Dodatkowa funkcjonalność

Wiele funkcjonalności opisanych wcześniej może być zaimplementowanych w pojedynczym urządzeniu. Dzięki temu jedna inwestycja umożliwia optymalizację pracy systemu Web na kilku płaszczyznach. Poza omówionymi mechanizmami urządzenia akcelerujące posiadają również inne funkcjonalności istotne dla dostawcy usług. Można wśród nich wymienić m.in.:

Caching. Część treści dostarczanej przez systemy ma charakter statyczny (niezmieniający się z czasem i kontekstem). Taka treść może być przechowywana w urządzeniu typu cache i serwowana bezpośrednio z niego bez angażowania w to serwera Web. Mechanizmy stosowane w urządzeniach typu cache pozwalają na przechowywanie najczęściej wykorzystywanych obiektów w szybkiej pamięci DRAM, co znacząco poprawia prędkość dostarczania treści do użytkownika.

Bezpieczeństwo. Sesje http są sprawdzane pod względem poprawności (np. blokowanie niepoprawnych odwołań URL, inspekcja i blokowanie ataków typu przepełnienie bufora). Możliwa jest również ochrona systemu przed atakami typu DOS (denial of Service) oraz syn flood

Global server load balancing - pozwala na rozproszenie serwerów dostarczających treści poza jedną lokalizację. Np. system rozpoznaje, że użytkownik łączący się ze stroną www.yahoo.com pochodzi z Europy i do jego obsługi przypisywany jest serwer, który obsłuży go najlepiej (np. stojący w kraju, z którego pochodzi użytkownik).

Obniżenie kosztów i lepsza jakość

Budując nowy system webowy, warto wykonać analizę lub testy wydajnościowe z wykorzystaniem specjalizowanych urządzeń akcelerujących. Istnieje duże prawdopodobieństwo, że dobrze dobrane i skonfigurowane urządzenia tego typu pozwolą na znaczące obniżenie kosztów inwestycji i przyczynią się do polepszenia jakości dostępu do systemu oferowanego użytkownikowi końcowemu. Także przy rozwijaniu systemów warto zastanowić się, czy kolejna rozbudowa serwerów jest konieczna, czy też postawiony cel można uzyskać potencjalnie mniejszym kosztem.

Comarch S.A. Warszawa