2015-12-05 Анатолий Орлов - Скорость с доставкой до...

40
Скорость с доставкой до пользователя Анатолий Орлов, ex-Яндекс Денис Нагорнов, Яндекс v. 0.5hd

Transcript of 2015-12-05 Анатолий Орлов - Скорость с доставкой до...

Скорость с доставкой до пользователя

Анатолий Орлов, ex-ЯндексДенис Нагорнов, Яндекс

v. 0.5hd

430ms

625ms?

Скорость на клиенте

• Что измерять?– ??? (нет одной циферки)

• Как измерять– Измерять на клиенте– Загружать обратно– Считать статистику

… молоток и гвозди

• API– Navigation Timing API – Resource Timing API– firstPaintTime (Chrome)– msFirstPaint (IE)

События браузера

Первый байт быстрого* сервера

Новосибирск

Владивосток

Алматы

Киев

Астана

Екб

Стамбул

Минск

Анкара

Спб

Москва

0 500 1000 1500 2000 2500 3000 3500

50%

70%

90%

95%

Посл. байт быстрого* сервера (60kb)

НовосибирскКиев

Алматы Владивосток

АстанаЕкб

МоскваСпб

СтамбулМинскАнкара

0 500 1000 1500 2000 2500 3000 3500

50%

70%

90%

95%

… наглая ложь, и статистика • Не все браузеры поддерживают

– На мобилках только Chrome• Считают разное

– firstPaintTime/msFirstPaint* • Подвержено bias

До первого байта

Chrome/Windows

Firefox/Windows

MSIE/Windows

Opera/Windows

Safari/Macintosh

YaBrowser/Windows

0 200 400 600 800 1000 1200 1400

Особенности HTTPS

• Должно быть медленней– время на handshake

• Первый байт быстрее– aртефакт?

• Становится быстрее*– What?!

*без НДС

Соотношение…

Proofpic - СПБ

Proofpic - Владивосток

Proofpic - Киев

Киев? Кажется это не великий русский firewall

Proofpic - Стамбул

В Стамбуле с другой стороны нет почти разницы…(тут 10% https траффика, но влиять не должно)

Конец первой части

• Поняли:– Серверное время – не всё– Как измерять клиентское

• Непонятно:– 0ms (60kb) –> 3249ms в 95%, ping < 200ms

tcpdump - оружие героя

• Можно понять все.• Сервер знает о доставке.• tcpdump – трудоемко, точечно.• Можно ли автоматизировать?

tcplanz

• github.com/yandex/tcplanz• Парсит tcpdump-ы, быстро• Hardcore tool, не продукт.

Постановка проблемы

Распределение

490ms

170ms

Web сервер отработал за 170ms, а TCP стек решил задержать на 320

TCP за 1 слайд

• rtt – время туда и обратно. ping ~ rtt.• ACK – подтверждение доставки• cwnd – сколько можно отослать без

подтверждения

Скорость доставки

• На каждые CWND пакетов нам нужно rtt времени.

• cwnd = 10, rtt=100, 145kb/s• cwnd = 100, rtt=50, 2900kb/s• cwnd медленно растет, пока все

хорошо, сильно падает, когда пакет теряется.

TCP - Summary

• Новейшие технологии 70-х• Для деления канала, не для latency• Для проводов• Потеря -> congestion

WiFi

Длина волны 2.4Ghz – 12.5 сантиметровПакеты пропадают сами по себе без congestion

WiFi vs TCP

Уменьшайтеразмер*

странички

CDN для динамики

Крутите параметры

• Параметр Initial CWND• Initial CWND=10

(был = 4, до этого =2)• Страничка в 60кб ~ 40 пакетов ~ 3-4 rtt.

Initial cwnd=20

Разница между первым и последним пакетом ответа

Разница между ACK последнего пакета от пользователя

Безумный пример

• Игнорируем cwnd, шлем все 40 пакетов каждую 1ms следующий.

• Получаем selective ack, досылаем то, что потерялось.

• Страница на хорошем канале придет за 1-2 rtt, на плохом будет хуже.

• Сейчас такое сделать нельзя* в QUIC можно* внутри CDN примерно так все и ходит, cwnd учитывается, но он запредельного размера.

Итоги• Задержку доставки сервер делает сам

из-за ограничений протоколов• Серебряной пули нет, но место для

оптимизаций есть.• Делая оптимизации следите за

метриками Timing API и tcpdump

Спасибо!

Вопросы?Анатолий Орлов

[email protected]Денис Нагорнов

[email protected]

Выкинуто

• Тут остались слайды, которые видимо не удастся рассказать, так чтобы все поняли

Пару слов о HTTP

• Новейший протокол 90-х• Второй запрос в соединении = лишний rtt.• Количество соединений ограничено.• Фиксится SPDY/HTTP2

GPRS/Edge/LTE

• Первые два просто медленные с большим RTT• сами разбираются ретрансмитами

(см. HARQ), может страдать Latency• Ретрансмит внутри LTE выглядит для TCP как

самопроизвольное временное возрастание rtt. Будет ли лишний ретрансмит от TCP?

• Мелкий декларируемый application window у мобильников

QUIC

• Сейчас революционного ничего нет.• Вытаскивает в user-space то, что сейчас

зашито в ядре– Можно сделать разную политику передачи в

зависимости от user agent.

• Если вы пишите приложение под iPhone/Android, то играться с протоколами можно прямо сейчас.