Strona 1 z 2 12 OstatniOstatni
Pokaż wyniki 1 do 10 z 11

Temat: Wydajnosc serwera WWW

  1. #1
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie Wydajnosc serwera WWW

    Hej!

    W skrocie temat jest jak wyzej - od dawna juz chodzilo mi po glowie aby napisac conieco i poznac Wasze zdanie. Dane ponizej sa wziete zywcem z moich serwerow - to dane z czwartku albo piatku - nie pamietam dokladnie.

    Sedno sprawy to pytanie "jak optymalizujecie swoje strony/serwery/aplikacje dzialajace na serwerze WWW"? Ja mam taka sytuacje ze musze utrzymac serwery w formie ktora pozwoli im obsluzyc spory ruch i co najgorsze raczej malo przewidywalny, wiec bez pewnych pomiarow i statystyk nie mialbym nic.
    Glownie do pomiarow uzywam RRDtool i skryptu ktory zbiera dane, dzieli wedle potrzeb i aktualizuje bazy RRD, dzieki temu jestem w stanie oszacowac ruch na serwerze, zarowno pod katem ilosci trafien wg rodzaju, ilosci transferu, itd. Problem jest jednak ze zdazeniami odbiegajacymi dalece od normy. Po prostu tak dlugo jak ruch rosnie w sposob przewidywalny to jest ok, problemy zaczynaja sie gdy nagle zacznie sie dziac cos co nie pasuje do wzorca (pokaze to ponizej).

    Wiec do rzeczy - przyklad 2 moich serwerow...

    Serwer 1
    Jest to maly serwer WWW z paroma wirtualnymi domenami ale jego glownym zadaniem jest obsluga pewnej aplikacji ktora napisalismy. System dosc stary - sprzet tez ma pare latek juz - 2x Xeon 2.8GHz z 4GB RAM, bardzo stary Linux nawet nie wiem co to jest - boje sie ruszac by nie popsuc bo to by nas duuuzo kosztowalo Aplikacja dziala jako FastCGI pod Apache'm 1.3.x (wiec prefork - zaden threading)... Ponizej normalny dzien pracy tego serwera.


    Jak widac serwer sie nie nudzi - ponad milion trafien dziennie (i ciagle rosnie) i to tylko i wylacznie gdy mowa o naszej aplikacji... a caly ruch na serwerze to 1.15mln trafien dziennie. Czy to tak wiele? Patrzac ze jest to niecale 30 zpaytan na sekunde to juz nie jest taki kosmos, z tym tylko ze srednia potrafi bardzo zafalszowac wyniki - serwer nie patrzy na to jaka jest srednia ruchu, tylko na to czy w najwiekszym tloku potrafi obsluzyc zapytania, wiec tak na prawde interesuje mnie to czy nie braknie mu zasobow gdy wszystko do okola zwariuje. Ten jeszcze sobie radzi ale powiem Wam ze juz coraz blizej kreski... Modyfikujac ta aplikacje balansujemy miedzy iloscia RAM jaka bedzie wymagac, wydajnoscia, iloscia odwolan do zewnetrznych systemow (niestety to najwolniejsza czesc aplikacji) i iloscia operacj dyskowych ktore tez spowalniaja system. W tym przypadku nie wiem czy cos da sie zmodyfikowac jeszcze, moze poza wczesniejszym wylaczeniem sekcji kodu ktory wycofujemy z uzycia.

    Serwer 2
    Drugi przyklad to drugi serwer... tym razem serwer WWW - dosyc typowy - okolo 150 domen (virtualhost'y), kazda ma swoje cechy, swoja charakterystyke ruchu... Maszyna tez niezbyt nowa - 2x Xeon 2.4GHz i 1GB RAM, apache 2 z mpm-prefork, niektore strony maja wstawki w PHP wiec php jako mod-php (wiec niezbyt optymalne rozwiazanie). Problemu nie ma gdy znam charakterystyke ruchu, ale pare dni temu jeden virtualhost pokazal mi takie cos...


    ... no i zaczelo sie - pare razy dziennie ilosc ruchu potrafila doprowadzic serwer do czkawki - 80 tysiecy zapytan na minute to daje tak na oko cos okolo 1350 zapytan na sekunde... i to tylko w jednej z okolo 150 domen na tym serwerze! Taki ruch byl wystarczajacy aby padla jedna z aplikacji, ktora restartowala sie kilka razy po czym apache stwierdzal ze jest uszkodzona i wylaczal ja na 10 minut... blokujac 5 najwiekszych i najwazniejszych domen... Te 10 minut to strata ogromnych pienedzy, utrata klientow, itd... tak wiec czy nas ktos nie lubi i to jest DDoS (w logu adresy IP z calego swiata), czy to moze prawdziwi klienci, czy to moze jakis dziwny soft ktory kieruje do nas ruch? Ciezko poznac... Normalnie serwer obsuguje do 30 zapytan na sekunde dla tej domeny co daje 1500 zapytan na minute, wiec jak uzasadnic nagle 80k?

    Popatrzmy w innej perspektywie

    Tu lepiej widac co sie dzieje - ciagly ruch wystarcza na ponad milion trafien w tej jednej domenie... a te 'wyrostki' jasno daja do zrozumienia ze dzieje sie cos dziwnego - pojawiaja sie z nikad i tak samo znikaja, nie sa jakos cykliczne, po prostu sa.

    To teraz kto mi powie co to bylo - DDoS (a sadze, ze chetnych na ta domene nie brakuje) czy tez tzw. 'slashdot effect'?

    Jak ustawic serwer aby przetrwal takie wariactwo?
    Na poczatek wywalic wszelkie zbedne moduly, ktore nie sa potrzebne...
    Wylaczyc wszystkie zbedne procesy w systemie (statd, lockd, portmap, itd).
    W samym tylko apaczu:
    • wylaczyc obsluge .htaccess jesli mozna sie bez tego obejsc (najlepiej: AllowOverride None)
    • Timeout 60 lub 90 (domyslnie jest 300 - co za marnotrawstwo!)
    • KeepAlive On - czasami sie przydaje, zwlaszcza jak strony maja sporo obiektow jak grafika, itd...
    • KeepAliveTimeout 6 - domyslne 15 tez jest dosc szczodre... 6 sekund to wartosc optymalna dla mnie - dobrana metoda prob i bledow dla glownej domeny na tym serwerze
    • w konfiguracji prefork.c - MaxClients ustawic na tyle ile trzeba - jesli damy > 256 to apache bedzie sie buntowal, wiec jeszcze dajmy mu ServerLimit 512 - tez sie buntuje ale dziala
    • Wylaczyc dla szczegolnie ruchliwych domen wszelkie 'ladne' error pages
    • itd...


    Lista jest dluga - na prawde nawet stary apache 1.3.x potrafi zdzialac cuda jak sie go odpowiednio skonfiguruje.


    Teraz kluczowe pytanie. Jakie sa Wasze metody optymalizacji dzialania serwerow?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  2. #2
    Avatar dexter
    dexter jest offline Element wywrotowy
    Zarejestrowany
    Jun 2007
    Skąd
    Poznań
    Postów
    159

    Domyślnie

    z tego co napisałeś to nie da się tego zaaplikowac do pierwszej maszyny, ale do rzeczy:
    - krotkie keep-alive
    - apache 2 mpm-worker
    - php threaded (konieczne jeśli powyższe jest prawdą), sam php includuje jako shared module (wygodne jesli chodzi o aktualizacje)
    - logi apache ograniczone do niezbednego minimum (np. referey nie są niezbędne w moim przypadku)
    - logowanie php wypięte zupełnie - poza critical runtime error
    - przy takim ruchu nie wiem czy wystawienie logow na zewnetrzna maszyne nie bedzie lepsze, zamiast zabierac i/o na lokalnym

    Ostatnio wpadlem na pomysl, zeby zamontowac za apachem a przed bramka squida, ale odwrotnie niz sie to robi normalnie, zeby robil cache dla internetu - nie wiem czy tak można, i czy się to praktykuje, ale odnosze wrazenie ze powinno niezle dzialac, zwlaszcza jesli chodzi o te strony php, ktore nie zmieniają się co chwilka
    Ostatnio edytowane przez dexter : 02-10-2008 - 14:14

  3. #3
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Leicmy od konca - co do proxy mozna zrobic bardzo fajne na apache'u samym w sobie z mod_proxy - gdzies widzialem opis konfiguracji na toys.com - niezla zabawa tam byla a do tego calosc w Perlu napisana wiec skalowalnosc liniowa.

    mpm-worker to jest to i wlasnie w ten sposob zrobilem drugi serwer ktory przejmie caly ten ruch bo niestety to jest live system i nie moge wylaczyc nawet na pare minut, wiec jakikolwiek maintenance odpada - wymiana i aktualizacja softu to okolo 2h off-line - absolutnie nie wchodzi w gre, wiec nowy serwer i bedzie dalej jazda...

    Co do php i watkow - PHP nie obsluguje watkow w ogole, wiec jedyne wyjscie to apache2 z mpm-worker (z watkami) i PHP jako FastCGI - dziala to bardzo fajnie i ladnie sie skaluje.

    Logowanie na zewnetrzny serwer moze czesciowo zalatwic sprawe, bede musial o tym pomyslec... Dzieki za rade!

    EDIT:
    Co do logowania - plik jest otwarty caly czas i stopniowo rosnie, wiec I/O nie jest az tak duzo bo w sumie i tak system buforuje dane, dalej buforuje to juz warstwa sprzetowa (kontroler SAN i dalej kontroler RAID). Tak czy inaczej sprawdze czy mozna tam uciac cokolwiek...
    Ostatnio edytowane przez TQM : 02-10-2008 - 16:23
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  4. #4
    Avatar dexter
    dexter jest offline Element wywrotowy
    Zarejestrowany
    Jun 2007
    Skąd
    Poznań
    Postów
    159

    Domyślnie

    jeśli chodzi o php i wątki to jak się przesiadałem na mpm-worker z apachem to musiałem przekompilować php. Jak się okazało, moja dystrybucja w przypadku wykrycia mpm w apachu aktywuje dla php flage
    --enable-maintainer-zts

    wiec to co zrobiłem wyżej było bardzo brzydkim skrótem myślowym.
    Bez powyższej flagi php nie działało mi prawidłowo z worker-em

    co do aktualizacji i wymiany softu to wszystko zależy od tego jaki masz system. Fakt - moja instalacja jest nieporównywalnie mniejsza bo 30 to ja mam zazwyczaj wejść na minutę (tak na oko - dawno nie obadałem sobie access_log pod tym kątem) - jednak zawsze podmiana apache i php wiązała się z czasem offline mniejszym niż 10 sekund
    Ostatnio edytowane przez dexter : 02-11-2008 - 10:25

  5. #5
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Ano niestety tak to jest... Wykresy dla drugiego serwera pokazuja tylko jedna ze 150 domen. System to Debian Sarge a update do Etch wiem ze jest problemowy, zwlaszcza jak masz custom kernel i mix recznie aktualizowanego softu aby zalatac krytyczne luki (pomimo firewalli i IDSow przed serwerem) - wiem juz z doswiadczenia, ze aktualizacja nie przejdzie gladko i bedzie sporo recznego podmieniania plikow itd... w sumie godzina recznej pracy, nastepne 20 minut instalacji pakietow, rekonfiguracja apache'a z PHP - nastepna godzina (jesli uda mi sie to zautomatyzowac). Taki przestoj oznacza wyczerpanie czasu na maintenance zaplanowanego na prawie 40 lat

    Ciekawe to co piszesz o fladze w PHP - czyli PHP w postaci mod_php dziala z workerem bez problemow?
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  6. #6
    Avatar dexter
    dexter jest offline Element wywrotowy
    Zarejestrowany
    Jun 2007
    Skąd
    Poznań
    Postów
    159

    Domyślnie

    za to właśnie uwielbiam dystrybucję gentoo - administrowanie nawet custom buildami to bajka - jak masz taką potrzebę to tworzysz własny ebuild i gotowe - sam tego jeszcze nie robiłem, bo nie było takiej potrzeby GLSA działa wg mnie naprawdę sprawnie

    a co do flagi w PHP to łatwo można to zobaczyć - portage widzi, że apache ma ustawiona flagę mpm to aktywuję przy kompilacji php wspomnianą flagę

    Nie bardzo miałem czas żeby wgłębiać się w niuanse współpracy apache + php, wiem że w literaturze jaką dopadłem polecano aktywowanie php-a właśnie jako shared module
    od jakiegoś czasu mam jednego apache a php-ów już kilka się przewinęło, w rożnych wersjach i smakach , więc na pewno jest to wygodne.

    Uważasz, że statyczny php jest szybszy ?

    edit:
    co do zrealizowania cache przez apache to nie wydaje mi się to dobrym pomysłem - dysk i procek i tak maja co robić realizując bieżące zadania serwera www, stąd właśnie pomysł przeniesienia cache na inną maszynę - nie jestem pewien, ale chyba serwis allegro.pl działa w oparciu o hierarchiczną strukturę squidów (kiedyś mi sypnęło błędem właśnie squida)
    Takie rozwiązanie wydaje mi się bardziej sensowne niż np. round robin przy dns-ach do www bo masz do zarządzania content na jednej maszynie
    Ostatnio edytowane przez dexter : 02-11-2008 - 14:57

  7. #7
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Wracajac do PHP - shared module jest raczej malo wydajny, static w sumie niczym sie nie rozni od PHP dzialajacego w FastCGI poza tym ze fcgi jest zgodne z threadami bez modyfikowania czegokolwiek - odpalam php-cgi jako statyczny proces siedzacy w pamieci i jak trzeba cos wykonac FastCGI wrzuca kod przez lokalny socket do interpretera, ten robi i zwraca wynik. Poza tym mozliwosci skalowania FastCGI sa bardzo zachecajace... a przy tym mozna rozdzielic uprawnienia - po odpowiedniej konfiguracji php moze dzialac jako user do ktorego nalezy skrypt php a nie jako apache, www-data czy nobody jak to jest w wypadku mod_php.

    Wymiana php albo innego elementu gdy masz FastCGI jest banalna - tak dlugo jak php-cgi potrafi wystartowac, tak dlugo masz system. Mam tez juz cache w php podpiety ale nie widze sensu uzywac - cale to smieszne PHP jest tylko do generowania dynamicznie kawalkow strony w oparciu o date i godzine oraz inne proste podstawienia - mozna bylo to zalatwic na 1000 innych sposobw ale wybrano akurat PHP bo ludzie nad tym pracujacy akurat PHP znali

    Co do proxy - toys.com o ile pamietam mialo load-balancer z przodu, druga warstwa to kilkanascie serwerow proxy na apache'u (jednolita struktura, bez zabaw ze squid'em), dalej serwery WWW, serwery aplikacyjne i bazy danych. Jedyne co musieli zrobic to napisac custom code ktory w momencie aktualizacji strony informowal proxy ze dana strona wygasla - chodzilo o poprawna obsluge wygasania contentu oraz natychmiastowe publikowanie zmian. Poza tym jak sie uprzec to mozna zawsze na takim apache'u zaczepic mod_security a squid jakby nie byl potezny to jednak apache bedzie moim zdaniem szybszy... tym bardziej ze nie mowimy o cudach tylko o rozlozeniu ruchu i odciazeniu serwerow aplikacyjnych...

    Niestety jak patrze na moje wykresy stopien uzycia cache'a w przegladarkach jest niewielki - na miliony wywolan aplikacji mam raptem kilkadziesiat tysiecy trafien w cache dziennie (304 - Not Modified) a to nieco malo :-/
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  8. #8
    Avatar dexter
    dexter jest offline Element wywrotowy
    Zarejestrowany
    Jun 2007
    Skąd
    Poznań
    Postów
    159

    Domyślnie

    Cytat Napisał tqm Zobacz post
    Wracajac do PHP - shared module jest raczej malo wydajny, static w sumie niczym sie nie rozni od PHP dzialajacego w FastCGI poza tym ze fcgi jest zgodne z threadami bez modyfikowania czegokolwiek - odpalam php-cgi jako statyczny proces siedzacy w pamieci i jak trzeba cos wykonac FastCGI wrzuca kod przez lokalny socket do interpretera, ten robi i zwraca wynik. Poza tym mozliwosci skalowania FastCGI sa bardzo zachecajace... a przy tym mozna rozdzielic uprawnienia - po odpowiedniej konfiguracji php moze dzialac jako user do ktorego nalezy skrypt php a nie jako apache, www-data czy nobody jak to jest w wypadku mod_php.

    Wymiana php albo innego elementu gdy masz FastCGI jest banalna - tak dlugo jak php-cgi potrafi wystartowac, tak dlugo masz system.
    No i właśnie tutaj jest chyba pies pogrzebany - ostatnio widziałem serwis jakiegoś z polskich miast, zwrócili się do mnie o pomoc w optymalizacji ich maszyny. PHP był właśnie tak odpalony jak piszesz, problem polegał na tym, że ze względu (tak jak to oceniłem) na specyficzną konstrukcję strony (błąd?) procesy php-cgi nie kończyły działania - efekt był taki, że na marnym serwerku było po 500 procesów php-cgi i podobna ilośc apacha - więc nie miało to prawa działać prawidłowo. Dlatego wydaje mi się, że zainkludowanie php jako shared object jest lepsze - nigdy nie miałem takiej sytuacji pomimo monstrualnych obciążeń jak na moje serwerki (szybciej kończyła się wydajność dysków twardych niż procesora i pamięci)

  9. #9
    Zarejestrowany
    Jun 2006
    Skąd
    rand(.eu)
    Postów
    8,748

    Domyślnie

    Moje doswiadczenia sa odwrotne - proces w FastCGI czy to napisany w PHP, Perlu, Ruby, C++ czy tez bash'u powinien dzialac N czasu minimum lub zostanie ubity... poza tym jasno okresla sie ile procesow ma startowac - jak startowali za duzo to mieli zle FastCGI ustawione. Poza tym proces powinien konczyc swoje dzialanie - widac probowali na sile odpalic jakis kod ktorego nie przystosowali do pracy z FastCGI. W tym wypadku jesli proces konczy prace i wisi w pamieci to bedzie katastrofa dokladnie jak opisales - raz tez to widzialem, dodanie prostego exit pomagalo... ale generalnie jesli odpalisz:

    Kod:
    [email protected]$ php-cgi -v
    PHP 5.2.0-8+etch10 (cgi-fcgi) (built: Jan 18 2008 18:39:55)
    Copyright (c) 1997-2006 The PHP Group
    Zend Engine v2.2.0, Copyright (c) 1998-2006 Zend Technologies
    i takie cos odpalisz jako proces FastCGI to bedzie dzialac poprawnie - na sieci sa gotowe tutoriale jak to ustawic. Dziala na prawde fajnie, tylko jedna zasada dotyczaca FastCGI - aplikacja musi byc starannie napisana. Widac w tym co podajesz braklo starannosci albo cierpliwosci

    P.S.
    FastCGI ma tez parametr definiujacy ile czasu max proces serwera moze zyc, po czym zostanie ubity i restartniety - taki prosty garbage collector ale bardzo skuteczny.
    ctrl-alt-del.cc - soft reset site for IT admins and other staff :-)

  10. #10
    Avatar dexter
    dexter jest offline Element wywrotowy
    Zarejestrowany
    Jun 2007
    Skąd
    Poznań
    Postów
    159

    Domyślnie

    dzięki za tips-a
    chyba zaprzyjaźnię się bliżej z php-cgi, przynajmniej w celach naukowych

Strona 1 z 2 12 OstatniOstatni

Podobne wątki

  1. statystyka www I.P
    By gogulas in forum Pozycjonowanie/Wyszukiwarki
    Odpowiedzi: 3
    Autor: 10-05-2007, 11:40
  2. Program i pliki z serwera
    By Edi in forum Newbie - dla początkujących!
    Odpowiedzi: 9
    Autor: 08-25-2007, 16:30
  3. Zabezpieczene antyspamowe serwera poczty.
    By harrier in forum Security
    Odpowiedzi: 1
    Autor: 04-10-2007, 17:28
  4. IP serwera a IP klienta.
    By fedor in forum TCP/IP/Analiza/Badanie
    Odpowiedzi: 1
    Autor: 02-01-2007, 23:54
  5. Odpowiedzi: 9
    Autor: 08-19-2006, 04:14

Zasady Postowania

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •  
Subskrybuj