Cdn сервис. CDN: что это такое и как работает? Что такое CDN
Многие неоднократно слышали об использовании CDN. Что это такое? Расшифровка этой аббревиатуры переводится с английского как сеть доставки контента юзеру, распределённая регионально.
Какие же тривиальные преимущества она несёт? Из бесспорных плюсов - разгрузка источника контента и сбережение кэша в ближайшей для потребителя географической точке. Многие могут задаться вопросом, зачем это нужно. Ответ прост - для того, чтобы покупатель получал личный контент с кратчайшими задержками. Эта сеть применяется как для простого http-траффика, так и для поточного вещания. Во втором случае юзер получает стойкое изображение, а медиапоток реже слетает и чаще проигрывается в более высоком качестве (при мультибитрейте).
Если CDN сторонний, то лучшим вариантом будет отправка в него лишь только предельной нагрузки, поддерживая тем самым минимально-комфортную ширину канала (каналы стоят дорого), и обеспечивая экономию на конечном оборудовании и его обслуживании.
Самый актуальный вопрос - как это устроено? На самом деле односложно ответить нельзя. В качестве ответа можно привести несколько различных вариантов.
Итак, что это - CDN? Можно начать с более знакомого варианта (максимальная экономия). Сеть - это совокупность крупных провайдеров, держащих собственные ДЦ (к примеру, "Мегафон", Центральный телеграф и тому подобное, в том числе региональные фирмы). Бэкбона как такового нет, все переходит по одним каналам с абонентским и клиентским траффиком.
Взаимосвязь с провайдерами в таком случае крайне слабая. В данных примерах, как правило, без своего оборудования не обойтись, потому что все упирается в дисковую подсистему, а она (несмотря на заявления множества адептов профильных "стальных" компаний), виртуализируется в высшей степени плохо. Нередко можно услышать о том, что ценные IOPS-ы в процессе виртуализации теряются. SSD при этом практически не используются, поскольку это обходится весьма недешево.
Сервисы CDN (Jquery и другие), как правило, сами по себе серверы "универсальные". Они применяются под поточное радиовещание и под веб-кэши, стримовые серверы для flv и mp4-файлов. На подобных серверах используются и всем известные DNS. Балансировка ведется лишь только способами DNS- view по регионам/провайдерам и так далее. Также широко известны Image CDN, облегчающие передачу крупных графических файлов.
В соответствии с вышеизложенным, качество обслуживания происходит на посредственном уровне. Подобный CDN не всегда возможно применить для распространения (кэширования) mp4 и flv-данных или же объемных файлов. Задержки передачи информации в этом случае очень сильно варьируются, вплоть до больших временных промежутков. Из этого следует, что для поточного вещания эта сеть не подходит, как и для моментального веб-траффика. Таким CDN сайт невозможно ускорить существенно.
Более высокий уровеньБолее мощные CDN (в ведущем большинстве нероссийские - Akamai, L3, CDNetworks) обычно не экономят на собственной инфраструктуре вследствие того, что понимают перспективность таких инвестиций. У них устроено все по-другому. Так, сеть у них своя (backbone-сеть), которая служит как для внутреннего, так и для служебного траффика. Кроме того, они обладают и своими AS (автономными системами). Вопросы маршрутизации они также держат в своих руках. Пиринговые взаимоотношения с интернет-провайдерами у них тоже хорошо налажены.
Балансировка здесь построена по принципу anycast + DNS + LVS. Из и вышеуказанной маршрутизации проистекает и вероятность балансировки запросов от потребителя более продвинутыми способами. Это осуществляется не только путем view-DNS, но и anycast. На любом айпи-адресе закрепляется балансировщик, позволяющий отправлять запросы различным серверам.
Конечно, ни о каких "универсальных" нодах речи нет, как и о виртуализации абсолютно всех сервисов. Существуют серверы, закачивающие контент, а также для раздачи мгновенного контента. Также есть промежуточные места для хранения больших объемов данных, которым необходимы стримящие и раздающие составляющие.
Кроме того, бывают серверы: исходные, промежуточные и оконечные мультиплексоры, на которые клиент публикует поток. В случае, если на выходе необходим hls, hds или же sliverlight-стриминг, оконечными серверами, как правило, считаются веб-кэши для очень качественного и быстро загружаемого контента.
Подобная архитектура позволит сервису выдержать огромные нагрузки без риска возникновения задержек у заказчиков и клиентов. В случае с частным CDN рациональнее использовать возможности оборудования при максимальных нагрузках, при этом обеспечивая адекватный уровень сервиса (разброс задержек, срывы потоков и пр.).
Какие серверы находят свое применение?С точки зрения техники, такие сервисы применяют веб-кеши nginx, т. к. у сервера есть все необходимое для проксирования запросов и кэширования. К нему можно писать собственные модули, в т. ч. для закачки нужного контента в кеш, «чистки» определенных объемов информации в нем, сбора статистических данных (и, к примеру, отправки ее в mongo-базу). Также обычно предусматривается сервисное обслуживание со стороны компании-изготовителя. Так, L3 создала для себя собственный nginx (собственный web-сервер CDNJS).
Стримящие серверы - зачастую это что-то собственное (обычно на основе готовых моделей типа red5 или что-то подобное) или Wowza Серверы, куда заказчик публикует потоки, - обычно Adobe FMS. Как правило, к ним относятся Game CDN.
Серверы хранения могут быть и объектными хранилищами типа mogilefs, hadoop, и весьма большими FS типа Lustre либо Gluster, которые сейчас приобретают популярность. Распространены также OpenStack-хранилища Swift (Files CDN), несмотря на то, что они еще не доработаны и не получили широкого одобрения из-за некой «сыроватости».
Транскодеры представляют собой классический вариант ffmpeg с крупной самописной обвязкой (следящее программное обеспечение, менеджер очередности выполнения заданий и пр.)
Статистические данныеМногое зависит от методик по тарифообразованию и схемам биллинга. Но есть моменты, которые нельзя обойти. Учет статистики с использованием netflow в основном невозможен, поскольку объем траффика большой, и нерационально выделять целую статью затрат на такое количество оборудования по обсчету и распараллеливанию процесса. Статистику производят по логам. Начиная с оконечных нод, при схлопывании повторяющихся запросов (на 1 CDN URL с 1 IP или подсети), затем агрегированные логи молотят на специальных серверах, там выводят статистические данные для технических нужд и биллинга.
Как работает статистика в CDN? Что это такое в подробностях? Она включает в себя следующие компоненты:
- обычно есть возможность для создания графика во времени для числа запросов в единицу времени, числа клиентов (используется при поточном вещании), числа ошибок в единицу времени (к примеру, число обрывов для потоков или число ошибок 404, 500 и 502 для http-серверов);
- раскладка графиков по гео-статистике;
- коэффициент кэширования или мультиплексирования (при поточном вещании) в какой-то момент времени;
- для внутреннего использования обычно применяют сбор статистических данных о времени отклика для ответов, нелимитированных по скорости, для фронтов, промежуточных серверов, временную статистику источников.
Собственный API для взаимодействия с CDN является необходимым механизмом - без него не может существовать сам сервис. Зачастую с его помощью можно почистить весь кеш или определенные объекты, настроить или инициировать закачивание файла с источника для предварительного кеширования его в CDN на нодах. В качестве примера можно привести CDN SteamCommunity, на котором работает всемирная игровая сеть.
Сжатый обзор самых популярных CDN-провайдеровКаждому продвинутому пользователю полезно узнать о нескольких наиболее популярных сервисах сетей доставки контента (Jquery CDN и тому подобных). Некоторые из них нашли широкое применение, в то время как другие находятся на стадии роста и развития.
Сеть CloudFlareНа сегодняшний день это наиболее известный и распространенный сервис CDN URL. В сети CloudFlare возможно приобрести платный тарифный пакет или воспользоваться бесплатным тарифом. Компания функционирует на рынке уже более полутора десятков лет и заработала за это время себе безупречную репутацию. Одно из ключевых достоинств сервиса - CloudFlare не задает определенную пропускную способность, как у компаний-конкурентов.
Сеть MaxCDNТакже один из популярнейших CDN-сервисов, которым владеет компания NetDNA (лидер по распределенной доставке). Ключевое достоинство MaxCDN - сервис легко интегрировать с самыми распространёнными системами управления содержимым (WP, Joomla, Drupal, Magento и др.). В этой сети (Frigate CDN) тестовая версия предоставляется бесплатно на неделю, бесплатного тарифа пока нет. Однако стоимость использования вполне доступна.
Сеть TinyCDNСоласно отзывам пользователей, один из лучших сервисов. В его основе - база Amazon Web Services (одной из самых известных в этой сфере компаний), потому он один из самых надёжных. Цена за пользование им ненамного выше, чем у компаний-конкурентов. В TinyCDN есть бесплатная версия для тестирования, предоставляющая на 30 дней возможность пользования услугой.
Google Page SpeedСеть для веб-мастеров Google Page Speed не столь известна, поскольку ее целевая аудитория — разработчики. Развитие ее происходит семимильными шагами, как и других продуктов от компании Google. Если вы хотите собственных экспериментов в работе, обязательно попробуйте этот сервис. Он можно успешно использоваться в самых различных сетях, и отзывы о нем по большей части положительные.
Фактически это технология сводится к анонсированию сетевого адреса, в который резолвится сайт, помещенный в CDN, из этих “географически распределённых мест” и проксированию запросов к условному одному серверу.
Какой профит из этого можно получить?
Размещая данные ближе к клиенту, вы получаете меньшую задержку в ответе для пользователя, сокращаете нагрузку на свой сервер, защита от DDoS… бла-бла-бла - читаем описание любой коммерческой CDN-сети.
Кажется сложным и непонятным? На самом деле это проще чем кажется, ниже всё будет описано более подробно.
2. Почему свой CDN, а не консалтинг. Возникает вопрос, а для чего же делать свою CDN? Много прекрасных CDN-сетей, используй.Во-первых, это не наш метод;)
Во-вторых, эти сети уже построены, и не факт, что они подходят вам по распределенности на все сто. В случае своей CDN мы вольны где угодно размещать её узлы.
В-третьих, мы вкладываем деньги в свою инфраструктуру, а не в чужую.
В-четвёртных, настроить свою CDN мы можем как угодно. Кешировать можно не только статические данные, но и динамические, например, данные для аннонимусов или общие данные. Такой гибкости нам ни одна коммерческая сеть в полном объёме не даст.3. Профит от использования. Итак, что же конкретно можно получить от своей CDN-сети:
Скорость загрузки/сокращение трафика.
Размещая данные ближе к пользователю можно рассчитывать на то, что эти данные он быстрее получит. Логично. Что с сокращением трафика? Кеширование данных на узлах, позволяет сократить число обращений к “главному серверу”. Плюс, мы можем всегда передавать сжатые данные от главного сервера к узлу CDN, в keepalive-соединениях. Можно настроить узел CDN так, чтобы конкурирующий запросы, которые мы кешируем, не выполнялись параллельно. Это тоже позволяет экономить трафик и процессорное время на “главном сервере”. В случае sports.ru это всё в сумме позволяет сократить число запросов и трафик в 3,5 раза к “главному серверу”.
Так же узел CDN является прекрасным местом для размещения DNS-slave сервера. Собственно, по тем же причинам.
Нужно ещё будет как-то проксировать и сохранять ответы приходящих запросов.
Отказоустойчивость будем решать тем фактом, что Proxy и Anycast будем собирать на одном сервере. Если по каким-то причинам он отключится, это никак не повлияет на всю CDN в целом. Естественно, таких серверов должно быть как можно больше;)
А ещё это дело надо правильно настроить, чтобы заставить работать в полною силу. Тюнингу под большие веб-нагрузки и выжиманию всех соков из железа хорошо подходит FreeBSD 9.x. Можно использовать и Linux, но в плане прозрачноcти и простоты настройки, единого типа конфигов в моём личном рейтинге выигрывает FreeBSD
.
Чтобы не повторятся приведу примеры дельных рекомендаций по настройки FreeBSD под аналогичный тип нагрузки:
Или погууглить на соответствующую тему.
Анонсируемую сеть или часть этой сети я предлагаю разместить на интерфейсе локальной петли:
Добавляем строчки в /etc/rc.conf:
ifconfig_lo0_alias1=«inet /32»
И, конечно, не забыть включить маршрутизацию:
Добавляем строчки в /etc/sysctl.conf:
Включаем электронный диск для кеша данных, будем использовать для этого tmpfs:
Добавляем строчки в /boot/loader.conf:
И /etc/fstab:
Анонсировать сеть CDN будем через OpenBGP
:
www.freshports.org/net/openbgpd
Он обладает всем необходимым функционалом и просто настраивается. Скупая информация о нём в интернете нивелируется подробным Man-ом. Так же он может интегрироваться с пакетным фильтром PF, если нам захочется использовать его. Вот простой конфиг, который будет делать всё, что необходимо:
/usr/local/etc/bgpd.conf:
router-id
network
group «Uplink» {
neighbor {
remote-as
descr «Uplink»
announce self
}
}
deny from any
deny to any
allow from
allow to prefix
Перейдём к настройке Nginx . Фактически нам необходимо настроить на Nginx кешируюший статику proxy-сервер c агрегацией и сжатием остальных запросов и кеширумых данных.
Не забываем при сборке Nginx указать сборку с модулем gunzip, для разжимания данных для клиентов, не поддерживающих сжатие.
Nginx.conf:
http {
include mime.types;
proxy_temp_path /mnt/tmpfs/tmp;
proxy_cache_path /mnt/tmpfs/cache/site_cache levels=1:2 keys_zone=site:128m max_size= inactive=;
gzip on;
gzip_disable «msie6»;
gzip_comp_level 4;
gzip_types text/plain text/html application/xml application/x-javascript text/javascript text/css application/json text/xml application/rss+xml;
gunzip on;
server {
listen 80 default;
server_name localhost;
location / {
proxy_cache_use_stale updating timeout http_500 http_502 http_504;
proxy_cache site;
proxy_pass frontend;
proxy_http_version 1.1;
}
location ~* \.(3gp|7z|avi|bmp|css|doc|docx|gif|gz|jpg|jpeg|js|mov|mp3|mp4|ogg|png|ppt|pptx|rar|tar|tiff|torrent|ttf|svg|swf|wma|xls|xlsx|xsl|xslt|zip)$ {
proxy_cache_use_stale timeout updating http_500 http_502 http_504;
proxy_cache site;
proxy_cache_key $uri$is_args$args;
proxy_cache_valid ;
proxy_pass frontend;
proxy_http_version 1.1;
proxy_set_header Connection "";
proxy_set_header Host $host;
}
}
upstream frontend {
server ;
}
Если по каким-то причинам не нужно кешировать динамические запросы на сайте, выключаем кеширование в секции location /. Раскешировать статические данные можно, изменив в них GET-парамметр, например, указывая номер ревизии.
Bind
.
Тут всё просто, устанавливаем и добавляем строчки в named.conf:
type slave;
file "/etc/namedb/slave/site.ru";
masters {
;
};
};
Не забываем разрешить скачивание всей DNS-зоны c мастер-сервера.
That’s all! CDN-сервер настроен. Немного будет переделок, если захочется CDN-нить ещё несколько сайтов;)
Теги:
- cdn
- sports.ru
- highload
Улучшите два критически важных показателя вашего сайта - производительность и защищенность, воспользовавшись подходящей сетью доставки контента.
Вряд ли кому-то нравится низкая скорость загрузки веб-страниц, которая может стоить миллионы из-за упущенных продаж. Факты говорят сами за себя:
- доход Shopzilla увеличился на 12% после того, как время загрузки сократилось с 6 секунд до 1,2 секунд;
- по оценкам Amazon задержки в загрузках страниц лишь на одну секунду могут привести к потере продаж на $1,6 миллиарда ежегодно;
- 21% покупателей бросают корзину покупок, если сайт работает медленно;
- Google учитывает время загрузки сайта при выдаче результатов поиска , так что скорость влияет не только на доход. Быстрая загрузка позволяет продвинуться выше в поисковой выдаче.
Отсутствие надлежащей системы защиты сайта упрощает взломщикам задачу и наносит ущерб репутации и вашему делу.
Некоторые из следующих возможностей, предлагаемых Cloudflare, доступны бесплатно:
- глобальная сбалансированная CDN;
- кэширование контента, мгновенная очистка кэша;
- IPv6;
- WebSocket;
- Restful API
- базовая DDoS-защита;
- TLS 1.2, 1.3;
- сертификат, выпущенный Cloudflare;
- перенаправление на HTTPS;
- защита от спама в комментариях, защита от кражи контента;
- анализ работы и угроз безопасности;
- Page rules, позволяющие задавать параметры для конкретных страниц.
В случае, если безопасность имеет высокий приоритет, имеет смысл задуматься о тарифе PRO или еще более расширенной версии, в которых будет доступен файрвол для приложений , оптимизация изображений, оптимизация для мобильных устройств и многое другое.
Стоит отметить работу с приложениями Cloudflare. Она позволяет легко реализовать те или иные функции без дополнительной установки. Например, можно пользоваться Google Analytics, Pingdom Swiftype не внося изменений в код.
Кто пользуется Cloudflare?
Диаграмма показывает популярность Cloudflare (прим.пер.: доля рынка Cloudflare среди миллиона самых популярных сайтов по версии Alexa составляет 78.61% ). К самым именитым клиентам относятся:
- Feedly
- Mozilla
- DigitalOcean
- Udacity
- CodeGuard
- Zopim
- StackOverflow
В двух словах - Datapath оптимизирует трафик и сокращает время ожидания AWS.
В бесплатной версии доступны:
- один эластичный IP;
- оптимизация времени ожидания;
- мониторинг трафика;
- 500 Gb трафика в месяц.
От автора: если вы давно работаете в сфере разработки, вы знаете, что главная проблема в интернете – это скорость. Все просто: скорость имеет значение, и чем быстрее, тем лучше. Простой способ повысить производительность – использовать CDN. Мы уже поднимали эту тему несколько раз на сайте CSS-Tricks. Простота в том, что вам не нужно переписывать базу данных и вручную редактировать контент, однако многие из нас не уделяют должного внимания производительности в этой области. Хостинг, серверы и cPanel, боже мой!
К нашему счастью, интегрировать CDN не так и сложно. В идеале, вы все настраиваете, и такие сервисы как Google PageSpeed трубят о высокой производительности вашего сайта, что в свою очередь приводит к повышению в поисковой выдаче, увеличению доходов, росту вашей популярности и… ну вы поняли.
В этой статье мы разберем процесс настройки CDN на пользовательском веб-приложении, после чего узнаем про пару фишек, которые помогут выжать максимум из CDN. Как я и сказал, настройка должна быть легкой, так что давайте начнем и сделаем веб быстрее!
Нужно добавить, что настройка CDN для тех, кто работает на CMS типа WordPress, где есть специальные плагины для развертки CDN, может быть даже проще, чем мы сейчас расскажем. Будем считать, что не у каждого есть такая роскошь, поэтому перейдем к более традиционному способу.
Вы потеряли меня на CDNНе повредит, если мы рассмотрим основные понятия: что такое CDN, для чего они нужны. Начнем с этого.
JavaScript. Быстрый старт
CDN вытягивает статические файлы с сервера вашего сайта и кэширует их на своих серверах. Когда браузер обращается к вашему сайту, статический контент подгружается через CDN, а не с вашего сайта. Так получается намного быстрее, так как серверы CDN расположены по всему миру. Сам CDN работает по принципу прокси, определяя ближайший к пользователю сервер, что обеспечивает более быструю и удобную доставку контента. Аббревиатура расшифровывается как Content Delivery Network или сеть доставки контента.
Так как браузер определяет, когда загружать файлы через CDN, а не с сервера сайта? URL статических файлов переписывается, чтобы он вел на CDN.
К примеру, мы хотим настроить CDN на поддомен. На сайте CSS-Tricks адрес может быть таким cdn.css-tricks.com. Соответственно, все ссылки для файлов будут идти на поддомен.
Грубо говоря, адреса файлов на вашем сайте:
http://www.css-tricks.com/image.jpg http://www.css-tricks.com/style.css http://www.css-tricks.com/script.js
http : //www.css-tricks.com/image.jpg http : //www.css-tricks.com/style.css http : //www.css-tricks.com/script.js |
… станут такими:
http://cdn.css-tricks.com/image.jpg http://cdn.css-tricks.com/style.css http://cdn.css-tricks.com/script.js
http : //cdn.css-tricks.com/image.jpg http : //cdn.css-tricks.com/style.css http : //cdn.css-tricks.com/script.js |
Браузер посылает запросы на CDN, а не на сервер вашего сайта, что снимает львиную долю нагрузки с сервера и делает ваш сайт быстрее.
Погодите, два сервера на одном сайте?В определенной степени, это так, но это не значит, что вы будете управлять двумя серверами.
Смысл в том, что CDN используется как виртуальная прослойка между вашим сервером и браузером пользователя. Эта прослойка ловит запросы браузеры на сервер и с радостью отвечает на них кэшированными файлами от имени вашего сервера.
В некоторых случаях можно загружать статические файлы на CDN напрямую, полностью снимая нагрузку с сервера. В этой статье мы разберем процесс получения CDN статических файлов с вашего сервера и их кэширование, чтобы не нужно было загружать файлы на два сервера и работать с разными адресами.
Как установить CDN на пользовательское приложениеСервисов много, но чаще других используются Amazon AWS и MaxCDN . Сегодня мы рассмотрим сервис MaxCDN.
Шаг 1: выберите CDN и зарегистрируйте ваш сайтЕсли вы решили, что для вашего сайта понадобится CDN, вам понадобится зарегистрироваться. Способов много, очень много, но чтобы не взвешивать плюсы и минусы каждого (хорошая тема для следующей статьи), я приведу ряд сервисов:
Основная задача регистрации – создание области загрузки. Область загрузки в CDN можно представить как корзину, в которой будут находиться все поддерживаемые файлы. Данные будут автоматически вытягиваться из директории, которую вы укажите при первом запросе файла. Для пользователей файлы будут загружаться либо с поддомена CDN, либо с пользовательского домена, который ведет на CDN. Данные из корзины автоматически удаляются по достижении определенного вами промежутка времени.
Шаг 2: создайте URL на вашу CDNURL CDN – тот адрес, по которому будут скачиваться все ваши файлы после настройки. Есть хорошее правило – использовать простые имена в URL, чтобы можно было легко искать файлы и заменить адреса всех существующих файлов в базе данных.
Как и для других поддоменов, необходимо будет указать cname-запись в настройках DNS вашего хоста.
Рассмотрим, как можно создать переменную для CDN адреса, и как ее можно использовать для программной вставки перед URL статических ресурсов. Для чего это нужно: (1) так сложнее допустить ошибки в разметке и (2) так легче работать с URL, которые нам нужно будет менять.
Для этого нам понадобится глобальная переменная для CDN, которую мы будем присоединять слева к URL статических ресурсов. Переменную будем создавать как в PHP, так и в JS, чтобы потом было легче работать. Также эта переменная поможет нам легко выключить CDN, если мы этого захотим. Нужно будет просто заменить значение на /, чтобы вернуть адрес на наш сервер.
Обратите внимание, что следующие примеры – это лишь примеры, не стоит использовать их. Реальные примеры использования могут отличаться.
Hello World! /* Let’s define a javascript global for using the CDN inside scripts */ var cdnURL = ""; js/main.js">
|