![Page 1: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/1.jpg)
SDCH - Общий словарь сжатия в HTTP Дмитрий Маркович
![Page 2: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/2.jpg)
Дмитрий Маркович LinkedIn Engineering, Traffic Team
![Page 3: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/3.jpg)
Случайность Каждый день мы что-то ищем в Google...
Request URL:
https://www.google.com/s?output=search... accept-encoding: gzip, deflate, sdch
Response: content-encoding: gzip get-dictionary: /sdch/j_fzWU8F.dct
Bootstrapping
![Page 4: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/4.jpg)
Request URL: accept-encoding: gzip, deflate, sdch avail-dictionary: j_fzWU8F Response: content-encoding: gzip content-encoding: sdch
Normal SDCH Request
![Page 5: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/5.jpg)
Проверка Без SDCH…
![Page 6: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/6.jpg)
Проверка …и с SDCH
Вроде бы особой разницы нет?
![Page 7: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/7.jpg)
Но все-таки интересно - копаем дальше... get-dictionary: /sdch/j_fzWU8F.dct
Словарь?
![Page 8: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/8.jpg)
Теперь когда совсем интересно SDCH протокол впервые был предложен в 2008 году (Velocity 2008 Web Performance and Operations Conference). Цель протокола сжать HTTP ответы и таким образом улучшить производительность у пользователей с небольшой скоростью интернета.
![Page 9: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/9.jpg)
Уменьшение времени передачи данных • Уменьшение размера это ключ к успеху • Gzip работает хорошо для сжатия индивидуальных ответов • Как насчет общих данных, которые присутствуют во всех ответах? • Передавать общие данные только 1 раз и пересылать только различные
части ответа
![Page 10: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/10.jpg)
Взгляд на LinkedIn
![Page 11: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/11.jpg)
Но ведь уже есть RFC3229 - Delta сжатие в HTTP?
• Применимо только для одинаковых путей, что делает невозможным какое-то кеширование
![Page 12: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/12.jpg)
Как бы проверить, что это даст в рамках инфраструктуры LinkedIn
Генерирует словари для статического контента
1
Оповещает о словарях поддерживающие клиенты через HTTP заголовки 2
Скачивает и хранит словари
3
При последующем запросе оповещает что словарь уже скачан 4
Кодирует содержимое ответа ч-з SDCH используя словарь и уменьшает передаваемый размер
5
Принимает и декодирует
6
![Page 13: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/13.jpg)
Какие браузеры?
Google Chrome (версия 38+) Yandex Browser
![Page 14: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/14.jpg)
Начинаем разбираться. Что положить в словарь?
Данные словаря находятся в публичном доступе поэтому берем все публичные сss и js файлы.
![Page 15: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/15.jpg)
Собираем словарь
Как обычно с первого раза не работает :). Немного исправляем и что мы видим...
https://github.com/gtoubassi/femtozip
Библиотека для сборки словаря
FemtoZip
![Page 16: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/16.jpg)
Хеш словаря
![Page 17: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/17.jpg)
Хеш в теле ответа
![Page 18: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/18.jpg)
Детальная метаданных словаря Детальная метаданных словаря dictionary-metadata = 1#dictionary-header "\n" dictionary-header = "domain" ":" value "\n" | "path" ":" value "\n" | "format-version" ":" value "\n" | "max-age" ":" value "\n" | "port" ":" <"> portlist <"> "\n" portlist = 1#portnum portnum = 1*DIGIT Полный словарь dictionary-definition = dictionary-metadata payload
![Page 19: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/19.jpg)
Пример словаря CSS
![Page 20: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/20.jpg)
Вроде бы все отлично, но генерация словаря занимает довольно большое время ~10 часов.
![Page 21: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/21.jpg)
ATS plugin
Что он должен делать • определять что клиент поддерживает SDCH; • предлагать клиенту скачать словарь; • кодировать ответ согласно имеющемуся словарю;
![Page 22: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/22.jpg)
Кодировка для этого Google выбрал уже стандартизированный VCDIFF протокол.
http://code.google.com/p/open-vcdiff/ OPEN-VCDIFF библиотека для кодировки и раскодировки для VCDIFF (RFC3284) формата
![Page 23: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/23.jpg)
Кодирование VCDIFF Замена длинных общих строк короткими инструкциями, необходимыми для клиента чтобы восстановить данные используя словарь.
![Page 24: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/24.jpg)
Кодировка Кодировка vcdiff encode -dictionary file.dict < target_file > delta_file Раскодировка vcdiff decode -dictionary file.dict < delta_file > target
![Page 25: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/25.jpg)
Примеры для трех файлов
abook_remarketing_base_promo_en_US.css: on disk: 4198 bytes on wire: 809 bytes
registration_subs_upsell_en_US.css: on disk: 9189 bytes on wire: 3220 bytes
footer_en_US.css: on disk: 1941 bytes on wire: 1245 bytes
![Page 26: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/26.jpg)
Примеры сжатия
Процент сжатия
Маленькие файлы могут стать больше из-за кодирования
![Page 27: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/27.jpg)
Примеры сжатия
Процент сжатия
В этом графике убраны файлы у которых размер уменьшился меньше чем на 5 байт
![Page 28: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/28.jpg)
Чем больше файл тем лучше он сжимается.
![Page 29: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/29.jpg)
Что делать с данными которые плохо сжимаются?
![Page 30: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/30.jpg)
Кеширование, CDN Требования: должен уметь поддерживать пользовательский Vary хидер и различать элементы по нему. Для SDCH это: Vary: Avail-Dictionary
RESPONSE content-encoding: gzip content-encoding: sdch vary: avail-dictionary
![Page 31: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/31.jpg)
Кеширование, CDN Требования: не должен убирать SDCH значение из Accept-Encoding хидера (Akamai) accept-encoding: gzip, deflate, sdch
![Page 32: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/32.jpg)
Как часто обновлять словарь
Кеширование на короткий период, задержки для
деплоймента
Кеширование, словарь все еще актуальный
![Page 33: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/33.jpg)
Новый словарь
Возвращаем get-dictionary: /sdch/j_fzWU8F.dct и браузер скачивает его в оффлайн режиме
![Page 34: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/34.jpg)
Безопасность 1. Словарь хэшируется как на
клиенте, так и на сервере 2. Словарь действителен
только для указанного домена и пути
![Page 35: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/35.jpg)
Что нужно знать о Proxy и Firewall
• Распространение нежелательного контента через словарь
• Невозможность раскодировать словарь для проверки безопасности контента
• Замена контента в закодированном SDCH ответе делает его не валидным
![Page 36: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/36.jpg)
Словарь и ответ могут не содержать опасного контента, но раскодируемый результат?
![Page 37: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/37.jpg)
Решение 1. Вырезать sdch из Accept-Encoding хидера :) 2. Реализовать sdch протокол (сложно, долго, затратно). 2.1 Производительность, для наших файлов ~400 микросекунд
![Page 38: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/38.jpg)
Загрузка сервера
![Page 39: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/39.jpg)
SDCH компрессия доступна для CSS LinkedIn файлов
![Page 40: SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)](https://reader036.vdocuments.mx/reader036/viewer/2022081801/557ef445d8b42ad17d8b4dd4/html5/thumbnails/40.jpg)
Наши результаты • В среднем на 30% уменьшился размер передаваемых данных
относительно Gzip. • Только файлы маленького размера проиграли относительно
Gzip. • Уменьшилось время загрузки страниц, особенно в регионах
с небольшой скоростью интернета. • Чем больше веб ресурс (чем больше файлов участвует в
формировании словаря), тем лучше работает эта технология.