Я пытаюсь понять, как работают такие крупные сайты, как Facebook или Википедия, ради своего интеллектуального любопытства. Я читал о различных методах создания масштабируемых сайтов, но меня все еще озадачивает одна конкретная деталь.
Что меня смущает, так это то, что в конечном итоге DNS сопоставляет весь домен с одним IP-адресом или несколькими IP-адресами в случае циклического DNS.
Например, wikipedia.org имеет только одну DNS-запись типа A. Таким образом, люди со всего мира, посещающие Википедию, должны отправить запрос на один IP-адрес, указанный в DNS.
Какое оборудование прослушивает IP-адрес крупного сайта и как оно может справиться со всей нагрузкой, исходящей от запросов пользователей по всему миру?
Изменить 1: Спасибо за все ответы! Anycast кажется приемлемым ответом ... Кто-нибудь знает способ проверить, является ли конкретный IP-адрес маршрутизацией anycast, чтобы я мог убедиться, что это действительно уловка, используемая на практике большими сайтами?
Изменить 2: После дополнительного чтения по этой теме выяснилось, что anycast обычно не используется для динамического веб-контента. Anycast обычно используется для UDP (например, поиск DNS) или иногда для статического контента.
Следует отметить, что Facebook использует profile.ak.fbcdn.net для размещения статического контента, такого как таблицы стилей и библиотеки javascript. Каждый раз, когда я проверяю это имя, я получаю ответ с другого IP-адреса. Однако я не могу сказать, какой это прием в действии или совершенно другая техника.
Вернемся к моему первоначальному вопросу: насколько я могу судить, даже на большом сайте будет одно дорогостоящее оборудование для балансировки нагрузки, которое будет прослушивать его несколько общедоступных IP-адресов.
Это не обязательно аппаратное обеспечение, а целая система, рассчитанная на масштабирование. Сюда входит не только оборудование, но, что более важно, дизайн приложения, дизайн базы данных (реляционной или иной), сеть, хранилище и то, как все они сочетаются друг с другом.
Хорошая отправная точка для вашего любопытства по выяснению масштабов некоторых крупных сайтов. Высокая масштабируемость - начните здесь и Высокая масштабируемость архитектуры Викимедиа, Facebook и Twitter в качестве примеров.
Что касается вашего вопроса о DNS, отдельных IP-адресах и циклическом алгоритме, эти типы сайтов часто используют балансировки нагрузки как способ представления единственного IP-адреса. Это можно сделать либо с помощью специализированных аппаратных балансировщиков нагрузки, либо с помощью программного обеспечения, работающего на серверах общего назначения. Входящие запросы к IP, управляемому балансировщиком нагрузки, затем распределяются между серверами прозрачно для конечного пользователя.
Чтобы получить хорошее объяснение по этой теме, включая сравнение аппаратных и программных балансировщиков нагрузки / прокси и их сравнение с циклическим перебором DNS, прочтите Веб-приложения с балансировкой нагрузки.
Самый простой способ проверить, использует ли IP-адрес Anycast, - это выполнить traceroute из другого места. Вы можете попробовать следующее: перейдите на traceroute.org, выберите местоположение и попробуйте выполнить traceroute на IP-адрес 8.8.8.8 (общедоступный DNS Google, использующий anycast). Вы должны увидеть, что этот traceroute от сервера в Австралии до 8.8.8.8 остается в Австралии.
Вместо ping попробуйте выполнить поиск имени хоста: например: http://network-tools.com/default.asp?prog=dnsrec&host=profile.ak.fbcdn.net
За этим именем вы увидите список IP-адресов. Эти IP-адреса будут использоваться в циклическом режиме при проверке связи с сервером.
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/
Игорь, у вас отличный вопрос, и, как и на многие невинные вопросы, есть много-много ответов, все с разной степенью детализации.
Аппаратное обеспечение - это веб-сервер. Очевидно ;-)
Аппаратное обеспечение на самом деле представляет собой кластер балансировщиков нагрузки, каждый из которых настроен на извлечение из общего хранилища, поэтому все они одинаково настроены с одинаковым материалом.
Аппаратное обеспечение на самом деле является одним из нескольких кластеров балансировщиков нагрузки, географически разнесенных, и вы были направлены к ближайшему к вам, решение, принятое DNS-сервером.
В прошлом году Google немного выпустил свою аппаратную архитектуру, и это дает хорошо читать.
Один IP-адрес не обязательно означает один сервер: http://en.wikipedia.org/wiki/Anycast
На более крупных сайтах одновременно используются несколько различных методов. Все упомянутые вами веб-сайты имеют несколько серверов почти в каждой стране. На основе IP-адреса посетителя веб-сайта DNS-сервер возвращает IP-адрес кластера, ближайшего к посетителю. Акамай предоставляет такую услугу (щелкните изображение на этом веб-сайте для получения дополнительной информации.)
Эти «кластеры» в этом центре обработки данных теперь состоят из нескольких разных машин (сервер БД, веб-сервер, балансировщик нагрузки и т. Д.). В зависимости от того, что вы предоставляете на своем веб-сайте, у вас может быть несколько серверов для статического контента и т. Д.
Массивные сайты, такие как Facebook или Wikipedia, полагаются на несколько различных технологий для достижения масштабируемости.
Одна из таких технологий - dns. DNS настроен на балансировку нагрузки с циклическим перебором. Конфигурация DNS достаточно умна, чтобы выяснить, откуда исходит ваш запрос, и вернуть адрес сайта, который находится ближе всего к вам. Таким образом, если вы сделаете копание, вы увидите несколько записей, но если вы выполните команду ping, вы всегда получите тот же адрес.
На сайте первое, что вы задействуете, - это обратный прокси или пул балансировщика нагрузки. Пулы настроены так, что все машины отвечают на один и тот же IP-адрес, но возвращают новый IP-адрес в заголовке сеанса. Все дальнейшие запросы будут проходить через тот же узел.
Балансировщики нагрузки, используемые для крупных сайтов, представляют собой не большие дорогостоящие устройства, а обычные серверы с LVS. http://www.linuxvirtualserver.org/
Огромные сайты, такие как Google, почти наверняка разрабатывают собственное оборудование. На крупных сайтах, вероятно, будет использоваться многоуровневый коммутатор для балансировки нагрузки подключений к нескольким реальным серверам. http://en.wikipedia.org/wiki/Multilayer_switch