Slide 1

Slide 1 text

Как я ускорял загрузку видео в ok.ru Дмитрий Долженко

Slide 2

Slide 2 text

Инженер-программист в OK.RU

Slide 3

Slide 3 text

Разработал новый веб-клиент и сервер для загрузки видео

Slide 4

Slide 4 text

Ускорил загрузку в 1.5 - 3 раза

Slide 5

Slide 5 text

Зачем?

Slide 6

Slide 6 text

До 50 TB видео каждый день

Slide 7

Slide 7 text

Google QUIC

Slide 8

Slide 8 text

XMLHttpRequest

Slide 9

Slide 9 text

XMLHttpRequest

Slide 10

Slide 10 text

XMLHttpRequest

Slide 11

Slide 11 text

TCP

Slide 12

Slide 12 text

TCP/IP Model Application Transport Network Network Access HTTP FTP SSH TLS UDP TCP IP Ethernet IEEE 802.11

Slide 13

Slide 13 text

HTTP-запрос HTTP-ответ Прикладной уровень

Slide 14

Slide 14 text

Транспортный уровень Сегменты Сегменты

Slide 15

Slide 15 text

TCP Segment

Slide 16

Slide 16 text

TCP/IP Model Application Transport Network Network Access HTTP FTP SSH TLS UDP TCP IP Ethernet IEEE 802.11

Slide 17

Slide 17 text

Здесь должна была быть картинка с Боромиром

Slide 18

Slide 18 text

Потери неизбежны

Slide 19

Slide 19 text

Sequence Number

Slide 20

Slide 20 text

Подтверждение доставки

Slide 21

Slide 21 text

ACK

Slide 22

Slide 22 text

No content

Slide 23

Slide 23 text

Контроль потока данных

Slide 24

Slide 24 text

Sender Receiver 4 TCP Segments 4 ACK Передача данных

Slide 25

Slide 25 text

? Мы не знаем что с узлом на другой стороне…

Slide 26

Slide 26 text

… …и сколько других клиентов он в данный момент обслуживает

Slide 27

Slide 27 text

TCP Window Пакеты с данными ACK-пакеты

Slide 28

Slide 28 text

Flow Control

Slide 29

Slide 29 text

В сети иногда случаются заторы (congestions)

Slide 30

Slide 30 text

Bottleneck

Slide 31

Slide 31 text

No content

Slide 32

Slide 32 text

Мобильные и беспроводные сети

Slide 33

Slide 33 text

Round Trip Time (RTT)

Slide 34

Slide 34 text

Санкт-Петербург - Москва 10 мс.

Slide 35

Slide 35 text

Санкт-Петербург - Владивосток 140 мс.

Slide 36

Slide 36 text

Санкт-Петербург - Лос-Анджелес 200 мс.

Slide 37

Slide 37 text

Пакеты с данными ACK-пакеты Канал используется не на 100% Неиспользованный канал

Slide 38

Slide 38 text

Параллельные TCP соединения

Slide 39

Slide 39 text

Параллельные TCP соединения Пакеты с данными ACK-пакеты

Slide 40

Slide 40 text

Connection Pooling

Slide 41

Slide 41 text

HTTP запросы TCP соединения Connection Pooling

Slide 42

Slide 42 text

No content

Slide 43

Slide 43 text

Загружаем Blob

Slide 44

Slide 44 text

Blob

Slide 45

Slide 45 text

1 GB Blob.slice(…) 256 MB 256 MB 256 MB 256 MB XMLHttpRequest.send(…) Нарезаем файлы на сегменты

Slide 46

Slide 46 text

Загружаем сегмент

Slide 47

Slide 47 text

“XMLHttpRequest” Pooling

Slide 48

Slide 48 text

Queue File “XMLHttpRequests” Pool В браузере

Slide 49

Slide 49 text

Http Requests File На сервере

Slide 50

Slide 50 text

Дополнительные плюшки

Slide 51

Slide 51 text

Менее затратные разрывы соединений

Slide 52

Slide 52 text

Можем возобновить загрузку с любой позиции в файле

Slide 53

Slide 53 text

На почитать • High Performance Browser Networking, by Ilya Grigorik • Story of XMLHTTP • HTTP Persistent Connection • ARPANET • Transmission Control Protocol (TCP) • Effects of latency and packet loss on TCP throughput • Test-Bed Based Comparison of Single and Parallel TCP and the Impact of Parallelism on Throughput and Fairness in Heterogeneous Networks • Parallel TCP Sockets: Simple Model, Throughput and Validation

Slide 54

Slide 54 text

Спасибо за внимание! @dsdolzhenko