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

37

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

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

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

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

p2pnode
источник

Ответы:

27

Вы не просто размещаете весь сайт с 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.

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

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

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

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

пушистый
источник
5

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

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

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

Fiasco Labs
источник
1

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

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

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

С кратким описанием работы CDN Akamai можно ознакомиться здесь.

Короче:

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

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

Брэд Паркс
источник
-2

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

абхиманью рельс
источник
Как это улучшает существующие, гораздо более полные ответы?
Ченмунка