Jak powstają witryny takie jak Google / Facebook / itp. nie dostają DDOSa, mimo że otrzymują tyle żądań?

14

Coś, czego nie rozumiem:

(Dziesiątki / setki?) Tysiące ludzi jednocześnie próbują połączyć się z witryną taką jak facebook.com lub google.com.

Z tego, co rozumiem, wszystkie muszą koniecznie połączyć się z tym samym początkowym serwerem (ponieważ DNS zwróci ten sam adres IP wielu z nich, a zatem wszystkie żądania trafią do tego samego miejsca docelowego).

Tak więc jedna maszyna / router musi obsłużyć wszystkie początkowe żądania, nawet jeśli planuje przekazać je innym maszynom.

Dlaczego to pojedyncze urządzenie nie jest przeciążone, gdy tak się dzieje?

użytkownik541686
źródło
8
Twoje założenie dotyczące DNS jest nieprawidłowe: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler
@OliverSalzburg: Dzięki za link, to jest pomocne.
user541686,

Odpowiedzi:

20

Twoje zrozumienie, że wszystkie łączą się z tym samym serwerem, jest błędne, chociaż szczegóły dotyczące sposobu osiągnięcia tych wyników są złożone. http://highscalability.com/ ma referencje na temat tego, w jaki sposób wdrażane są niektóre rozwiązania skalowalności.

Mają znacznie więcej niż „jeden” serwer, z którym łączą się klienci, nawet jeśli publiczny adres IP wygląda tak samo. Na przykład Google często wykorzystuje adresowanie anycast do kierowania ludźmi i zwykle nie mają tylko jednego adresu IP dla każdego klienta - nawet jeśli zwracają tylko jeden adres na żądanie.

Daniel Pittman
źródło
+1 dzięki za wskazanie błędu. Nie mogę się jednak zastanawiać: jeśli kolejne żądania trafiają za każdym razem do innego serwera, to w jaki sposób serwer kontynuuje sesję innego serwera? A może losowość przypadająca na maszynę / sesję? (Wyobrażam sobie, że wszystkie synchronizują się w wewnętrznej bazie danych, ale synchronizacja tysięcy serwerów przechowujących informacje o milionach użytkowników jednocześnie wydaje się bardzo powolna.)
541686
1
Odpowiedź jest skomplikowana i zależy od implementacji, ale jednym z podejść jest posiadanie puli maszyn, które nie robią nic, tylko wysyłają pakiety do właściwego miejsca docelowego bez faktycznego nawiązywania połączenia TCP. Zobacz F5 i innych dostawców usługi równoważenia obciążenia, aby dowiedzieć się, jak to zrobić. Google, myślę, użyj czegoś, co sami zbudowali.
Daniel Pittman
Możesz także użyć metodologii podzielonej sesji. Istnieje sesja między użytkownikiem a serwerem, z którym jest bezpośrednio połączony, oraz „główna sesja logiczna” między użytkownikiem a usługą logiczną. Jeśli użytkownik przeniesie się na inny serwer, serwer ten po prostu wznawia tę samą główną sesję logiczną w usłudze logicznej.
David Schwartz