Какая часть аппаратного обеспечения прослушивает IP-адрес Facebook или Википедии?

32

Я пытаюсь понять, как работают массивные сайты, такие как Facebook или Википедия, для моего интеллектуального любопытства. Я читал о различных методах построения масштабируемых сайтов, но все еще озадачен одной конкретной деталью.

Меня смущает то, что в конечном итоге DNS сопоставит весь домен с одним IP-адресом или несколькими IP-адресами в случае циклического DNS.

Например, в wikipedia.org есть только одна DNS-запись типа A. Таким образом, люди со всего мира, посещающие Википедию, должны отправить запрос на один IP-адрес, указанный в DNS.

Что такое аппаратное обеспечение, которое прослушивает IP-адрес для массивного сайта, и как оно может справиться со всей нагрузкой, исходящей от запросов пользователей во всем мире?

Изменить 1: Спасибо за все ответы! Anycast выглядит как выполнимый ответ ... Кто-нибудь знает способ проверить, маршрутизируется ли какой-либо конкретный IP-адрес, чтобы я мог убедиться, что это действительно прием, используемый на практике большими сайтами?

Редактировать 2: После прочтения этой темы, похоже, что anycast обычно не используется для динамического веб-контента. Anycast обычно используется для UDP (например, поиска DNS), а иногда и для статического контента.

Интересно отметить, что Facebook использует profile.ak.fbcdn.net для размещения статического контента, такого как таблицы стилей и библиотеки javascript. Каждый раз, когда я пингую это имя, я получаю ответ с другого IP-адреса. Тем не менее, я не могу сказать, является ли это anycast в действии, или совершенно другой метод.

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

Игорь Островский
источник
Великие вопросы, слишком плохо, большинство людей не понимают этого. Я надеюсь, что у кого-то будет ответ с некоторыми деталями. Может быть, балансировщик нагрузки Cisco стоит около 50 миллионов долларов.
OliverS

Ответы:

9

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

Хорошая отправная точка для вашего любопытства - узнать, как масштабируются некоторые крупные сайты. Высокая масштабируемость - начните отсюда и высокую масштабируемость для архитектуры Викимедиа , Facebook и Twitter в качестве примера.

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

Чтобы получить хорошее объяснение по этой теме, включая сравнение аппаратных и программных балансировщиков нагрузки / прокси-серверов и их сравнение с циклическим перебором DNS, ознакомьтесь с веб-приложениями балансировки нагрузки .

Сим
источник
Спасибо, Сим. Я прочитал большинство из этих статей, прежде чем задать свой вопрос, но я не нашел конкретного ответа. Итак, действительно ли существует один аппаратный балансировщик нагрузки (или один компьютер, на котором выполняется программное обеспечение для балансировки нагрузки), который срабатывает каждый раз, когда кто-то просматривает страницу Википедии? Или есть еще один способ избежать узкого места?
Игорь Островский
Я не уверен, что сейчас делает Википедия, но эта статья 2008 года рассказывает о них, используя серию обратных прокси-серверов Squid blogs.sun.com/WebScale/entry/scaling_wikipedia_with_lamp_7
Sim
2
Существуют также произвольные адреса, по которым вы пропингуете один ip-адрес, но они распределяются (случайным образом \ произвольно \ преднамеренно) на один из диапазона "реальных" конечных точек. Я не уверен, использует ли это Википедия \ Google, но я уверен, что некоторые из корневых DNS-серверов используют. Мои пинги в Википедии совпадают с вашими (и я в Ирландии), поэтому я подозреваю, что они могут это использовать.
Хелвик
1
Anycast используется в запросе DNS для получения ближайшего к вам IP-адреса - затем подсистема балансировки нагрузки прослушивает этот IP-адрес и распределяет запросы по серверам поддержки.
Энди Шеллам
2
Википедия также использует geoip-сервер pdns для большей части балансировки нагрузки. больше информации здесь: wikitech.wikimedia.org/view/PowerDNS и здесь: wikitech.wikimedia.org/view/DNS
faultyserver
3

Anycast также может использоваться для TCP-соединений, при условии, что соединения недолговечны, поэтому маршруты не меняются в течение времени жизни соединения. Это хорошее предположение для HTTP-соединений (особенно, если Connection: Keep-Alive имеет короткий тайм-аут или отключен).

Многие CDN (CacheFly, MaxCDN и, возможно, многие другие) на самом деле используют anycast для соединений TCP (HTTP), а не только DNS. Когда вы определяете имя хоста в CacheFly, вы получаете один и тот же IP-адрес по всему миру, он просто направляется в «ближайший» кластер CacheFly. «Ближайший» здесь будет в терминах длины пути BGP и метрик, что обычно является лучшим способом измерения задержки сети, чем простое географическое расстояние.

В случае с Википедией, в частности: http://www.datacenterknowledge.com/archives/2008/06/24/a-look-inside-wikipedias-infrastructure/

rmalayter
источник
3

Самый простой способ проверить, использует ли IP-адрес Anycast, - это выполнить трассировку из другого места. Вы можете попробовать следующее: перейдите на traceroute.org, выберите местоположение и попробуйте выполнить трассировку до IP-адреса 8.8.8.8 (публичный DNS Google, использующий anycast). Вы должны увидеть трассировку от сервера в Австралии до 8.8.8.8 пребывания в Австралии.

Вместо проверки связи попробуйте выполнить поиск по имени хоста: например: http://network-tools.com/default.asp?prog=dnsrec&host=profile.ak.fbcdn.net

Вы увидите список IP-адресов за этим именем. Эти IP-адреса будут использоваться циклически, когда вы пингуете сервер.

Рианто Вахьюди
источник
Связанный: serverfault.com/q/178319/87017
Pacerier
2

Игорь, твой вопрос великолепен, и, как и многие невинные вопросы, есть много, много ответов, все на разных уровнях детализации.

Аппаратное обеспечение - это веб-сервер. Очевидно ;-)

Аппаратное обеспечение на самом деле представляет собой кластер балансировщиков нагрузки, каждый из которых настроен на извлечение из общего хранилища, поэтому все они одинаково настроены с использованием идентичного материала.

Аппаратное обеспечение на самом деле является одним из нескольких кластеров балансировки нагрузки, географически распределенных, и вы были направлены к ближайшему к вам решению, принятому DNS-сервером.

Мэтт Симмонс
источник
1

В прошлом году Google выпустил небольшую версию своей аппаратной архитектуры, и это хорошо читается .

squillman
источник
Это интересное чтение, но оно не отвечает на мой конкретный вопрос. Мне особенно любопытно, что это за аппаратное обеспечение, которое прослушивает четыре публичных IP-адреса Google и распределяет нагрузку между тысячами серверов?
Игорь Островский
1

Один IP-адрес не обязательно означает один сервер: http://en.wikipedia.org/wiki/Anycast

Джастин
источник
1
Anycast - сложная настройка, если у вас есть центральная синхронизация (например, Facebook). Он действительно хорошо работает, например, для DNS-серверов, где экземплярам не требуется много общения, или для веб-серверов со статическим контентом.
1
Вы правы в том, что один IP-адрес не означает один сервер, но в DNS-запросе используется anycast, когда вас не интересует, кто отвечает, пока вы его получаете, и, следовательно, он полезен только с протоколом UDP, который DNS использует. С TCP (используется в HTTP) вы должны быть уверены, что сервер, который отвечает, это тот, который вы специально спросили.
Энди Шеллам
@AndyShellam, статьи en.wikipedia.org/wiki/Anycast#Details nanog.org/meetings/nanog37/presentations/matt.levine.pdf, похоже, не согласны с вами ...
Пейсер
1

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

Эти «кластеры» в этом центре обработки данных теперь состоят из нескольких разных машин (сервер БД, веб-сервер, балансировщик нагрузки и т. Д.). В зависимости от того, что вы предоставляете своему веб-сайту, у вас может быть несколько серверов для статического контента и т. Д.

Рафаэль Лютигер
источник
1

Массивные сайты, такие как Facebook или Википедия, используют несколько различных технологий для достижения масштабируемости.

Одной из таких технологий является DNS. DNS настроен на балансировку нагрузки с циклическим перебором. Конфигурация DNS достаточно умна, чтобы выяснить, откуда поступил ваш запрос и вернуть адрес ближайшего к вам сайта. Так что, если вы сделаете копание, вы увидите несколько записей, но если вы сделаете пинг, вы всегда получите тот же адрес.

На сайте первая часть вашего оборудования - обратный прокси-сервер или пул балансировки нагрузки. Пулы настроены так, что все машины отвечают на один и тот же IP-адрес, но возвращают новый IP-адрес в заголовке сеанса. Все дальнейшие запросы будут проходить через один и тот же узел.

Балансировщики нагрузки, используемые для крупных сайтов, - это не большие дорогостоящие единицы оборудования, это обычные серверы, работающие на LVS. http://www.linuxvirtualserver.org/

user67823
источник
0

Массивные сайты, такие как Google, почти наверняка разработают свое собственное оборудование. Большие сайты, вероятно, будут использовать многоуровневый коммутатор для балансировки нагрузки подключений к нескольким реальным серверам. http://en.wikipedia.org/wiki/Multilayer_switch

Крис С
источник