Przygotowanie do ogromnego wzrostu natężenia ruchu

35

Nasza firma pojawi się w tym tygodniu w telewizyjnym programie telewizyjnym w doskonałej jakości, a oni powiedzieli nam, że możemy spodziewać się około 200 000 odwiedzających na naszej stronie jednocześnie.

Zwykle mamy tylko około 100 odwiedzin dziennie, więc nie mam pojęcia, czy poradzimy sobie z tak dużym ruchem. Jesteśmy gospodarzem 1and1.co.uk.

Czy możemy podjąć jakieś środki ostrożności, aby zapobiec uszkodzeniu naszej witryny?

SamTheMan
źródło
3
Przeczytałeś to? Zdecydowanie zaleciłbym włączenie usługi takiej jak CloudFlare do obsługi zasobów statycznych jako minimum. webmasters.stackexchange.com/questions/14394/…
richhallstoke
10
Powinieneś porozmawiać z 1and1.co.uk tak szybko, jak to możliwe! mogą przenieść twoją stronę do jednej z usług VPS o wysokim współczynniku mocy procesora / pamięci RAM / przepustowości, który pozwoli na skok! potem mogą zmniejszyć procesor / pamięć RAM, aby zaoszczędzić pieniądze
Simon Hayter
1
Czy korzystasz ze wspólnego hostingu z 1 i 1? Jeśli tak, naprawdę musisz jak najszybciej znaleźć alternatywne rozwiązanie (bardzo wydajny VPS lub hosting oparty na chmurze). Bardzo wątpię, aby jakiekolwiek współdzielone środowisko hostingowe mogło obsługiwać taki rodzaj ruchu.
Sean
3
Kiedyś byłem hostingiem. Większość hostów może dość łatwo poradzić sobie z takimi skokami, o ile wie z wyprzedzeniem i może pomóc ci z całą masą opcji, które zwykle nie są oferowane. Powód tego jest prosty. Prawdopodobnie mają pod ręką sprzęt, taki jak sprzętowe pamięci podręczne, dodatkowe serwery, opcje równoważenia obciążenia, opcje przełączania awaryjnego itp. Chodzi o to, aby wyglądać tak, jakby potrafiły obsługiwać wszystko z wdziękiem. To jest dobre dla biznesu. Większość skonfiguruje te opcje bez opłat. To właściwie normalna część biznesu.
closetnoc
Chcesz wiedzieć, że istnieją narzędzia do testowania dużego obciążenia serwera. Nie znam żadnego z imienia, ale łatwo je znaleźć. Wzmocnij ustawienia i możesz dać sobie kontrolowaną jazdę próbną bez faceplantacji, gdy pojawią się prawdziwi ludzie :)
Martijn

Odpowiedzi:

26

W okresie dużego ruchu twój serwer powinien być w stanie obsłużyć wszystkie żądania złożone przez odwiedzających twoją stronę. Istnieją jednak pewne ograniczenia w jednoczesnych połączeniach obsługiwanych przez serwer. Dlatego najlepiej jest obsługiwać żądania strony tak szybko, jak to możliwe.

Oto kilka sugestii do rozważenia w takich sytuacjach,

Ulepszenia na poziomie aplikacji:

1. Minimalizuj żądania HTTP, aby przyspieszyć ładowanie strony.

a) Połącz wszystkie pliki JS razem w jeden połączony plik JS, a wszystkie pliki CSS w jeden połączony plik CSS.

b) Zminimalizuj pliki JS i CSS, dzięki czemu rozmiar pliku zostanie zmniejszony i zostanie pobrany szybciej.

c) Użyj duszka CSS - Kiedy połączysz większość lub wszystkie swoje obrazy w duszka, zamieniasz wiele żądań obrazów w jeden. Następnie wystarczy użyć właściwości CSS tła-obrazu, aby wyświetlić potrzebną sekcję obrazu.

d) Opóźnij pobieranie obrazu za pomocą leniwego ładowania, pomoże to zmniejszyć liczbę żądań HTTP.

2. Przygotuj lekkie strony, które oczekują więcej wizyt:

a) W miarę możliwości wykluczaj elementy dekoracyjne, takie jak obrazy lub Flash; używaj tekstu zamiast obrazów w nawigacji strony i chrome, a większość treści umieść w HTML.

b) Używaj statycznych stron HTML zamiast dynamicznych; to ostatnie powoduje większe obciążenie serwerów. Możesz także buforować statyczne dane wyjściowe stron dynamicznych, aby zmniejszyć obciążenie serwera.


Ulepszenia na poziomie serwera:

1. Zmniejsz wartości limitu czasu serwera , konsultując się z dostawcą hostingu (nie powinno to być zbyt niskie).

Gdy limity czasu będą krótsze, połączenie zostanie wkrótce uwolnione, więc serwer będzie w stanie obsłużyć więcej połączeń.

2. Korzystaj z usług stron trzecich, takich jak CloudFlare, do statycznego buforowania danych oraz do ochrony witryny przed złośliwymi użytkownikami i atakami, takimi jak DDOS.

3. Zaktualizuj sprzęt serwera - zaktualizuj pamięci fizyczne i wirtualne, zwiększ limity procesów we / wy i wejścia, jeśli to konieczne. Twój dostawca hostingu będzie w stanie Ci pomóc.

4. Buforuj kod dynamiczny - użyj APC do buforowania kodu operacyjnego PHP.

5. Równoważenie obciążenia - Rozłóż obciążenie na wiele serwerów równoważenia obciążenia.


  • Po podjęciu wszystkich wymaganych działań nadszedł czas, aby sprawdzić, czy witryna jest gotowa na ogromny skok ruchu.

    Istnieją usługi stron trzecich, takie jak loadimpact.com, które zapewniają testy obciążenia przy symulowanym ruchu. Analiza pomoże ci zrozumieć, ile obciążenia może wytrzymać Twoja witryna i co można poprawić.

  • Ponadto w okresie wzrostu natężenia ruchu unikaj operacji intensywnego użycia procesora, takich jak cronjobs tworzenia kopii zapasowych witryn itp.

Nikhil Supekar
źródło
3
To wszystko związane z witryną i doskonałe! Ale jeśli 200 000 żądań nie trafi jednocześnie na serwer, może to nie wystarczyć. Jako poprzedni serwer internetowy lubiłem instalować dużą pamięć podręczną sprzętu i uruchamiać witrynę ładującą pamięć podręczną. Chciałbym również zreplikować witrynę na kilku serwerach, nawet jeśli są one współużytkowane i zaimplementować równoważenie obciążenia za pomocą proxy lub zapory. To zwykle wystarczało. Większość ludzi nie zdaje sobie sprawy, że największą szyjką butelki jest tak naprawdę HD I / O. Naprawdę pomaga również zwiększenie pamięci i wykorzystanie jej do pamięci podręcznej Apache i MySQL.
closetnoc
2
możesz poprawić odpowiedź! :)
Nikhil Supekar,
1
Podoba mi się twoja odpowiedź! Podniosłem głos. Proszę się nie obrażać. Chciałem tylko wskazać kilka rzeczy z perspektywy hostów internetowych. Tylko komentarz. Nie trzask. Ponownie twoja odpowiedź jest doskonała !! Często sugeruję skontaktowanie się z gospodarzem, ponieważ te rzeczy pojawiają się od czasu do czasu i istnieją opcje, które gospodarz może zrobić, aby pomóc i nic nie kosztować. Większość gospodarzy cieszy się z uwagi! Dla mnie był to prosty proces, ponieważ sprzęt był już na miejscu. Przygotowanie strony na takie wydarzenie nie zajęłoby mi dużo czasu. ;-) Dzięki za zaproszenie.
closetnoc
1
Bez przestępstwa. Właściwie moglibyśmy naprawdę wykorzystać twoje doświadczenia ze sprzętem serwerowym.
Nikhil Supekar,
1
Od ponad dekady jestem wycofany z branży, z wyjątkiem poszukiwań sieci zaufania. Jedną z rzeczy, które lubię, jest zwiększenie pamięci podręcznej dla Apache i MySQL lub podobnych aplikacji, aby zmniejszyć zbijanie podsystemu we / wy. Zrobiłem to tutaj i to może naprawdę działać. Ostrzegam również przed zbyt dużą pamięcią w systemach od czasu przechowywania kopii zapasowej tj. Konserwacja plików wymiany (i in.) może radykalnie zwiększyć żądania We / Wy, które zwykle są wolniejsze. Jest taki słodki punkt, ale nie wiem już, co to za słodki punkt. Podejrzewam, że jesteś o wiele bardziej ekspertem niż ja. ;-)
closetnoc
7

Przede wszystkim polecam Cloudflare. Możesz utworzyć bezpłatne konto podstawowe, które będzie kierować ruchem przez lokalne centra danych, aby zminimalizować liczbę przeskoków na serwerze. Cloudflare doskonale nadaje się również do buforowania treści i ma ochronę DDOS.

Poza tym spróbuj przyciąć tłuszcz z warstwy usług. Upewnij się, że nie masz zbyt rozdętych zapytań do bazy danych, które powodują wąskie gardło w kodzie ani logiki obciążającej procesor, która mogłaby zostać uproszczona.

Spróbuj także buforować wszelkie zapytania do bazy danych. Niektóre świetne opcje buforowania zapytań to Redis lub Memcache. OpCaching to kolejna kwestia, jeśli używasz języka nieskompilowanego.

Ale prawdopodobnie najważniejsze jest utrzymanie optymalnej zawartości statycznej (np. Css, js i obrazów). Zminimalizuj wszystkie Javascript, połącz je wszystkie w jeden plik, jeśli to możliwe. Pamiętaj, że każdy plik zawarty w Twojej witrynie musi wykonać kilka przeskoków serwera, aby dotrzeć do użytkownika końcowego.

Nie lekceważ też przepustowości i czasu ładowania, które możesz zaoszczędzić dzięki kompresji obrazów!

Na koniec rozważ monitorowanie wydajności za pomocą narzędzi takich jak New Relic.

Powodzenia!!

Źródło: Według Alexy jeden z programistów 12. najpopularniejszej witryny w Wielkiej Brytanii.

Ewan Valentine
źródło
5

Rozważ przetestowanie obciążenia witryny. Dostępne są bezpłatne narzędzia, takie jak JMeter , The Grinder i Gatling , które mogą symulować dużą liczbę odwiedzających witrynę.

Testując z wyprzedzeniem wpływ dużego ruchu, możesz ustalić, czy dokonane strojenie było skuteczne, i spojrzeć na dalsze strojenie, jeśli nie.

James_pic
źródło
3

Jeśli korzystasz z 1 i 1, prawdopodobnie szukasz taniego hostingu. Tani hosting oznacza, że ​​robisz wszystko pod jednym pudełkiem. Główną przeszkodą dla hostingu jest to, że gdy hostujesz wszystko w tym samym pudełku, dzielisz zasoby między ważne części witryny:

  • Twój serwer internetowy (Apache, Nginx itp.)
  • Twoja baza danych (MySQL, PostGreSQL itp.)

A mając 1 i 1, istnieje duża szansa, że ​​używasz panelu sterowania, takiego jak Plesk lub cPanel, co oznacza, że ​​masz dodatkową warstwę rzeczy konkurujących o zasoby. A ostatni gwóźdź do twojej trumny? Nie masz dużo zasobów. Masz może 1 procesor (lub wirtualny procesor) i bardzo mało pamięci RAM (jeśli masz więcej niż 2 GB, będę zaskoczony).

Kiedy porzuciliśmy 1 i 1, poszliśmy ze skalowalnym dostawcą hostingu (w naszym przypadku Amazon Web Services) i zrobiliśmy kilka rzeczy, których wcześniej nie mogliśmy

  1. Amazon ma własne instancje baz danych (RDS), więc nasza baza danych ma zasoby do oddychania. Większość systemów RDBMS żyje i oddycha pamięcią RAM, i to było coś, co mogliśmy dostać dużo. Teraz możesz również wyposażać dyski SSD w wysokie wejścia / wyjścia, co sprawia, że ​​drugi punkt dławienia DB (zapis danych) jest mniej bolesny.
  2. Mamy moduł równoważenia obciążenia z 2 serwerami WWW. Dzięki dużemu backendowi DB nie potrzebowaliśmy wysokiej klasy frontonów, więc mamy dwa serwery z niższej półki.
  3. Przeszliśmy na coś, co mogłoby wprowadzić w pełni skonfigurowane maszyny na żądanie. Używając czegoś takiego jak Chef lub Puppet, możesz łatwo dodawać nowe serwery sieciowe i jest w 100% przejrzysty dla użytkowników końcowych, jeśli zrobisz to dobrze. AWS ma również Opsworks, dzięki czemu możesz budować swoje skrypty bezpośrednio w AWS.
  4. Zmień rozmiar instancji na żądanie. To jest KLUCZOWY kawałek dla nas. Jeśli DB utknie w martwym punkcie, mogę go obniżyć i ponownie uruchomić jako większy w ciągu kilku minut. Tak, wymagałoby to przestojów, ale kilka minut przestoju jest lepsze niż godziny strasznie powolnej witryny. Całkowicie boisz się przestojów? Trzymaj replikę do odczytu w skrzydłach, a następnie spuść ją, przełącz na większą instancję, promuj opanowanie i unikaj przestojów za cenę dodatkowej maszyny.

AWS nie jest jedyną grą w mieście (Azure, Rackspace itp.), Ale upewnij się, że 1 i 1 można skalować, aby spełnić Twoje wymagania.

Machavity
źródło
1

Skontaktuj się z usługodawcą internetowym i sprawdź, czy nie ma ograniczenia przepustowości. Zaktualizuj swój plan hostingowy, jeśli przepustowość jest niewystarczająca do oczekiwanego natężenia ruchu. Nie chcesz wyświetlać użytkownikom komunikatu „Przekroczono limit przepustowości”.

Salman A.
źródło
1

Z własnego doświadczenia wiem, że nawet najlepszy VPS ma swoje ograniczenia. Idę tutaj prawdziwy laik.

Jedna z naszych witryn sportowych była hostowana na VPS. Podczas meczu między Pakistanem a Indiami otrzymaliśmy ponad 70 000 odsłon. Mieliśmy VPS Inmotinghosting z 4 GB pamięci RAM i przetwarzaniem 2. GHz, przepustowością 1 TB, pamięcią SSD i innymi ciekawymi rzeczami. Aktywowaliśmy również płatną wersję Cloudflare.

To było w połowie meczu, a strona się zawiodła. Nigdy nie pojawił się na żywo podczas meczu i straciliśmy potencjalnie ponad 70 000 więcej odwiedzających. Później wiedzieliśmy, że nasza przepustowość została zużyta i bez hosta źródłowego CDN jest w większości przypadków bezużyteczny.

Lekcja: oprócz uzyskania VPS i dostrojenia się do CND, takich jak Cloudflare, zminimalizuj rozmiar swojej strony. Im mniej, tym lepiej. Możesz skorzystać z buforowania stron i minimalizacji kodu, co jest bardzo przydatne w obsłudze ruchu.

imranhunzai
źródło
1

Nie zdefiniowałeś zbyt dobrze „od razu”. Załóżmy, że patrzysz na 200 000 unikalnych użytkowników w ciągu pół godziny. To 111 żądań na sekundę, nie biorąc pod uwagę użytkowników, którzy klikają i otwierają więcej stron (które chcesz, prawda?).

Pierwszą rzeczą, którą bym zrobił, były historie Google o ludziach o podobnym natężeniu ruchu. Wiele osób napisze na swoich blogach, aby pomóc innym. Zauważysz, że niezwykle trudno jest znaleźć historię o tym, że ktoś robi to na hostingu współdzielonym, i jest ku temu powód. Przyjrzyj się rozwiązaniom takim jak Digital Ocean lub Amazon Web Services, na początek, korzystając z najbliższego centrum danych dla odbiorców. Zgadzam się, że przeniesienie wszystkich zasobów statycznych do CloudFlare, nawet darmowego konta, jest doskonałym pomysłem.

Oprócz tego sprawdź kod, dodając skrypty synchronizacji na górze i na dole stron, zakładając, że są dynamiczne. Zakładając, że moje założenie dotyczące liczb jest prawidłowe, musisz być w stanie obsłużyć każdą stronę w czasie krótszym niż 10 milisekund, aby utrzymać jakikolwiek dopuszczalny poziom wydajności. Jeśli domyślnie obsługujesz wszystkie żądania za pośrednictwem protokołu SSL, wyłącz to na kilka dni, gdy minie burza.

Ponadto 200 000 brzmi bardzo przerażająco, ale pamiętaj, że nie musisz się zbytnio bać (choć powinieneś być trochę). Na przykład, gdy magazyn Paper opublikował zdjęcia Kim Kardashian NSFW, do obsługi obciążenia wystarczyły tylko cztery średnie serwery internetowe i Amazon ELB, zgodnie z tym artykułem (SFW). Zdecydowanie nie sądzę, że twoja obecna konfiguracja sobie z tym poradzi, ale nie powinieneś dokładnie potrzebować szesnastu serwerów sieciowych z 48 rdzeniami, z których każdy jest zasilany własnym małym generatorem jądrowym.

John Cave
źródło
1

Znam to stare, ale bardzo dobre pytanie i chciałbym mieć dobre informacje na ten temat kilka lat temu ...

Od czasu do czasu w sieciach telewizyjnych pojawiają się (związane z działalnością szkolną) witryny. Ponieważ działamy przy bardzo napiętym budżecie, rozwiązaniem jest „równoważenie obciążenia”. Pudełka VPS mogą być obecnie dość tanie i po prostu kopiujemy / duplikujemy nasze treści na 2-3 z nich.

Przeczytaj ten artykuł i przeczytaj o „round-robin”.

Więcej informacji na temat testowania obciążenia można znaleźć tutaj .

Kiedy zaczęliśmy próbować radzić sobie z pikami, po prostu mieliśmy naszą zawartość na 2-3 skrzynkach VPS i umieściliśmy ich NS w ustawieniach rejestratora.

Drzewiasty
źródło
0

Najlepiej jest mieć dedykowane serwery z wieloma klastrami, które rozwiążą Twój problem

Himanshu Singla
źródło
0

Powodzenia w przepisywaniu witryny, zmianie dostawców i migracji treści do CDN w niecały tydzień.

Jak zapewne zauważyłeś na podstawie innych odpowiedzi, są to minimum czynności, które musisz zrobić, aby przygotować witrynę do znacznego wzrostu ruchu. Chociaż jeśli obecnie prowadzisz witrynę 1and1.co.uk, prawdopodobnie nie masz silnego zespołu inżynierów sieciowych, DBA, programistów i optymalizatorów front-end.

Tak się nie stanie, prawda?

Nie powiedziałeś, co robisz ze swoją witryną, czy działa na niej koszyk na zakupy, czy może być zaimplementowany przy użyciu zawartości statycznej. W takim przypadku możesz przetrwać tsunami, jeśli zeskrobujesz całą witrynę na pliki statyczne i opublikujesz ją w miejscu zwykłej strony (najpierw wykonaj kopię zapasową bieżącej wersji).

Powinieneś także rozmawiać z 1 i 1 (z kartą kredytową w ręku).

symcbean
źródło