Pull to refresh

Протокол Railgun для сжатия трафика

Reading time 2 min
Views 34K


CDN-провайдер CloudFlare в прошлом году разработал протокол Railgun для сжатия сетевого трафика. Бинарный протокол, написанный на языке программирования Google Go, передаёт хэши веб-страниц и diff’ы между ними, с поддержкой версионности. После внедрения этой технологии степень сжатия в некоторых случаях достигает 99.6%, что недостижимо с помощью gzip. Сайты 4Chan и Imgur после внедрения Railgun сократили некэшируемый трафик примерно на 50%.

Сейчас компания CloudFlare объявила, что поддержка протокола реализована также у Amazon Web Services и около 30 крупнейших хостинговых компаний. Поставить Railgun теперь как никогда просто: есть плагины для WordPress, Joomla, Drupal и прочих CMS, выпущены пакеты для большинства популярных дистрибутивов Linux и BSD.

Любой CDN-провайдер старается кэшировать максимальное количество контента. Но в реальности закэшировать можно только около 66% объектов, а остальные 34% приходится заново запрашивать с сервера в случае обновления. Для сжатия этого трафика и был создан Railgun.



В Railgun используются примерно такие же алгоритмы, как при обработке последовательности кадров в видео высокой чёткости. Высокая степень сжатия в видеокодеках достигается за счёт сжатия не отдельных кадров, а отличий между соседними кадрами. Это позволяет сжать кадр размеров миллионы пикселов в несколько килобайт. Теоретически можно его сжать вообще в один байт, если он ничем не отличается от предыдущего кадра. То же самое с веб-страницами. При изменении веб-страницы в реальности меняется только небольшая часть, и достаточно передать изменение между актуальной версией и той, которую клиент получил в предыдущий раз.

Технически, Railgun состоит из двух компонентов: отправителя (sender) и получателя (listener). Отправители установлены в каждом дата-центре CDN-сети CloudFlare по всему миру. Получатель — программный компонент, который предоставляется коммерческим партнёрам CloudFlare. Между отправителем и получателем устанавливается TCP-соединение, защищённое TLS, по которому бинарный протокол Railgun осуществляет асинхронную передачу HTTP-запросов. Для веб-клиента система Railgun выглядит как прокси-сервер, хотя на самом деле это специализированная система со специфическими функциями. Одна из них — сжатие контента, который невозможно кэшировать, за счёт синхронизации версий страниц. При обновлении версии страницы по сети передаётся только изменение между предыдущей и новой версией.



Тестирование показали, что максимальное сжатие достигается на новостных сайтах с большой посещаемостью. Например, бинарное сравнение главной страницы сайта reddit.com показывает изменение в среднем 2,15% в течение 5 минут и 3,16% в течение часа. Главная страница The New York Times бинарно изменяется на 0,6% за пять минут и на 3% в течение часа. Для главной страницы BBC News эти показатели составляют 0,4% и 2%, соответственно. Вообще, для самых популярных сайтов при повторном запросе diff иногда настолько мал, что помещается в одном пакете TCP.
Tags:
Hubs:
+80
Comments 42
Comments Comments 42

Articles