11 сентября 2014 в 17:00

Знакомство с Content Delivery Network

Содержимое: что такое CDN? История возникновения. Зачем она нужна? Кому она нужна, а кому нет? Порог вхождения, стоимость, издержки. Основные технологии.

CDN — сокращение от content delivery network, то есть “сеть доставки контента”. Чаще всего это множество серверов с специализированным ПО, которые ускоряют доставку (“отдачу”) контента конечному пользователю. Сервера расположены по всему миру таким образом, чтобы время ответа посетителям сайта было минимальным. Под “контентом” чаще всего подразумевают видео и статические элементы веб-сайтов (не требующие выполнения кода на сервере или запросов в базу данных, такие как css/js), но к “контенту” относятся и совсем неожиданные вещи — например, игры в Стиме (использует CDN для отдачи игр), обновления для операционных систем и т.д.



Немного истории

Резкий рост Интернета в середине 90-х привёл к ситуации, что сервера тех лет не могли в одиночку выдержать нагрузку (много ли может отдать могучий двухпроцессорный сервер на базе Pentium Pro на частоте в 266 МГц с 128 мегабайтами памяти?). Лимит производительности серверов и потребность во всё большей и большей производительности породила ныне забытые слова: “ферма серверов”, “иерархическое кеширование”… Айтишный новояз удивительно чувствителен к возрасту — и слова вроде “servers farm” или “information superhighway” сейчас ассоциируются с тёплыми ламповыми CRT-мониторами, а не с прогрессом. В ходе разработки и внедрения разных решений была замечена одна важная особенность: есть два типа контента — статический и динамический.

Динамический контент формируется сервером в момент получения запроса сервером, чаще всего при активном участии базы данных. Если на странице снизу надпись “page was generated in 0.333 seconds” — это как раз пример динамического контента.

Статический контент на сервере находится в готовом виде — кто бы не прислал запрос, сервер будет отдавать одно и то же (с поправкой на возможные ACL). Важно, что содержимое при этом не меняется от запроса к запросу.
Статический и динамический контенты создают разный тип нагрузки на сервер. Когда раздаётся “динамика”, то важны процессор, IO (для базы данных) и сколько-то памяти. Когда раздаётся статика, процессор почти не важен, IO важно только для тех файлов, которые не кешированы, а основное требование — это скорость сети. Заставлять раздавать статику серверами, которые раздают динамику, можно, но это совмещение ролей, которое мешает друг другу. Особенно тяжело приходится в тот момент, когда IO от статики начинает мешаться с IO от динамики, а нагрузка на IRQ мешает выполнять скрипты динамики.

Ещё более важной деталью является то, что “динамический” обычно означает наличие “состояния” (сессии и связанных с ним данных), а статика — нет. Статику можно масштабировать горизонтально без сложных двухсторонних синхронизаций с центральным сервером. В случае с динамикой так не получится — нужна либо общая база данных, либо методы синхронизации и блокировок.

Средние и крупные компании начали раздавать статику и динамику с разных серверов, расположенных в разных местах планеты, уменьшая нагрузку на сайты с динамикой за счёт выноса с них статики на легко масштабируемые сервера. После чего сделать шаг до “аутсорса” раздачи статики было просто, и начали появляться компании, которые сделали раздачу статики основой (или хотя бы крупной составляющей) своего бизнеса.

О главном


Заметим, что CDN решает ещё более важную проблему, чем облегчение жизни серверам приложений.
Все современные CDN размещают копии контента на разных серверах по всему миру и направляют клиента на ближайший (к клиенту) сервер. Результат — сокращение latency, то есть задержки между запросом и ответом. Если на странице много изображений (пусть даже мелких картинок), то чем быстрее они окажутся у клиента, тем быстрее клиент увидит страницу. И если мы уберём из рассмотрения страдальцев на dialup/gprs, то время, за которое будет показана страница определяется практически только сетевой задержкой. Если мы говорим про расстояния в сотни километров (~10мс задержка), это не существенно. Но если речь про расстояния в континенты — то тут задержка в сотни миллисекунд (до 500-600!) начинает уже играть радикальную роль. А если же контент отдаётся с сервера, который в нескольких километрах от пользователя, то случается чудо! Австралия видит данные с сайта из США в единицы милисекунд, Китай из сайта из России, Франция с сайта из Бразилии. Без участия океанических кабелей.

Работает это и на меньшем масштабе: Например, Яндекс при помощи CDN в свое время знатно ускорил работу почты в регионах России, которым до Москвы по оптике топать и топать.

Ускорение доставки контента стало главной киллер-фичей CDN, а всё остальное (снижение нагрузки, её балансировка и т.д.) — стало второстепенным. Важным, но не критическим. В конце-концов, любую нагрузку можно завалить деньгами. Но никакими деньгами нельзя сделать так, чтобы без локальных точек присутствия сигнал из Перми доходил до Сан-Франциско за десятки миллисекунд.

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

Однако, сервера по всему миру, система синхронизации контента и направления клиентов к ближайшим серверам и т.д. — всё это не бесплатно. Чаще всего CDN просят дополнительные деньги по сравнению с обычным трафиком аплинков, хотя для некоторых регионов может оказаться, что трафик CDN выгоднее, чем трафик аплинка (но это, скорее, говорит о том, что интернет в регионе не ахти).

Как это работает на практике?


Со стороны посетителя сайта: он заходит на сайт example.com, где ему отдают html-страницу. В этой html-странице все css, js, картинки и видео — указывают на сайт cdn.example.com — контент грузится оттуда. Когда браузер клиента обращается этот адрес, то благодаря магии BGP его запрос отправляется на ближайший узел присутствия. Сама магия BGP состоит в том, что провайдеру посетителя на IP-сеть, в которой находится cdn.example.com, присылается несколько анонсов от разных сетей (в которых есть точка присутствия), а маршрутизатор провайдера из них выбирает самый близкий. В результате, запрос уходит на ближайший сервер, который отвечает на него, и ответ уходит аналогично, тоже по короткому маршруту.

Со стороны владельца сайта есть два варианта:
  1. файлы статики загружаются в объектное хранилище, по ftp, scp или иным удобным методом. На объектное хранилище (в панели управления) назначается dns-имя (своё, или выданное провайдером — зависит от технологии), которое и указывается в html-странице.
  2. Владелец сайта указывает ‘origin’ для домена, после чего, по обращению клиента, CDN идёт на сайт, к которому подключен cdn и скачивает к себе файлы и отдаёт их браузеру пользователя.

Волшебным образом, данные оказываются доступны клиенту много быстрее, чем основная html-страница.

Кстати, она может быть тоже статической. По такому принципу работают, например, страницы на github.io — это чистый CDN, в нём всё раздаётся статикой.

Кому нужен CDN?


Тем, кому важно отдать статику быстро множеству посетителей, которые находятся далеко от серверов компании (ситуация ещё острее для компаний, у которых посетители раскиданы по большой территории, то есть даже перенос серверов “поближе” смысла не имеет — всё равно большинство окажется “далеко”).

Тем, у кого очень большой объём файлов — и стоимость трафика CDN оказывается ниже стоимости трафика, уходящего к аплинкам (у крупных сайтов обычно трафик стоит разных денег — локальный дешевле, “глобальный” дороже).

При определённой полосе, вынос статики на CDN оказывается выгоднее, чем апгрейд сетевого оборудования. Обычно статика занимает значительную часть полосы, и вместо апгрейда с 1G до 10G, или с 10G до 40G, куда дешевле выкинуть 80% трафика на CDN и оставаться на разумных по цене серверах.

Различия


Если с CDN всё понятно, то как насчёт их поставщиков? Компаний много, они различаются ценой, услугами и качеством.
Вот основные факторы, которые надо определить для себя при выборе поставщика:

1. Количество точек присутствия (Point of Presence)
Чем больше точек, тем лучше, однако… Oднако, зачем вам точки присутствия в Китае, если сайт русскоязычный? А количество точек присутствия в Австралии при выходе на американский рынок… При сравнении CDN следует учитывать число точек присутствия в интересующих странах и регионах. Просто заверений о большом числе точек присутствия и хорошей связности не достаточно — для информированного выбора нужно видеть список точек присутствия и сопоставлять их с потенциальной аудиторией сайта.

Сами точки присутствия так же не равнозначны — связность и пиринговые соглашения с локальными провайдерами очень важны. К сожалению, “иногородцу” оценить связность довольно сложно (нужно понимать расстановку сил на локальном провайдерском рынке), но, сравнивая предложения стоит уточнить о списке пиров каждого из кандидатов в самых важных точках присутствия.

2. Политика кеширования
Для того, чтобы быстро отдавать контент с локального сервера, надо, чтобы контент на локальном сервере появился (и оставался). Схем кеширования множество, вот самые очевидные:
  • Репликация всего контента. Плюс — быстро работает сразу, даже первый запрос отдаётся быстро. Минус — дорого.
  • Репликация по первому обращению (самая распространённая схема). Первое обращение медленное, дальше быстрее. Может быть дорого, в зависимости от политики устаревания (retention policy).
  • Асинхронная репликация по превышению определённого порога обращений. Более экономичная версия, большее число клиентов получает медленное обслуживание.

Рядом с политикой кеширования идёт политика устаревания (retention policy): когда именно объект удаляется с сервера в точке присутствия? По таймауту, по снижению числа обращений ниже некоторой величины, “никогда”, через фиксированное время? И кто оплачивает хранение копии?

3. SLA
Да, да, легендарный и необъятный Service Level Agreement. Перед тем, как радоваться длинной чреде девяток, уточните — это SLA для CDN “вообще” или для всех точек присутствия? Если в самой важной для вас локации ломается сервер и контент отдают “из соседней страны” это будет засчитываться за даунтайм по SLA? Ну и, основное, чем грозит несоблюдение SLA поставщику? Вам вернут копеечку от месячного платежа, или там есть солидные штрафные санкции?

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

4. Value added services
CDN может предоставлять дополнительные услуги. Пример (список неполный):
  • real-time информирование об отказе отдельных узлов
  • Аналитика
  • Интеграция с CMS
  • DRM для контента
  • Готовый html/flash видеоплеер для видеофайлов с поддержкой особенностей CDN
  • Управление политикой кеширования


Очень важно обратить внимание на поддержку нужны протоколов и файлов. Узнайте, поддерживает ли выбранный вами провайдер потоковое воспроизведение флеш- и медиафайлов (RTMP, RTSP), если вы планируете доставлять именно такой контент.

Возможно, провайдер очень хорош во всем остальном, но, если он не поддерживает нужные вам технологии, вам это вряд ли понравится.

5. Технические нюансы
Технология переадресации: Это либо эникаст на уровне DNS, либо переадресация через редиректы. Эникаст, по понятным причинам, работает быстрее.

Аккуратность переадресации: К сожалению, этот показатель сам поставщик объективно оценить не сможет, хотя как раз этот показатель очень важен — какая часть целевой аудитории попадает на ближайший сервер. Часто говорят про ожидаемую задержку (так как фактическое расстояние никого не волнует, а всех волнует время прохождения пакетов — например, бывает так, что стык между двумя сетями перегружен и пакеты ходят медленно, в этой ситуации лучше сходить чуть дальше, но быстрее).

6. Аккаунтинг
Как именно поставщик берёт деньги? За мегабайты или за мегабиты в секунду? Есть ли минимальный коммит (“если раздалось меньше предусмотренного договором доплатить до минимума”), что происходит при оверкоммите (превышении лимита) — отключают/берут больше денег? Есть ли минимальный срок контракта? Есть ли вообще контракт (заключающийся между владельцем сайта и поставщиком CDN), или же это автоматический self-serving on-demand provisioning, то есть “закинул денег на счёт и получил панель управления”?

Начиная с каких объёмов имеет смысл думать о CDN?


Повторим мысль: если нужно быстро обслужить клиентов, то объём трафика уже не важен — важны точки присутствия поближе к целевой аудитории.

Если же значительной потребности в низкой latency нет, а CDN используется для облегчения нагрузки на сервера, то осмысленный объём трафика, с которым стоит начинать думать о CDN — это несколько терабайт в месяц.

Главный вопрос: сколько это стоит?


Цена сильно варьируется от специфики CDN, степени “крутости” поставщика и адаптации CDN под конкретные специальные потребности. Диапазон цен на рынке — от $1 до $140/мегабит полосы, или $0.03-$0.3 за ГБ трафика. Фактическая цена очень часто зависит от добавленных услуг и возможностей CDN. Трафик в США и Европе обычно самый дешёвый, дальше идёт трафик в Азии/Австралии, самый же дорогой трафик — за пределами этих регионов.

Краткий обзор рынка


Все компании делятся на две категории — работающие по существующим публичным тарифам и работающие на основании договорённостей. Вторые компании крайне сложно сравнивать, так как условия в них могут сильно различаться. Однако, “приватный” не означает “маленький” — у приватных компаний чаще всего очень крупные клиенты с огромными объёмами в сотни терабит (полосы), а на “мелюзгу” с десятком гигабит они не заморачиваются.

Вот список популярных CDN (чтобы никого не обижать, список отсортирован в случайном порядке):

Публичные CDN:
  • NetDNA, 2009, минимальный контракт 1 год, цены от ¢1 до ¢6 за Гб в зависимости от объёма, трафик за пределами EU/US в полтора раза дороже, хранение бесплатно
  • Rackspace Cloud Files — ¢4-¢12 за Гб полосы, ¢10 за Гб хранения (реселлит Акамай)
  • MaxCDN от ¢3 до ¢8 за Гб трафика
  • Amazon CloudFront — EU/US — от ¢6 до ¢12 за Гб, хранение бесплатно.
  • CacheFly — ¢20-¢30, минимальный контракт $99/месяц, превышение места оплачивается ($15/Гб)
  • CDN77 — ¢3-¢15/Гб
  • CloudFlare — трафик не оплачивается, различный уровень сервиса стоит различных денег, начиная от базового бесплатного, следующего за ним в $5/месяц, до $200/месяц на лучшем.
  • BitGravity — от ¢7 до ¢20 за Гб, в зависимости от объёма и региона
  • Level 3 — от $100 в месяц, ¢10-¢25 за Гб
  • Leaseweb — от ¢6 до ¢8 за Гб, с минимальной стоимостью от $60/месяц
  • Windows Azure CDN от ¢3 до ¢20
  • CDNsun — от ¢3 до ¢5 за Гб

Приватные CDN:
  • Internap
  • Akamai
  • Limelight Networks
  • AT&T
  • Peer1
  • EdgeCast


Дополнительная информация


Статья написана при поддержке наших коллег из компании UCDN, которые слишком скромны, чтобы включать себя в список выше.
Автор: @webzilla
Webzilla
рейтинг 64,88
Компания прекратила активность на сайте
Похожие публикации

Комментарии (28)

  • +1
    А как управляется нагрузка в BGP-управляемых CDN?

    К примеру, куплен порт 10Г, а пришло трафика на 15Г?
    • +2
      BGP никаким образом не может реагировать на нагрузку (этого нет в протоколе). Маршрутизаторы у ISP обычно имеют крайне сложный конфиг с очень сложными преференциями между стыками (например, не принимать анонсы от кого-то, или слать трафик туда-то на такие-то направления).

      Эта область либо на ручном контроле (мониторинги, предсказания и т.д.), либо управляется очень специальным софтом с кучей эвристик.

      С практической точки зрения, сетевой инженер изучит источник трафика и (если это легитимный трафик со специфичного направления) постарается изменить сетевую конфигурацию так, чтобы трафик с разных направлений распространялся равномерно.

      Заметим, что CDN обычно трафик не принимают, а раздают — управлять исходящим трафиком проще — можно просто использовать несколько маршрутов через несколько аплинков. Один оказался перегружен — трафик идёт на другой.

      На практике же, чтобы от любого дуновения DoS'а не превращаться в тыквы, делается достаточно большая полоса (например, трафика 10Гбит/с, а стык — 40), чтобы выдержать всплески. За такие всплески чаще всего приходится переплачивать, это да.

      А вот объём резервирования на точках присутствия — это ещё один из параметров качества CDN.
  • +5
    Был бы интересен краткий обзор/сравнение российских CDN.
    Если верить вики, сейчас это Ростелеком, Мегафон, CDNvideo и NGENIX.
    • 0
      Еще знаю skypark и airee. И у cdnetworks куча точек в россии.
  • –2
    Очень и очень дорого. Цены должны начинаться с $0.01 за GB.
    • +1
      Не хочу показаться грубым, но кому именно поставщики услуг должны делать такие цены, и почему?
      • 0
        Цены и меньше $0.01 за GB есть, на самом деле, не буду рекламировать, кого интересует — тот найдет )
        • 0
          Вы мне действительно дадите 1 цент за гигабайт в CDN? То есть мне нужно раздавать на Африку, и вы мне там такие цены дадите? Или вы про уютненькие Нидерланды/Мск, опутанные проводами по самое немогу?

          CDN должен давать трафик в местах присутствия целевой аудитории, а не там, где он дешёвый.
          • 0
            Разумеется, а Африке вам таких цен никто не предложит.
            Но если основной трафик отдается в развитых регионах, типа Европы или Штатов (как обычно и бывает), то могут предложить и такую цену, если она позволяет получать прибыль.
      • 0
        Долго писал зачем и расписывал калькуляцию, где 1/3 дохода сайта уплывет в CDN при самых лучших условиях, но передумал.

        Короче, я бы не отказался от низких цен. А пока CloudFlare наше всё.
        • +3
          Так как рынок высококонкурентный и хорошо известный, то наличие цен выше, чем у CloudFlare, говорит о том, что не ценой единой жив CDN.
    • 0
      Любой CDN провайдер, из списка выше, может продать по $0.01. Все зависит от объемов.
  • +1
    Часто вижу такую картину: с сайта все практически загрузилось, а браузер ничего не показывает, т.к. висит запрос с какого-нибудь cdn.jquery.com. Может это и DNS тормозит, или еще что… Но подозреваю, что такая ситуация у многих пользователей возникает.
  • +2
    Есть один неявный минус CDN. В Казахстане блокируют ряд IP-адресов гугла. И это зачастую сказывается на статике, которую часто используют совершенно посторонние сайты. Например шрифты, гугл даёт возможность пользоваться красивыми шрифтами и многие ими пользуются. Но тут оп-па, IP забанен, причём, почему то, коннект просто висит без ответа. Ни «да», ни «нет. И показывается вместо сайта белая страница с несколькими картинками без единой строки текста (потому что браузер покажет текст либо после загрузки шрифта, либо после „отбоя“ по таймауту).
    • +1
      А вот это, кстати, спасибо, ценная мысль — цензура действительно может влиять на предпочтительность тех или иных CDN.
  • 0
    Помнится на MSK-IX форуме чувак из ivi довольно толково обрисовал anycast и cdn.
  • +4
    Eсли кому интересно недавно сделали open-source калькулятор для расчета цен www.cdncalc.com/ Cам код здесь Github
    • –1
      Для российских IP реклама не показывается, или как?
      Пользоваться невозможно, постоянно кидает на разные рекламные сайты.
      • 0
        в смысле? на сайте нет вообще рекламы
  • 0
    Вот сравнение распространенности CDN seomon.com/technologies/cdn/
    CloudFlare всех побеждает.
    Чем посещаемей вебсайты, тем чаще они используют CDN.
    • 0
      Я сильно подозреваю, что CloudFlare побеждает потому, что у них идет сразу комплекс услуг (т.е. это не чистый CDN-сервис).
  • 0
    А подскажие по такому юзкейзу. В целях экономии был написан свой «cdn». Nodejs сервак раздающий статику. Загрузка на его происходи следующим образом.

    Отправка файла на основной домен.
    Тут происходит поиск по хешу этого файла, если уже залит отдаем на него ссылку, если нет создаем новуюзапись в бд и отдаем RabbitMQ на заливку в цдн. Сами же ожидаем результат.
    Воркер рэбита получив пакет с файлом загружает его пост запросом на cdn по успешному завершению шлет пакет обратно на основной сервер.
    Получив пакет об успешной заливке файла оснвной сервер возвращает ссылку на фаил в cdn.

    Проблема в том, что происходит грубо говря 2 пост запроса: первый от клиента на оснвной сервер и второй от воркера к cdn. Как итог крайне медленно.
    • 0
      Ссылка — два хождения туда-сюда. Имеет смысл только для тяжёлого контента (например, начала видеотрансляции). Для ускорения загрузки страниц, очевидно, хуже чем «просто сходить за файлом».
      • 0
        Сейчас cdn используется только для картинок. В режиме чтения cdn дает отличный прирост загрузки страниц. Вопрос только как ускорить загрзку данных в него.
    • 0
      Есть вариант, что б cdn сам присасывался к RabbitMQ и ожидал картинки из своей очереди, но не очень хотеслоь бы его так усложнять.
  • +1
    Кому интересно, лекция на тему: Особенности построения современных CDN.
  • +1
    А тут приходит Гугл, упоминает, что https ему теперь будет нравиться более http, мы читаем условия поддержки https в каждом cdn, и узнаем для себя много нового )

    Вообще, конечно, CloudFlare, так же, как Incapsula (про которую не упомянули, что-то) с их комплексным предоставлением услуг, молодцы тем, что берут на себя не только раздачу картинок, но и ускорение работы сайта, а заодно еще порываются (если разрешить) оптимизировать код страниц, чтобы еще оптимальнее достичь конечной цели — ускорить работу с сайтом для юзера. Улучшайзеры эти, конечно, не всегда нужны (а порой и прямо вредны), но gzip сделать на текстовых файлах — почему бы и нет?
  • 0
    Лимит производительности серверов и потребность во всё большей и большей производительности породила ныне забытые слова: “ферма серверов”, “иерархическое кеширование”… Айтишный новояз удивительно чувствителен к возрасту — и слова вроде “servers farm” или “information superhighway” сейчас ассоциируются с тёплыми ламповыми CRT-мониторами, а не с прогрессом.

    Ну кто как, я ежедневно сталкиваюсь на том же stackoverflow с терминами вроде «Sharepoint server farm»

Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

Самое читаемое Разное