company_banner

CDN для статики и измерения: как Яндекс.Почта стала быстрее в регионах

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

    Мы в Яндекс.Почте много работаем над ускорением клиентской части. Только на Хабре мы рассказывали о том, как оптимизируем верстку, отказались от XSL и перешли на новый шаблонизатор.

    Но добиться увеличения скорости работы можно не только за счет оптимизации фронтенда. Сегодня мы хотим рассказать о переезде статических файлов Яндекс.Почты на специальный CDN Яндекса для статики и о том, как это ускорило её работу, особенно в регионах.



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

    Что тормозит загрузку?


    Когда человек заходит в почту, первое, что у него загружается, — минимальный HTML и так называемый bootstrap (загрузчик). Он отвечает за асинхронную загрузку всех необходимых JavaScript-модулей, шаблонов и CSS-файлов для отрисовки интерфейса, а также за первоначальную подгрузку данных. В Яндекс.Почте HTML загружается с нашего основного домена mail.yandex.ru, а bootstrap — со статического кластера mailstatic.yandex.net.

    В него входит около сотни машин, расположенных в нескольких датацентрах Москвы и Подмосковья. Единственная задача этого кластера — отдавать клиенту статические файлы, которые нужны для отображения и работы веб-интерфейса Почты.

    Чтобы увидеть проблему скорости в полный рост, нужно задуматься о географии пользователей Яндекс.Почты. Даже если говорить только о России, самой большой стране в мире. Например, если ориентироваться на протяжённость Транссибирской магистрали, расстояние между Москвой и Владивостоком — почти 9300 км. Пакеты с данными пользователей, разумеется, не двигаются по железной дороге — они путешествуют по линиям связи. А скорость передачи данных в оптоволокне примерно в полтора раза ниже скорости света в вакууме. Свою долю задержек вносит и сетевое оборудование на пути следования данных. Таким образом, RTT от наших датацентров в Москве до Владивостока составляет 120-130ms, а, например, до Новосибирска — около 60ms.

    Локальные сервера


    Для решения проблем со скоростью у Яндекса есть CDN-хостинг — yandex.st. Yandex.st — это несколько кластеров машин, большая часть из которых, как и mailstatic.yandex.net, расположена в московских датацентрах. Но, в отличие от mailstatic.yandex.net, у него есть представительства во многих крупных городах России, ближнего зарубежья и мира.

    Регионы, в которых стоят сервера с yandex.st

    На данный момент наш CDN-хостинг поддерживает более трехсот провайдеров в 11 регионах. Кстати, yandex.st третий в мире по популярности хостинг библиотеки jquery.

    Он работает на технологии anycast. Это значит, что пользователю на запрос файла отвечает топологически ближайший к нему сервер. То есть, если человек находится во Владивостоке, его запрос будет направлен на сервер, расположенный во Владивостоке, а значит он получит ответ быстрее, чем если бы его запрос пошёл в Москву.

    Переезд Яндекс.Почты на yandex.st


    Прежде чем переехать, нужно было оценить то, насколько эффективен будет переезд и какую пользу он принесёт. Для этого мы обвесили веб-интерфейс Почты датчиками, построили графики и перевезли на yandex.st только 50% пользователей. Это было сделано для того, чтобы можно было сравнить всё с эталоном — mailstatic.

    В клиентскую часть веб-интерфейса мы встроили специальный таймер скорости загрузки статики. В этом нам помог Navigation Timing API, которое есть в большинстве современных браузеров. API с точностью до миллисекунд знает, в какой момент пользователь начинает открывать почту, а javascript-платформа — в какой момент загрузились все необходимые статические файлы. Если мы вычтем из второго таймстемпа первый, можем получить время, за которое загружалась вся статика. Полученное число вместе с другими метриками отправляется GET-запросом от пользователя на специальные сервера.

    В отличие от таймингов access-логов nginx (для которых, разумеется, у нас тоже есть графики), такая метрика позволяет учитывать время загрузки всей почты, вне зависимости от того, какие файлы и сколько загружает каждый пользователь. Грубо говоря, мы можем точно узнать, за какое время у пользователя грузится вся почта, а не каждый файл по отдельности.

    В менее чем одном проценте случаев из-за непонятных причин эти цифры прилетают откровенно неправдоподобными. Например, отрицательными или равными 50 годам.

    Для того чтобы отсечь такие значения, мы решили построить график времени, в которое укладывается 75%, 95% и 99% загрузок.

    Но и этих цифр недостаточно — скорость загрузки меняется в том числе и из-за изменения размеров файлов и их количества. Для того чтобы понять, насколько в других регионах статика почты стала грузиться быстрее, в качестве KPI переезда мы выбрали сравнение скорости загрузки в каждом регионе со скоростью загрузки в Москве. То есть мы точечно начали отнимать от времени загрузки из региона время загрузки из Москвы. Если значение получалось отрицательным, мы считали, что делаем всё правильно и скорость в этом регионе стала быстрее.

    Этот график помог найти несколько узких мест и проблем на региональных машинках, которые мы быстро починили.

    Результат


    В результате переезда Яндекс.Почта стала отвечать и грузиться быстрее: в зависимости от региона от нескольких сот миллисекунд до секунд. Скорость загрузки статики в Новосибирске и Казани увеличилась в два раза, в Екатеринбурге и в Владивостоке — примерно в полтора.

    График среднего времени загрузки статики в некоторых городах
    График среднего времени загрузки статики Яндекс.Почты в некоторых городах

    Благодаря настройке региональных серверов, мы нашли несколько возможностей увеличить скорость и в «домашнем» регионе: Яндекс.Почта стала быстрее не только в регионах, но и в Москве, так что предлагаем всем желающим начать использовать yandex.st.

    Владельцам сайтов


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

    Помимо региональности, у yandex.st круглосуточная поддержка администраторами Яндекса. Он поддерживает протокол ipv6 и имеет минимальный downtime: чем больше людей пользуется yandex.st, тем больше шансов, что jquery не будет «вымываться» из кэша. И, конечно, сервисы Яндекса уже берут библиотеки с yandex.st, так что у обычных пользователей эти версии часто находятся в кэше. А это означает, что если использовать yandex.st на своем сайте, он будет загружаться быстрее.

    Представителям региональных провайдеров


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

    1. Подключиться к точкам обмена трафиком, в которых присутствует Яндекс и установлены серверы CDN (посмотреть, например, можно на www.peeringdb.com/private/participant_view.php?id=1751), и поднять с нами там пиринг, после чего CDN заработает автоматически;
    2. Написать на noc@yandex.net, если трафик между провайдером и Яндексом значителен (сравним или составляет более 500Mb/s). Мы готовы рассмотреть возможность установки серверов CDN в сети провайдера.
    Яндекс
    Как мы делаем Яндекс

    Comments 35

      +4
      Хорошо, что следите за блогом Стива Саудерса, приятно и не бесполезно.
        0
        А сам Яндекс то jQuery вообще использует в своих публичных проектах?
          +6
          Конечно :)
            0
            О, даже на главной странице поиска есть :)
            Почему-то ощущение что раньше он отсутствовал.
              –6
              у меня одного главная страница поиска стала 5 секунд грузиться?
                0
                На последнем YaC вроде как обмолвились, что волевым решением перешли на него со своих наработок, когда точно не в курсе.
                  0
                  Если это и было, то очень давно. Я не припомню, чтобы главная страница работала на y5 (наш старый js-фреймворк)
            +4
            По поводу CDN:
            Зато если упадет Яндекс, что уже бывало, то утянет за собой половину рунета…
              0
              Что значит «Упадет Яндекс?»
                +4
                habrahabr.ru/company/yandex/blog/126709/

                Это значит, совсем упадет, полностью…
                  +14
                  Во-первых, случаев, описанных в том посте всего было два за всю историю существования Яндекса, причем первый был вызван пожаром в ту пору, когда у нас еще не было десятка датацентров.
                  Во-вторых, служба NOC уже проделала довольно много работы для того, чтобы описанная ситуация не повторилась.
                  А в-третьих, сейчас ведутся работы по обособлению региональных машин от центральных датацентров, а поэтому если такая ситуация и повторится, то региональность yandex.st сыграет на руку и нам, и всему рунену. Даже если Яндекс «упадет» в Москве, то в остальном мире yandex.st будет работать.
                    –6
                    Да все, конечно, верят. Чего ж не верить то.
                    Вот только куча случаев когда супер-облачный провайдер, у которого 150 тыщ датацентров во всём мире вдруг полностью падал от того, что где-то в одном месте на трансформатор дерево упало. И объяснения в духе «из-за ошибки обновления маршрутов каскадный наплыв трафика обрушил всю инфраструктуру».
              –4
              Я правильно понимаю, что JQuery c yandex.st — это такая же история, как Google Analytics/Яндекс.Метрика — еще один источник данных по посещаемости сайтов?
                +6
                Разумеется, нет. Какую статистику посещаемости он может дать, если отдаваемая версия предназначена наоборот максимально кэшироваться, а значит, в >>50 процентах случаев HTTP-запроса на yandex.st вообще никакого не придёт.
                  0
                  Хм, похоже вы правы…
                  А смысл тогда?
                    +7
                    Чтобы увеличить кешируемость jQuery. Пользователь как к нам приходит с уже прогретым кешом, так и на внешние сайты.
                    0
                    Можно ли, как у Гугла, использовать ссылки вида: yandex.st/jquery/1.9/jquery.min.js или даже yandex.st/jquery/1/jquery.min.js, чтобы ваш CDN сам отдавал последнюю версию?
                      +8
                      Нет, мы считаем, что разработчики должны сознательно обновляться с версии на версию. Чтобы не случилось, что API в библиотеке поменялось, а разработчики про это забыли.
                        –12
                        нет. нужно отличаться от гугла
                    +3
                    померещилось в заголовке: «как Почта России стала быстрее в регионах»…

                    ::sigh::
                      –1
                      Он работает на технологии anycast.

                      TCP anycast — не самая безопасная штука… У вас есть какая-нибудь статистика по внезапным переключениям клиента посреди сессии с одной площадки на другую? Я, конечно, понимаю, что каждая сессия настолько короткая, что шанс угробить ее при флуктуациях BGP близок к нулю (данные качаются быстро, и их мало, нет надобности держать соединение более секунды-двух), но все же…
                        +6
                        У нас есть мониторинг недоступности Яндекса среди пользователей, мы неплохо ловим ситуации с сетевыми проблемами внутри провайдеров. Считаем, что ситуация вполне удовлетворительная.

                        Можно, конечно, посчитать плотность прилетающих вне сессии ACK-пакетов, но их сложно отличить от скрип-кидди, которые только что открыли для себя ACK-флуд.
                          0
                          Можно, конечно, посчитать плотность прилетающих вне сессии ACK-пакетов

                          Ну если всерьез задаться таким вопросом, то можно взять данные из «мониторинг недоступности Яндекса среди пользователей», и по 5-tuple отдельных сессий смотреть, куда они прилетали. Написать скрипт, парсящий логи с разных площадок…

                          Но работенка с вашими масштабами адова, поэтому я так делать не стал бы, если с момента ввода CDN по anycast не было заметного скачка сбоев :)
                            +1
                            Нет, прямо так сделать по определенным причинам нельзя. )

                            Но наблюдения за влиянием CDN на пользователей мы делали, только с агрегированием по ASN и по нашей геобазе. Единичные сессии на наших объемах не работают, потому, что
                            В менее чем одном проценте случаев из-за непонятных причин эти цифры прилетают откровенно неправдоподобными.
                            и это распространяется практически на все — на сессии, на пакеты, на конкретные запросы…

                            В общем, на одной сессии можно таких выводов понаделать… )
                        +5
                        Вы хостите бутстрап в отличии от гугла. А еще некоторые плагины к jquery, вот это вообще очень круто, спасибо!
                          +3
                          Всегда пожалуйста :)
                          0
                          Странно, что для Хабаровска ничего не изменилось
                            0
                            Для Владивостока хоть и есть какое-то улучшение, но пока не почувствовал. Возможно, просто к хорошему быстро привыкаешь.
                            Файл yandex.st/jquery/1.9.1/jquery.min.js (для сравнения), грузится в среднем за 117-125мс.
                              0
                              Это значит, что он тянется с Москвы, а не с местного сервера
                                +1
                                Сделайте traceroute yandex.st и киньте мне в личку, пожалуйста.
                              +1
                              А будут статьи о работе, собственно, почты?
                              Вёрстка, шаблонизаторы, CDN для статических html-файлов — это всё хорошо, но к почте отношения не имеет. Хотелось бы послушать советы Яндекса об организации именно почтового кластера. Я так понимаю, что у вас если не самый популярный почтовый сервис в СНГ, то в первой пятёрке — точно.
                                +2
                                Можете мне в личку задать вопросы, ответы на которые вы хотели видеть в форме статей.
                                Подумаем вместе.
                                0
                                Нет ли возможности выложить локализацию ky DataPicker для братского киргизского народа?
                                github.com/jquery/jquery-ui/blob/master/ui/i18n/jquery.ui.datepicker-ky.js
                                Как обстоят дела со скоростью в странах СНГ? Было ли увеличение или изменения почувствовали только жители России?

                                0
                                Расскажите как улучшение загрузки сказалось на активности пользователей. Я занимаюсь этими исследованиями в своей компании и мне очень интересен опыт других.

                                Only users with full accounts can post comments. Log in, please.