CDN для 70 000 сайтов одной кнопкой

    Что первое приходит вам в голову, когда вы слышите аббревиатуру CDN? Наверняка, «тяжелый контент», «много видео», «терабайты данных», «миллионы хитов в день».

    Не так уж много в Рунете проектов, которые характеризуются подобными словами. Олег Бунин, организатор конференции HighLoad++ (мы доверяем ему в вопросах нагрузок :)), не так давно дал такую оценку: CDN в России нужен и при этом экономически оправдан нескольким десяткам сайтов в России.

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

    Ответы на эти вопросы — под катом…

    Начнем с вопроса…

    Почему обычные сайты не подключают CDN?

    Если коротко, то это дорого и сложно.

    Например, в компании CDNvideo (одни из немногих российских CDN вообще, которые при этом еще и имеют на сайте понятный прайс-лист на услуги) тарифы начинаются от 3000 руб. в месяц с траффиком от 1 Тб.

    Для владельца сайта, выбирающего между хостингами, например, за 300 и 500 руб. — дороговато.

    Само подключение, вроде бы, не должно вызвать сложностей (настроить DNS, заменить локальные ссылки на новые), но дьявол, как известно, в мелочах. Как не забыть заменить все ссылки (они могут генерироваться динамически приложением, быть жестко прописаны на страницах, могут указываться в файлах стилей (css) и скриптов (js))? Как сохранить удобство разработки и отладки, работая на девелоперских серверах с локальными копиями? Как обновлять кэш CDN при обновлении файлов? В общем, все не слишком однозначно…

    Если все дорого и сложно, то…

    Нужен ли CDN обычному сайту?

    На обычном сайте нет тяжелого контента, который буквально сам «просится» в CDN. Даже самые прогрессивные интернет-магазины, размещающие на сайте, например, видео-отзывы от клиентов, скорее всего просто ставят ссылки на YouTube, а не хранят все у себя.

    Тем не менее, «подвинуть» поближе к посетителю можно весьма многое: все картинки, файлы стилей (css), javascript (js) и т.п. — по сути, практически весь статический контент можно вынести в CDN. А это в среднем до 80% объема траффика.

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

    Все современные браузеры имеют лимит на количество одновременных соединений к одному домену (обычно — не более 6).


    По данным www.browserscope.org/?category=network

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

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

    Выигрыш в скорости — секунды. А какая от этого практическая польза? Например, для интернет-магазина.

    Самый главный плюс в приросте производительности…

    1. На быстром сайте выше конверсия и больше просмотров страниц.

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

    Есть разные исследования, в которых предпринимаются попытки посчитать таких потенциальных клиентов, которых «недополучает» сайт. Например, инфографика от 5coins говорит о том, что 25% посетителей сайта покидают страницу, загрузка которой занимает более 4 секунд:



    Специалисты компании GoMez, проанализировав 150 миллионов хитов на 150 сайтах, получили такие цифры: замедление загрузки страницы на 1 секунду снижает конверсию на 7%, а количество просмотров — на 11%.



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

    2. В поисковых системах позиции быстрого сайта выше.

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

    3. Медленный сайт приносит прямые финансовые потери во время рекламных кампаний.

    Вы хотите активно продвигать свой проект. Заказываете для него контекстную, баннерную рекламу. Каждый клик стоит вполне определенных денег. Если посетитель вашего сайта пришел к вам по рекламному объявлению, но не дождался загрузки страницы, то за его клик вы просто заплатили впустую.

    4. Подключение CDN снижает нагрузку на основные серверы сайта.

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

    Ну а теперь — о волшебной кнопке для 70 000 сайтов...

    70 000 — именно столько сайтов работает на платформе «1С-Битрикс: Управление сайтом».

    Неделю назад анонсирован выпуск новой версии 12.0, которая станет доступна для партнеров и клиентов в начале ноября.

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

    С точки зрения клиента все выглядит максимально просто: сначала нужно через стандартную систему обновлений (да, если у вас активна коммерческая лицензия) установить новый модуль «Облачные сервисы Битрикс», а затем в административной панели сайта в разделе «Настройки» — «Облачные сервисы Битрикс» — «Ускорение сайта (CDN)» отметить галочку «Включить ускорение сайта» и сохраните изменения.



    Собственно все: после этого ссылки на статические файлы сайта (картинки, файлы стилей css, скрипты js) будут заменены — вместо локальных URL'ов будут использоваться служебные имена серверов сети CDN. При этом не потребуется вносить никакие изменения в DNS и не нужно заботиться о сбросе кэша CDN при обновлении файлов.

    Непосредственно для раздачи контента в дальнейшем используется сеть российского провайдера CDN — CDNvideo, в партнерстве с которым реализована эта услуга.



    Сколько стоит?

    Нисколько. Ноль.

    Модуль «Ускорение сайта (CDN)» является бесплатной дополнительной опцией для любой активной коммерческой лицензии на «1С-Битрикс: Управление сайтом». Никаких дополнительных платежей помимо стоимости самой лицензии или ее продления.

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



    А теперь — подробности: как это все устроено внутри.

    Схема работы CDN при подключении одного сайта выглядит примерно так:



    Каждое обращение любого посетителя сайта к статическому контенту направляется на ближайший к нему узел CDN. При первом обращении нужные файлы загружаются с исходного сайта или специально для этого выделенного узла — origin'а, а при последующих обращениях они будут отдаваться из кеша сервера CDN. Размещение контента на многих серверах CDN и отдача его посетителям из ближайшей к нему точки сокращает сетевой маршрут передачи данных и делает загрузку сайта быстрее с точки зрения пользователя.

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

    Мы организовали кусочек собственной облачной инфраструктуры (отказоустойчивой и масштабируемой):



    Наше маленькое «облачко» по сути является таким ориджином для сети CDN, проксируя через себя траффик подключенных клиентов и решая несколько важных задач:

    • В нашем облаке мы определяем, может ли тот или иной сайт использовать наш CDN (проверяем активность лицензии, квоты на траффик и т.п.)
    • Определяем соответствие запросов тому или иному домену.
    • Распределяем запросы к картинками, css, js по разным доменам (помним про распараллеливание, о котором говорили выше).
    • Аккуратно управляем запросами, если происходит отключение (по неактивности лицензии или превышению траффика) — меняем ссылки на редиректы и дожидаемся, пока отключится замена ссылок на самом сайте. То есть, ни при каком варианте сайт не «ломается».
    • Управляем HTTP заголовками для обеспечения максимально эффективного кэширования.

    Сам модуль «Ускорение сайта (CDN)», работающий непосредственно на клиентском сайте делает следующие вещи:

    • Управляет заменой ссылок в контенте.
    • К каждой ссылке добавляет модификатор в QUERY STRING вида "/image.gif?1339164408" с датой модификации файла. Если файл изменяется, меняется модификатор, и для кэша CDN по сути появляется новый объект. Таким образом мы решаем проблему инвалидации (сброса) кэша при изменении файлов с теми же именами.


    Небольшой итог.

    Чуть больше недели назад модуль «Ускорение сайта (CDN)» стал доступен разработчикам — партнерам «1С-Битрикс». Два дня назад мы открыли публичный доступ к нему всем клиентам.

    За это время подключилось около 600 сайтов. В основном — интернет-магазины. А также личные блоги, корпоративные сайты, несколько крупных тематических порталов.

    Если ваш сайт работает на «1С-Битрикс: Управление сайтом» — подключите к нему CDN в пару кликов, порадуйте себя и своих посетителей скоростью работы. :)
    1С-Битрикс
    73,70
    Компания
    Поделиться публикацией

    Комментарии 49

      +5
      Можно ли настроить модуль для работы со своим CDN?
        +1
        Нет. Это — именно простая в подключении услуга. Без каких-то серьезных настроек.

        Подразумеваем, что если пользователь знает, что такое CDN и может подключить свой, то может это сделать своими силами.
        –1
        «Однако абсолютно очевидно то, что поисковые роботы, индексирующие сайты в интернете, не дождавшись загрузки страницы, не будут учитывать ее в общем поисковом индексе. „
        Это-то тут причем? Если Вы говорите об оптимизации раздачи статики, то на скорость генерации страницы она влияет очень опосредовано.

        В целом — игрушка интересная, но практической пользы для основной массы проектов я не вижу.
          +5
          Практическая польза — огромная.

          Прямо сейчас смотрю на большом контентном портале. Chrome, инструменты разработчика, Ctrl-F5, время onLoad:

          — без CDN: 10.43 с.
          — с CDN: 4.14 c.
            0
            Не великовата разница то?
            У вас явно проблемы с основным сервером.
              0
              Не у меня.
              Я взял один из «тяжелых» клиентских сайтов.
          –3
          Для большого контентного портала предпочтительнее сделать свое решение — надежнее, управляемее. А для небольших сайтов это просто игрушка. К тому же это имеет значение только для первой загрузки страницы, потом все берется из кэша.
          PS Пардон, не туда написал.
            +2
            Первая загрузка как раз часто и определяет, остается ли клиент на сайте.

            Мы можем долго теоретизировать, но у нас уже есть несколько десятков отзывов от живых работающих проектов, которым эта штука помогает и нравится. :)
              –2
              Не вопрос — это как раз та прослойка, которой нововведение может быть интересно, тем более что бесплатно. А что, кстати, будет при превышении лимита траффика?
                +2
                Прослойка? Это — два дня услуга в паблике. Думаю, на следующей неделе будет больше 1000 сайтов. А в перспективе — те самые 70 000. :)

                При превышении отключится замена ссылок. При наступлении нового месяца можно включить обратно. Но установленных нами лимитов хватит абсолютному большинству сайтов.
                  0
                  Ок, а теперь давайте посмотрим на ситуацию так: вебмастер перепрописал все ссылки на CDN. А потом в пятницу вечером (по закону бутерброда) траффик CDN закончился. И все его вручную измененные ссылки разом перестают работать. Соответственно вопрос: вебмастер предупреждается хоть как-то о приближающемся?
                    0
                    Вы не поняли. Вебмастер ничего сам руками не меняет. Все само. И при выключении обратно — тоже само.
                      0
                      Т.е. в CDN выносятся только ссылки, генерируемые Битриском? js/css и все?

                      Но тогда обычный minify или собственная его реализация будет гораздо эффективнее.
            0
            на самом деле есть более интересные решения например cloudfare.

            вообще CDN очень сложная штука, с большим количеством ньюансов и как мне кажется окупается на глобальном масштабе. Так как большинство сайтов в Рунете расчитаны на Рунет( языковой барьер), то немного это немного спорное решение ставить прослойку которая очень часто работает как black box. Как експайрить документы, на каких заголовках она работает, как обрабатывает etag, cache-control, edge-control мне из поста совсем не понятно.
              0
              Cloudflare проще и может и замедлить сайт, так как проксирует через себя все, включая динамику. А точек присутствия в России не имеет.
                0
                Согласен со всем кроме проще. Она как раз наоборот на порядок сложнее, и фич там в разы больше.
              –1
              Что будет, если халявный трафик кончится? Копии статических файлов остаются на сервере со скриптами? Уведомления администратору сайта о достижении лимита есть какие-нибудь?

              А так… лишь бы не глючило.
                +1
                Траффик кончится — все вернется как было, будет раздаваться с локального сервера. С него, конечно, ничего не удаляется, а только кэшируется на узлах CDN.

                Данные по потреблению траффика показываются в админке.
                  –4
                  Ну насчет «максимум в 6 потоков» это вы загнули, конечно. Это вовсе не аргумент в пользу CDN, для этого легче насоздавать static-1.domain.ru… static-n.domain.ru, повесить на них nginx без логирования, и не надо всех этих сложностей.

                  И вот интересно, для среднестатистического сайта без тяжелого контента, каков будет выигрыш CDN по сравнению с таким простым решением? Стоит ли этот выигрыш всего того дополнительного геморроя, который внедрение CDN с собой принесет?
                    +1
                    Расскажите, пожалуйста, какой-такой геморрой несет для клиента (!) все то, что описано выше в статье?
                      –2
                      Не прочел ваш комментарий выше (Траффик кончится — все вернется как было), когда писал свой комментарий, это, конечно же, меняет дело, и претензий к вашему решению теперь нет. А имел ввиду я именно этот (потенциальный) геморрой.

                      И все же, насколько сильно возрастает эффективность при использовании CDN в противовес нескольким поддоменам для раздачи статики?

                      Понятно, что для обычного виртуального хостинга ваше решение реализовать заметно проще, но для любого VPS проблем с созданием своих поддоменов в общем-то нет.
                    –1
                    Подскажите пожалуйста а как быть с crossdomain.xml?? Для флеша и Unity 3D это вроде как критично. Можно ли будет как нибудь подсунуть этот файл?
                      0
                      Минус поставить конечно же додумались. Но ответить на вопрос нет, ну конечно, а зачем?
                        0
                        Я минус не ставил. Расскажите, пожалуйста, подробнее, что имеется в виду?
                          0
                          Принимайте правила игры. Посмотрите за что в этом хабе плюсуют и минусуют. Похвалил Битрикс — плюсик тебе. Любой неудобный вопрос — минус, чтобы не высовывался.

                          Относительно вопроса: все должно работать нормально. Поскольку все свои ссылки нужно перепрописывать вручную, то crossdomain.xml просто будет грузиться с вашего сайта и все.
                            0
                            Само собой, если у Вас просто * в качестве домена. Иначе ой.
                              0
                              Кажется с этим будут проблемы… Т.к. ссылки имеют вид http:// домен .(images|css|js).1c-bitrix-cdn.ru/upload/iblock/3b8/3b8389a69ab19c0fb48cd1ec8d42a940.jpg?1351135063
                                0
                                впишите в разрешенные домены "*.1c-bitrix-cdn.ru", должно работать.
                        0
                        Я для обхода ограничения потоков в браузере просто настроил статический поддомен, который расположен там-же где и основной сайт. Плюс при запросе статических файлов nginx обрабатывает конфиг из пары строк, а не простыню регулярок.
                          +1
                          Понятно, что проблема количества коннектов решается фейковыми поддоменами.

                          Но CDN «приносит» контент ближе к пользователю. Это просто настройками не решишь.
                            0
                            У CDN есть и обратная сторона, при каждом коннекте тратится немного времени на поиск ближайшего к пользователю узла. Так во время моего тестирования HostPro CDN загрузка напрямую с моего сервера была быстрее, чем загрузка с серверов CDN для тех пользователей, которые находятся в пределах одной страны с сервером.
                              0
                              Это зависит от устройства CDN. Можно определять ближайший хост к пользователю на сервере на этапе генерации страниц сайта (это очень быстрая операция при правильном подходе). И просто в html вставлять уже готовые ссылки. Но для этого, нужно чтобы CDN сам позволял такое делать и экспортил свои списки для определения узла.
                                0
                                Было бы логичным указать несколько IP для домена и пусть DNS сам выбирает ближайший. При этом выбор кэшируется в браузере, так что с быстродействием здесь все хорошо.

                                Кстати, сейчас все CDN-ссылки с сайта Битрикса ведут на 1C-BITRIX-CDN.RU, который висит на том же IP что и сам сайт Битрикса, так что для сайта Битрикса CDN сейчас не работает.
                                  0
                                  Нет, это не выход. Пользователь может использовать публичный ДНС, типа 8.8.8.8
                                    0
                                    Да, Google DNS данные кэширует, но, с таким же успехом, он может сам делать round robin. Ничего внятного по этому поводу в описании Google DNS я не нашел, думаю, имеет смысл поэкспериментировать.

                                    А как именно, позвольте полюбопытствовать, Вы собираетесь определять ближайший сервер на этапе генерации страниц? По географии IP-адресов?
                                      0
                                      round robin к cdn не имеет отношения, это скорее распределение нагрузки.

                                      Определять да, по географии. или с помоью списков адресов, или через сервисы типа maxmind geoip, по сути, по тем-же правилам, которым это делает центральный узел CDN. И занимаеться этим может не сайт, а nginx, а сайт уже получит заголовок с кодом страны или даже сразу нужным субдоменом и будет подставлять в ссылки на статику.
                                    0
                                    Ну, вы бы хоть проверяли, прежде чем писать, а?

                                    1c-bitrix-cdn.ru и *.1c-bitrix-cdn.ru — это совсем разные вещи.

                                    И на нашем собственном сайте включен ровно тот же механизм для CDN, который работает у клиентов.
                          +2
                          Попробовали на своих проектах: даже на малых ненагруженных проектах скорость загрузки страницы возрастает почти в два раза, на нагруженных, я думаю, будет еще выше.

                          До появления CDN думали использовать собственные модули ускорения или недавно вышедший модуль для апача, но теперь это не столь актуально

                          Очень крутая штука, фактически, новый стандарт для сайтов. Респект, ребята! Молодцы!

                          Осталось добавить слияние и компрессор js, компрессор html и css, ресайз картинок (подстраховаться от масштабирования средствами html) и… вроде все, арсенал оптимизации реализован в полном объеме.
                            0
                            Есть неочевидный минус у CDN — при DDOS атаках можно попасть на денежку у CDN провайдера.

                            В вашем случае, с автоматическим переключением на локальный сервер это конечно не грозит, и это круто!)
                              0
                              Это зависит от того что вам интереснее — сэкономить денюжку за CDN или выстоять DDOS.

                              Кстати, при большинстве DDOS-атак CDN-то как раз не поможет — вредоносные запросы будут направляться на основной домен, а не на CDN и все.
                                0
                                Это само собой:) Для небольших проектов просто может оказаться критичным при DDOS.

                                Ну на основной домен, да, но теже боты обычные браузеры по сути будут дергать основной домен и подгружать статику генеря при этом очень много трафика с CDN. Или вы не совсем ясно изьяснились.
                                  0
                                  В том-то и дело что боты — не обычные браузеры, никакого смысла (если нет доп. условий) дергать что-либо со сторонних серверов.
                                0
                                Сомнительно. CDN ведь тут только для статики. Если ddos сложит вам сайт, то и статика отдаваться не будет. Да и боты вряд ли буду запрашивать статику.

                                Разве что цель, конкретно слить вам трафик, тогда можно хоть на хабр вашу картинку с cdn вставить, если там защиты по реферреру нет.
                                  0
                                  Согласен с Вами, но сталкивался с тем, что боты дергали и статику. В большинстве случаев да, долбят в одну страницу и надеятся, что узкое место само проявится, обычно это БД.
                                0
                                Как работает механизм создания кэша в CDNVideo?
                                1. Приходит запрос от браузера в cdn, cdn видит что картинки ещё нет в кэше, тащит её с сервера, сохраняет у себя и первый раз проксирует клиенту, то есть первый раз всегда дольше чем обращение напрямую к сайту? И как кстати именно отдаёт браузеру первый раз картинку, закачивая себе и выдавая клиенту, или сразу отдаёт браузеру 301 редирект и уже не дожидаясь ответа браузера CDN сама в фоне закачивает?
                                2. Или есть какой-то механим создания «горячего» предварительного кэша через API/rsync?

                                Ну и главное — поисковые системы. Они любят когда видят что картинки находятся на самом сайте, а не на поддоменах/cdn. Соответственно нужен механизм отдачи поисковикам ссылок на оригинальные картинки, посетителям — на cdn.
                                  0
                                  Ну и главное — поисковые системы. Они любят когда видят что картинки находятся на самом сайте, а не на поддоменах/cdn. Соответственно нужен механизм отдачи поисковикам ссылок на оригинальные картинки, посетителям — на cdn.


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

                                    Но в принципе если CDN имеет запись в cname и является поддоменом (у битрикса не так), то в поиске картинки будут находится, просто будут дубли и «мигания» этих дублей.
                                  0
                                  Поставили новый шаблон на сайт, там было включено ускорение, ускорение отключили, кеш почистили, теперь не старого ни нового, вместо старого индексная страница только тянется без стилей.

                                  Все шаблоны рабочие.

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

                                  Самое читаемое