Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
SDCH - Общий словарь сжатия в HTTP 
Дмитрий Маркович
Дмитрий Маркович 
LinkedIn Engineering, Traffic Team
Случайность 
Каждый день мы что-то ищем в Google... 
Request URL: 
https://www.google.com/s?output=search... 
accept-encod...
Request URL: 
accept-encoding: gzip, deflate, sdch 
avail-dictionary: j_fzWU8F 
Response: 
content-encoding: gzip 
content...
Проверка 
Без SDCH…
Проверка 
…и с SDCH 
Вроде бы особой разницы нет?
Но все-таки интересно - копаем дальше... 
get-dictionary: 
/sdch/j_fzWU8F.dct 
Словарь?
Теперь когда совсем интересно 
SDCH протокол впервые был предложен в 2008 году (Velocity 2008 Web Performance and Operatio...
Уменьшение времени передачи данных 
• 
Уменьшение размера это ключ к успеху 
• 
Gzip работает хорошо для сжатия индивидуал...
Взгляд на LinkedIn
Но ведь уже есть RFC3229 - Delta сжатие в HTTP? 
• 
Применимо только для одинаковых путей, что делает невозможным какое-то...
Как бы проверить, что это даст в рамках инфраструктуры LinkedIn 
Генерирует словари для статического контента 
1 
Оповещае...
Какие браузеры? 
Google Chrome (версия 38+) 
Yandex Browser
Начинаем разбираться. Что положить в словарь? 
Данные словаря находятся в публичном доступе поэтому берем все публичные сs...
Собираем словарь 
Как обычно с первого раза не работает :). Немного исправляем и что мы видим... 
https://github.com/gtoub...
Хеш словаря
Хеш в теле ответа
Детальная метаданных словаря 
Детальная метаданных словаря dictionary-metadata = 1#dictionary-header "n" dictionary-header...
Пример словаря CSS
Вроде бы все отлично, но генерация словаря занимает довольно большое время ~10 часов.
ATS plugin 
Что он должен делать 
•определять что клиент поддерживает SDCH; 
•предлагать клиенту скачать словарь; 
•кодиро...
Кодировка 
для этого Google выбрал уже стандартизированный VCDIFF протокол. 
http://code.google.com/p/open-vcdiff/ 
OPEN-V...
Кодирование VCDIFF 
Замена длинных общих строк короткими инструкциями, необходимыми для клиента чтобы восстановить данные ...
Кодировка 
Кодировка 
vcdiff encode -dictionary file.dict < target_file > delta_file 
Раскодировка 
vcdiff decode -diction...
Примеры для трех файлов 
abook_remarketing_base_promo_en_US.css: 
on disk: 4198 bytes 
on wire: 809 bytes 
registration_su...
Примеры сжатия 
Процент сжатия 
Маленькие файлы могут стать больше из-за кодирования
Примеры сжатия 
Процент сжатия 
В этом графике убраны файлы у которых размер уменьшился меньше чем на 5 байт
Чем больше файл тем лучше он сжимается.
Что делать с данными которые плохо сжимаются?
Кеширование, CDN 
Требования: 
должен уметь поддерживать пользовательский Vary хидер и различать элементы по нему. 
Для SD...
Кеширование, CDN 
Требования: 
не должен убирать SDCH значение из Accept- Encoding хидера (Akamai) 
accept-encoding: gzip,...
Как часто обновлять словарь 
Кеширование на короткий период, задержки для деплоймента 
Кеширование, словарь все еще актуал...
Новый словарь 
Возвращаем 
get-dictionary: /sdch/j_fzWU8F.dct 
и браузер скачивает его в оффлайн режиме
Безопасность 
1. 
Словарь хэшируется как на клиенте, так и на сервере 
2. 
Словарь действителен только для указанного доме...
Что нужно знать о Proxy и Firewall 
• 
Распространение нежелательного контента через словарь 
• 
Невозможность раскодирова...
Словарь и ответ могут не содержать опасного контента, но раскодируемый результат?
Решение 
1. Вырезать sdch из Accept-Encoding хидера :) 
2. Реализовать sdch протокол (сложно, долго, затратно). 
2.1 Произ...
Загрузка сервера
SDCH компрессия доступна для CSS LinkedIn файлов
Наши результаты 
• 
В среднем на 30% уменьшился размер передаваемых данных относительно Gzip. 
• 
Только файлы маленького ...
Спасибо за внимание! 
dmarkovi@linkedin.com 
We are hiring!
Upcoming SlideShare
Loading in …5
×

SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)

3,187 views

Published on

Доклад Дмитрия Марковича на HighLoad++ 2014.

Published in: Internet
  • Be the first to comment

SDCH, или новые подходы к увеличению производительности, Дмитрий Маркович (LinkedIn)

  1. 1. SDCH - Общий словарь сжатия в HTTP Дмитрий Маркович
  2. 2. Дмитрий Маркович LinkedIn Engineering, Traffic Team
  3. 3. Случайность Каждый день мы что-то ищем в 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
  4. 4. Request URL: accept-encoding: gzip, deflate, sdch avail-dictionary: j_fzWU8F Response: content-encoding: gzip content-encoding: sdch Normal SDCH Request
  5. 5. Проверка Без SDCH…
  6. 6. Проверка …и с SDCH Вроде бы особой разницы нет?
  7. 7. Но все-таки интересно - копаем дальше... get-dictionary: /sdch/j_fzWU8F.dct Словарь?
  8. 8. Теперь когда совсем интересно SDCH протокол впервые был предложен в 2008 году (Velocity 2008 Web Performance and Operations Conference). Цель протокола сжать HTTP ответы и таким образом улучшить производительность у пользователей с небольшой скоростью интернета.
  9. 9. Уменьшение времени передачи данных • Уменьшение размера это ключ к успеху • Gzip работает хорошо для сжатия индивидуальных ответов • Как насчет общих данных, которые присутствуют во всех ответах? • Передавать общие данные только 1 раз и пересылать только различные части ответа
  10. 10. Взгляд на LinkedIn
  11. 11. Но ведь уже есть RFC3229 - Delta сжатие в HTTP? • Применимо только для одинаковых путей, что делает невозможным какое-то кеширование
  12. 12. Как бы проверить, что это даст в рамках инфраструктуры LinkedIn Генерирует словари для статического контента 1 Оповещает о словарях поддерживающие клиенты через HTTP заголовки 2 Скачивает и хранит словари 3 При последующем запросе оповещает что словарь уже скачан 4 Кодирует содержимое ответа ч-з SDCH используя словарь и уменьшает передаваемый размер 5 Принимает и декодирует 6
  13. 13. Какие браузеры? Google Chrome (версия 38+) Yandex Browser
  14. 14. Начинаем разбираться. Что положить в словарь? Данные словаря находятся в публичном доступе поэтому берем все публичные сss и js файлы.
  15. 15. Собираем словарь Как обычно с первого раза не работает :). Немного исправляем и что мы видим... https://github.com/gtoubassi/femtozip Библиотека для сборки словаря FemtoZip
  16. 16. Хеш словаря
  17. 17. Хеш в теле ответа
  18. 18. Детальная метаданных словаря Детальная метаданных словаря 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
  19. 19. Пример словаря CSS
  20. 20. Вроде бы все отлично, но генерация словаря занимает довольно большое время ~10 часов.
  21. 21. ATS plugin Что он должен делать •определять что клиент поддерживает SDCH; •предлагать клиенту скачать словарь; •кодировать ответ согласно имеющемуся словарю;
  22. 22. Кодировка для этого Google выбрал уже стандартизированный VCDIFF протокол. http://code.google.com/p/open-vcdiff/ OPEN-VCDIFF библиотека для кодировки и раскодировки для VCDIFF (RFC3284) формата
  23. 23. Кодирование VCDIFF Замена длинных общих строк короткими инструкциями, необходимыми для клиента чтобы восстановить данные используя словарь.
  24. 24. Кодировка Кодировка vcdiff encode -dictionary file.dict < target_file > delta_file Раскодировка vcdiff decode -dictionary file.dict < delta_file > target
  25. 25. Примеры для трех файлов 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
  26. 26. Примеры сжатия Процент сжатия Маленькие файлы могут стать больше из-за кодирования
  27. 27. Примеры сжатия Процент сжатия В этом графике убраны файлы у которых размер уменьшился меньше чем на 5 байт
  28. 28. Чем больше файл тем лучше он сжимается.
  29. 29. Что делать с данными которые плохо сжимаются?
  30. 30. Кеширование, CDN Требования: должен уметь поддерживать пользовательский Vary хидер и различать элементы по нему. Для SDCH это: Vary: Avail-Dictionary RESPONSE content-encoding: gzip content-encoding: sdch vary: avail-dictionary
  31. 31. Кеширование, CDN Требования: не должен убирать SDCH значение из Accept- Encoding хидера (Akamai) accept-encoding: gzip, deflate, sdch
  32. 32. Как часто обновлять словарь Кеширование на короткий период, задержки для деплоймента Кеширование, словарь все еще актуальный
  33. 33. Новый словарь Возвращаем get-dictionary: /sdch/j_fzWU8F.dct и браузер скачивает его в оффлайн режиме
  34. 34. Безопасность 1. Словарь хэшируется как на клиенте, так и на сервере 2. Словарь действителен только для указанного домена и пути
  35. 35. Что нужно знать о Proxy и Firewall • Распространение нежелательного контента через словарь • Невозможность раскодировать словарь для проверки безопасности контента • Замена контента в закодированном SDCH ответе делает его не валидным
  36. 36. Словарь и ответ могут не содержать опасного контента, но раскодируемый результат?
  37. 37. Решение 1. Вырезать sdch из Accept-Encoding хидера :) 2. Реализовать sdch протокол (сложно, долго, затратно). 2.1 Производительность, для наших файлов ~400 микросекунд
  38. 38. Загрузка сервера
  39. 39. SDCH компрессия доступна для CSS LinkedIn файлов
  40. 40. Наши результаты • В среднем на 30% уменьшился размер передаваемых данных относительно Gzip. • Только файлы маленького размера проиграли относительно Gzip. • Уменьшилось время загрузки страниц, особенно в регионах с небольшой скоростью интернета. • Чем больше веб ресурс (чем больше файлов участвует в формировании словаря), тем лучше работает эта технология.
  41. 41. Спасибо за внимание! dmarkovi@linkedin.com We are hiring!

×