Как работают CDN (сети распространения контента)?
Принимая Akamai в качестве CDN. Из того, что я понимаю, когда клиент запрашивает страницу, запрос отправляется на центральный сервер Akamai, который затем, в зависимости от местоположения клиента, получает пограничный сервер Akamai, и последующие запросы от клиента направляются непосредственно на этот пограничный сервер. Мой вопрос таков:
Когда клиент запрашивает веб-сайт (по имени), как только DNS разрешает имя в IP-адрес центрального сервера Akamai и передает его клиенту, клиент будет удерживать этот IP-адрес, тогда как последующие запросы смогут перейти непосредственно к IP-адресу пограничных серверов Akamai?
Или это то, что необходимо, чтобы при использовании CDN само разрешение DNS выполнялось сервером CDN?
У таких крупных компаний, как Google, Amazon, Facebook, есть свои собственные серверы CDN, или они полагаются на сторонних поставщиков CDN, таких как Akamai? Скажите Google и Yahoo! оба используют CDN s Akamai, а затем контент Yahoo! а гугл проживает на одном сервере? Разве это не представляет потенциальную проблему безопасности?
6 ответов
Вы не просто размещаете весь сайт с CDN, просто ваш контент.
Я только что понял, что ответил на аналогичный вопрос некоторое время назад: что делает akamaihd.net?
Так что ссылки на ваш сайт 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.
Довольно распространенный подход к CDN заключается в использовании так называемого " anycast". Это работает так, что ваши распределенные серверы располагаются вместе с DNS-серверами, которые отвечают этим сервером в качестве пункта назначения; Например, у вас может быть три сервера в разных хостингах, и все их соответствующие DNS-серверы утверждают, что их IP-адрес является каноническим для вашего сервера (назовите его, скажем, content.example.com
). Каждый из DNS настроен на использование одного и того же глобального IP-адреса, и затем каждое из средств сервера использует обновления BGP, чтобы сделать так, чтобы маршрут к ближайшему серверу выиграл - поэтому, когда вы выполняете поиск имени на content.example.com
самый быстрый / ближайший / самый доступный DNS отвечает на запрос своим HTTP-сервером.
Таким образом, не нужно никаких хитростей GeoIP, и вы всегда получаете контент с того сервера, который вам наиболее быстр - который может иметь или не иметь никакого отношения к его физическому расположению из-за разнородной природы Интернета.
Насколько я понимаю, Akamai хотя бы частично работает таким образом.
Также доступны CDN типа Origin Pull.
Amazon Cloudfront может использовать эту технику.
Вы устанавливаете CNAME, например media.example.com, который указывает на назначенное им имя сервера, и оставляете весь свой контент на своем сервере. Для изображений и контента, который вы хотите доставить через CDN, вы используете media.example.com в URL. Запрос направляется в их серверную сеть, и если контент недоступен, их серверы извлекают контент с вашего сервера. Попав в систему, контент распределяется по серверным фермам, ближайшим к месту, где существует спрос, и остается там для назначенного TTL. Ваш сервер больше не видит трафик в кэшированном контенте, пока не истечет TTL и Cloudfront не должен обновить его.
Akamai не работает таким образом. Различные CDN работают по-разному, но Akamai специально не делает anycast для своих веб-серверов.
Когда пользователь в Нью-Йорке хочет www.acme.com
Сервер имен acme.com перенаправляет ("делегаты") на сервер имен Akamai. Сервер имен Akamai видит, где находится машина, задающая вопрос (на основе своего IP-адреса), и возвращает IP-адрес ближайшего / лучшего сервера Akamai для обслуживания. www.acme.com
,
С кратким описанием работы CDN Akamai можно ознакомиться здесь.
Короче:
- Серверы CDN имеют запись CNAME, которая указывает на DNS-серверы Akamai.
- Таким образом, первый запрос, который браузер клиентов делает к серверу CDN, проверяет DNS на DNS-сервере Akamai, который отвечает IP-адресом сервера Akamai, который находится рядом с пользователем (называемый "пограничными серверами")
- Эти пограничные серверы могут обслуживать статические элементы из локального кэша, если это недавно было запрошено другим пользователем, и даже не нужно возвращаться на ваш сервер, чтобы получить копию актива.
- Недостающие элементы или страницы без кэширования направляются через сеть Akamai на другой пограничный сервер рядом с хостом. Этот пограничный сервер выполняет фактические запросы к узлу хоста и передает их обратно по сети на исходный пограничный сервер, а оттуда они возвращаются конечному пользователю.
- Поскольку пограничные серверы обмениваются данными по внутренним каналам с использованием фирменных протоколов Akamai и маршрутизируют узкие места, трафик может проходить намного быстрее, чем через общедоступный Интернет.
и как упоминалось в сообщении в блоге, указанном выше, некоторые крупные корпорации разрешают DNS, используя свои собственные серверы, что может свести на нет некоторые преимущества использования CDN.
CDN работает на Anycast DNS. Anycast DNS работает на Anycast IP. Anycast ip: один IP назначается на нескольких серверах. Когда пользователь запросит разрешение DNS, этот запрос будет обработан ближайшим сервером и предоставит данные с сервера с наименьшей задержкой.