Как получаются такие сайты, как Google / Facebook / и т. Д. не получают DDOS, хотя они получают так много запросов?

14

Что-то я не понимаю

(Десятки / сотни?) Тысячи людей одновременно пытаются подключиться к таким сайтам, как facebook.com или google.com.

Из того, что я понимаю, все они должны обязательно подключаться к одному и тому же начальному серверу (потому что DNS будет возвращать один и тот же IP-адрес многим из них, и поэтому все запросы направляются в один и тот же целевой пункт назначения).

Таким образом, один компьютер / маршрутизатор должен обрабатывать все начальные запросы, даже если он планирует перенаправить их на другие машины.

Почему такое устройство не перегружается, когда это происходит?

user541686
источник
8
Ваше предположение о DNS неверно: en.wikipedia.org/wiki/Round-robin_DNS
Der Hochstapler
@OliverSalzburg: Спасибо за ссылку, это полезно.
user541686

Ответы:

20

Ваше понимание того, что все они подключаются к одному и тому же серверу, неверно, хотя детали того, как вы достигаете этих результатов, сложны. На сайте http://highscalability.com/ есть справочная работа о том, как некоторые из решений по масштабируемости вводятся в действие.

У них гораздо больше, чем просто «один» сервер, к которому подключаются клиенты, даже если публичный IP-адрес выглядит одинаково. Google, например, интенсивно использует anycast-адресацию для прямых людей, и обычно у них не просто один IP-адрес для каждого клиента - даже если они возвращают только один адрес, когда вы спрашиваете.

Даниэль Питтман
источник
+1 спасибо за указание на ошибку. Однако я не могу не задаться вопросом: если последующие запросы каждый раз отправляются на другой сервер, то как сервер продолжает сеанс другого сервера? Или случайность для каждой машины / сессии? (Я полагаю, что все они синхронизируются на бэкэнде, но, казалось бы, очень медленно синхронизировать тысячи серверов, содержащих информацию о миллионах пользователей одновременно.)
user541686
1
Ответ сложен и зависит от реализации, но один из подходов состоит в том, чтобы иметь пул машин, которые ничего не делают, но отправляют пакеты в нужное место назначения, даже не устанавливая TCP-соединение. Посмотрите на F5 и других поставщиков балансировщиков нагрузки, чтобы узнать, как это сделать. Google, я думаю, использует то, что они создали сами.
Даниэль Питтман
Вы также можете использовать методологию разделения сеанса. Существует сеанс между пользователем и сервером, к которому они непосредственно подключены, и «главный логический сеанс» между пользователем и логическим сервисом. Если пользователь перемещается на другой сервер, этот сервер просто возобновляет тот же основной логический сеанс в логической службе.
Дэвид Шварц