Назад | Перейти на главную страницу

Как Akamai CDN передает контент от закрытого пограничного сервера пользователю?

Изучив некоторые ресурсы в Google, я понял, как работают пограничные серверы CDN Akamai, но получил несколько вопросов о внутреннем устройстве.

  1. Скажем, у меня есть статический контент, кэшированный в Akamai CDN (XXX.XX.XXX.XXX, например, в Сиэтле) для моего сайта xyz.com (YYY.YY.YYY.YYY). Здесь, в некотором интерфейсе Akamai, я перенаправлю вызов на свой IP-адрес исходного веб-сервера и попрошу Akamai кэшировать статический контент.
  2. Теперь всякий раз, когда я набираю www.xyz.com в браузере (для любого ресурса, будь то статический или динамический), вызов будет идти на DNS-сервер для разрешения IP для домена. www.xyz.com .
  3. DNS-сервер предоставит IP-адрес настроенного сервера Akamai Edge (скажем, XXX.XX.XXX.XXX, который жестко запрограммирован в пункте 1). У меня вопрос: как я обеспечу, чтобы DNS-сервер предоставлял пограничный сервер, ближайший к пользователю? Будет ли он всегда предоставлять XXX.XX.XXX.XXX, который является IP-адресом Сиэтла, независимо от того, что пользователь пытается получить доступ к сайту из Китая или Индии?

Это «волшебство» Akamai DNS, определяющее, куда отправить клиента для получения запроса.

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

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

Интернет-маршрутизация обычно работает по протоколу пограничного шлюза (BGP), где автономные системы (идентифицируемые номерами AS) обмениваются информацией о том, какие подсети и какие системы контролируются. При определении маршрута к IP-адресу маршрутизаторы обычно выбирают маршрут, который проходит через наименьшее количество автономных систем.

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

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


Дополнительная информация (как работает DNS)

Когда DNS-клиент запрашивает имя у DNS-сервера, сервер либо предоставит имя, если оно авторитетный для этого домена, или он будет искать его на других серверах (если он настроен как рекурсивный) или он предоставит ранее кешированный ответ. Глобальные «корневые» серверы позволяют DNS-серверам находить DNS-серверы, которые являются полномочными для любого частичного домена, чтобы они могли направлять рекурсивный запрос.

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

Обычно DNS-серверы являются либо авторитетными, либо рекурсивными (обычно не одновременно). При поиске адреса для имени, которое имеет запись CNAME, клиент затем должен найти IP-адрес, который имеет запись A, на которую указывает запись CNAME. Таким образом, если у вас есть записи CNAME, указывающие на пограничные серверы Akamai, тогда необходимо будет запросить доамин Akamai, поскольку серверы домена Akamia являются полномочными для этого домена.

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

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

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

Единственное, что ты делаешь, это настроить записи DNS в соответствии со спецификациями Akamai. Вы вводите только адрес и записи CNAME, которые они вам дают. Akamai решит задачу определения того, какой граничный маршрутизатор ближе всего к конкретному пользователю.

Есть хорошая статья, в которой описан процесс.

Название статьи: «Алгоритмические самородки в распространении контента»