Скорость с доставкой до пользователя / Анатолий Орлов...

Post on 06-Jan-2017

3.007 Views

Category:

Engineering

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Скорость с доставкой до пользователяАнатолий ОрловДенис Нагорнов

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

Спасибо!

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

anatolix@yandex.ruДенис Нагорнов

den@yandex-team.ru

Выкинуто• Тут остались слайды,

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

Пару слов о HTTP• Новейший протокол 90-х• Второй запрос в

соединении = лишний rtt.• Количество соединений

ограничено.• Фиксится SPDY/HTTP2

GPRS/Edge/LTE• Первые два просто медленные с

большим RTT• сами разбираются ретрансмитами

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

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

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

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

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

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

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

top related