Блог Леопарда

Все возможно, невозможное делается дольше

Что такое CDN и с чем его едят

Начнем с простого. Что значат эти буквы в моем понимании?

Одноточечная дистрибуция (слева) и Дистрибуция средствами CDN (справа)

Одноточечная дистрибуция (слева) и Дистрибуция средствами CDN (справа)

Сеть доставки (и дистрибуции) контента (Content Delivery Network или Content Distribution Network, CDN) – географически распределенная сетевая инфраструктура, позволяющая оптимизировать доставку и дистрибуцию контента конечным пользователям в сети Интернет. Использование контент-провайдерами CDN способствует увеличению скорости загрузки интернет-пользователями аудио-, видео-, программного, игрового и других видов цифрового контента в точках присутствия сети CDN. Значит я могу увеличить скорость своего сайта и уменьшить нагрузку на сервер через это? Еще как…

Теория

На скорость загрузки веб-страницы и ее содержимого сильно влияет то, насколько далеко пользователь находится от сервера. Это происходит из-за того, что при использовании технологии TCP/IP, применяемой для распространения информации в сети Интернет, задержки при передаче информации зависят от количества маршрутизаторов, находящихся на пути между источником и потребителем контента. Размещение контента между несколькими серверами средствами CDN сокращает сетевой маршрут передачи данных и делает загрузку сайта быстрее с точки зрения пользователя.

Использование CDN снижает количество хопов, что существенно увеличивает скорость скачивания контента из сети Интернет. Конечные пользователи испытывают меньшую задержку при загрузке контента, отсутствие резких изменений скорости загрузки и высокое качество потока данных. Возникающая стабильность позволяет операторам CDN доставлять видео-контент в формате HD, обеспечивать быструю загрузку файлов больших размеров или организовывать видео вещание с высоким качеством сервиса (QoS) и низкими затратами на сеть.

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

Размещение серверов в непосредственной близости от конечных пользователей может увеличить исходящую пропускную способность всей системы. К примеру, наличие единственного порта 100 Мбит/с не означает данную скорость на всех участках сети, так как свободная пропускная способность магистрального канала в момент передачи может быть всего 10 Мбит/с. В случае, когда используются 10 распределенных серверов, суммарная пропускная способность может составить 10*100 Мбит/с.

Какие проблемы решает CDN

Доступность контента

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

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

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

Высокая скорость загрузки

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

В качестве примера стоит привести следующие цифры: время ответа обычного сервера, расположенного на VPS (даже не на shared-хостинге) составляет 50-200 мс (в зависимости от различных условий, в том числе от загруженности канала). Для CDN это число очень редко превышает 10мс.

Снижение нагрузки на сервер — источник информации

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

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

Размещение «тяжелого» контента

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

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

Отказоустойчивость и безопасность

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

Масштабируемость и эластичность по нагрузке

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

Практика

На сегодняшний день существует множество провайдеров, которые предоставляют услугу CDN, но, как не странно, почти все они работают на коммерческой основе. Но есть также и бесплатные. Одна из таких – Coral Content Distribution Network (http://www.coralcdn.org/). Настройка её еще проще. Пусть ваш сайт находится на домене http://example.com. Тогда работа через Coral будет осуществляться через http://example.com.nyud.net (то есть просто добавте к домену в конце приставку .nyud.net). Все! Теперь просто замените урлы на картинки, css и js на Coral и контент будет отдаваться через него. Чуть не забыл, если ваш сайт висит не на 80 порту, а например на 8080, то придется заменить вот так: http://example.com:8080  —>  http://example.com.8080.nyud.net. Кстати, для блогов, которые работают на WordPress есть плагин, который все делает автоматом через Coral – Free CDN.

Хочу заметить, что для стран бывшего СНГ Coral показывает не лучшее быстродействие, но если ваш ресурс слишком загружен – может помочь хоть как то :) А если не жалко и денег – есть коммерческие варианты (на практике использовал только Amazon и он оправдал себя), которые очень отлично показывают в работе (Akamai Technologies, Amazon CloudFront, AT&T, BitGravity, CacheFly, CDNetworks, Cotendo, EdgeCast Networks, GoGrid, Highwinds Network Group, SimpleCDN и т.д.)

2 комментария

  1. Непонятно как оно работает
    ЦДН используется для отдачи статики?
    Т.е. основной сервер отдает динамический контент, а статику загружает себе ЦДН-провайдер и отдает через свои серверы?

    • >>ЦДН используется для отдачи статики?
      А для чего же еще? Ты наверно даже пост не читал.