Как работают CDN (сети распространения контента)?

25187
p2pnode

Принимая Akamai в качестве CDN. Из того, что я понимаю, когда клиент запрашивает страницу, запрос отправляется на центральный сервер Akamai, который затем, в зависимости от местоположения клиента, получает пограничный сервер Akamai, и последующие запросы от клиента направляются непосредственно на этот пограничный сервер. Мой вопрос таков:

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

Или это то, что необходимо, чтобы при использовании CDN само разрешение DNS выполнялось сервером CDN?

У крупных компаний, таких как Google, Amazon, Facebook, есть свои собственные серверы CDN, или они полагаются на сторонних поставщиков CDN, таких как Akamai? Скажите, Google и Yahoo! оба используют CDNs Akamai, а затем контент Yahoo! а гугл проживает на одном сервере? Разве это не создает потенциальную проблему безопасности?

37

6 ответов на вопрос

26
Der Hochstapler

Вы не просто размещаете весь сайт с CDN, просто ваш контент .

Я только что понял, что ответил на аналогичный вопрос некоторое время назад: что делает akamaihd.net?

Поток запроса данныхИзображение WikiMedia

Так что ссылки на ваш сайт http://akamai/myfile.ext. Это будет запрос myfile.extот akamai. akamaiможет затем отправить перенаправление HTTP на фактический контент-сервер.

Теперь, когда этот последний шаг будет кэширован, прекрасно, все будущие запросы будут отправляться на ближайший контент-сервер.

Как это работает?

Давайте предположим, что этот сайт:

<html> <body> <img src="http://cdn/oliver.png" /> </body> </html> 

Я запрашиваю этот сайт с моего собственного веб-сервера. .htmlФайл не прошел с cdn. Не является DNS моего веб-сервера.

Первоначальный запрос

Мой браузер получил этот HTML-файл и теперь анализирует его. Он находит упомянутое изображение и отмечает, что он расположен в http://cdn/oliver.png. Он запрашивает этот файл.

Для этого нужно найти IP-адрес cdn. В нашем примере это IP-адрес 10.10.10.10.

С этим IP-адресом он может подключиться к cdnсерверу и запросить /oliver.png.

Географическое положение

Теперь cdnпонимает, « этот парень из Германии! ». Поэтому вместо того, чтобы отправить мне мою удивительную картинку, которую я хотел, она отправляет мне HTTP-перенаправление:

/oliver.png не здесь. Это в10.10.33.33/oliver.png

Так что мой браузер спросит 10.10.33.33(что, я надеюсь, ближе) для картинки.

Шутки в сторону?

Я не говорю, что так работают ВСЕ CDN, но это был бы один подход.

Можно также реализовать демон DNS, который возвращает разные результаты для поиска имени в зависимости от местоположения того, кто отправил запрос.
Но я сомневаюсь, что это делается на практике. Но, может быть, я просто не представляю, как правильно это настроить. Смотрите пушистый ответ о том, как это может работать.

Кто управляет CDN?

У большинства глобальных игроков есть своя собственная сеть доставки контента (или я бы так предположил). Некоторые провайдеры просто выгружают определенные сервисы в большие CDN (как Microsoft делает с загрузками MSDN). И это может как-то коснуться вашей второй темы.

Учтите это, в MSDN Microsoft предлагает скачать продукт. Эти загрузки затем предоставляются Akamai. Если вы можете определить URL-адрес этой загрузки, вы можете просто загрузить продукт, даже не связываясь с Microsoft.

Это проблема безопасности? Не совсем, потому что то, что загружается, все еще защищено (ключом продукта).

Но как насчет других данных?

Если ваши данные имеют отношение к безопасности, то это не материал CDN. Если вы не хотите, чтобы что-то было доступно как можно шире, не помещайте это в CDN.

Скажем, сайт http: //somewebsite/file.txt. Скажем, Akamai DNS используется. Затем отправляется ли первый запрос от клиента на какой-либо веб-сайт или сам первый запрос направляется в Akamai (потому что каким-то образом используемый DNS клиент знает, что используется Akamai CDN)? p2pnode 11 лет назад 0
И, возможно, я не понимаю перенаправления HTTP и того, что они могут достичь, поэтому мой вопрос остается открытым: как клиент узнает, как использовать IP-адрес пограничных серверов Akamai, чтобы центральные серверы Akamai не приходили в голову при все.. p2pnode 11 лет назад 0
@ p2pnode: я немного расширил ответ. Надеюсь, это включает в себя то, что вам интересно. Der Hochstapler 11 лет назад 0
Разве от этого нет существенного снижения производительности? Вместо передачи всех данных по одному TCP-потоку используются несколько потоков, что приводит к дополнительным накладным расходам при подтверждении связи и т. Д. Akash 11 лет назад 1
@Akash: Обычно вы бы не использовали CDN для * всего *, а только для отдельных больших файлов. Так что на практике это не проблема. Der Hochstapler 11 лет назад 0
11
fluffy

Довольно распространенный подход к CDN заключается в использовании так называемого « anycast ». Это работает так, что ваши распределенные серверы располагаются вместе с DNS, которые отвечают этим сервером в качестве места назначения; Например, у вас может быть три сервера в разных хостингах, и все их соответствующие DNS-серверы утверждают, что их IP-адрес является каноническим для вашего сервера (например, назовите его content.example.com). Каждый из DNS настроен на использование одного и того же глобального IP-адреса, и затем все серверные средства используют обновления BGP, чтобы сделать так, чтобы маршрут к ближайшему серверу выиграл - поэтому, когда вы выполняете поиск по имени content.example.com, самый быстрый / ближайший / наиболее доступный DNS отвечает на запрос своим HTTP-сервером.

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

Насколько я понимаю, Akamai хотя бы частично работает таким образом.

5
Fiasco Labs

Также доступны CDN типа Origin Pull.

Amazon Cloudfront может использовать эту технику.

Вы устанавливаете CNAME, например media.example.com, который указывает на назначенное им имя сервера, и оставляете весь свой контент на своем сервере. Для изображений и контента, которые вы хотите доставить через CDN, вы используете media.example.com в URL. Запрос направляется в их серверную сеть, и если контент недоступен, их серверы извлекают контент с вашего сервера. Попав в систему, контент распределяется по серверным фермам, ближайшим к месту, где существует потребность, и остается там для назначенного TTL. Ваш сервер больше не видит трафик в кэшированном контенте до тех пор, пока не истечет TTL и Cloudfront не будет обновлять его.

1
igorlord

Akamai не работает таким образом. Различные CDN работают по-разному, но Akamai специально не делает anycast для своих веб-серверов.

Когда пользователь в Нью-Йорке хочет www.acme.com, сервер имен acme.com перенаправляет («делегаты») на сервер имен Akamai. Сервер имен Akamai видит, где находится машина, задающая вопрос (на основе своего IP-адреса), и возвращает IP-адрес ближайшего / лучшего сервера Akamai для обслуживания www.acme.com.

Как это устроено? Сервер имен Akamai получает запрос от пользователя напрямую или от DNS-сервера пользователя, который делегирует серверу имен Akamai? Таким образом, это будет геолокация в соответствии с расположением DNS-сервера, а не пользователя? odiszapc 9 лет назад 0
0
Brad Parks

Большое резюме того, как работает CDN Akamai, можно найти здесь

Короче:

  • Серверы CDN имеют запись CNAME, которая указывает на DNS-серверы Akamai.
  • Таким образом, первый запрос, который браузер клиентов делает к серверу CDN, проверяет DNS на DNS-сервере Akamai, который отвечает IP-адресом сервера Akamai, который близок к пользователю (называемый «пограничными серверами»)
  • Эти пограничные серверы могут обслуживать статические элементы из локального кэша, если это недавно было запрошено другим пользователем, и даже не нужно возвращаться на ваш сервер, чтобы получить копию актива.
  • Недостающие элементы или страницы без кэширования направляются через сеть Akamai на другой пограничный сервер рядом с хостом. Этот пограничный сервер выполняет фактические запросы к узлу хоста и передает их обратно по сети на исходный пограничный сервер, а оттуда они возвращаются конечному пользователю.
  • Поскольку пограничные серверы обмениваются данными внутри системы с использованием собственных протоколов Akamai и маршрутизируют узкие места, трафик может проходить намного быстрее, чем через общедоступный Интернет.

и как упоминалось в сообщении в блоге, указанном выше, некоторые крупные корпорации разрешают DNS, используя свои собственные серверы, что может свести на нет некоторые преимущества использования CDN.

-2
abhimanyu rail

CDN работает на Anycast DNS. Anycast DNS работает на Anycast IP. Anycast ip: один IP назначается на нескольких серверах. Когда пользователь запросит разрешение DNS, этот запрос будет обработан ближайшим сервером и предоставит данные с сервера с наименьшей задержкой.

Как это улучшает существующие, гораздо более полные ответы? Chenmunka 8 лет назад 0

Похожие вопросы