Upload
ontico
View
3.007
Download
1
Embed Size (px)
Citation preview
Скорость с доставкой до пользователяАнатолий ОрловДенис Нагорнов
v. 0.5t
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
Выкинуто• Тут остались слайды,
которые видимо не удастся рассказать, так чтобы все поняли
Пару слов о HTTP• Новейший протокол 90-х• Второй запрос в
соединении = лишний rtt.• Количество соединений
ограничено.• Фиксится SPDY/HTTP2
GPRS/Edge/LTE• Первые два просто медленные с
большим RTT• сами разбираются ретрансмитами
(см. HARQ), может страдать Latency• Ретрансмит внутри LTE выглядит для
TCP как самопроизвольное временное возрастание rtt. Будет ли лишний ретрансмит от TCP?
• Мелкий декларируемый application window у мобильников
QUIC• Сейчас революционного ничего нет.• Вытаскивает в user-space то, что
сейчас зашито в ядре– Можно сделать разную политику передачи в
зависимости от user agent.
• Если вы пишите приложение под iPhone/Android, то играться с протоколами можно прямо сейчас.