Как я ускорял загрузку видео в ok.ru

Как я ускорял загрузку видео в ok.ru

В докладе вы узнаете том как можно ускорить загрузку файлов в вашем веб приложении в несколько раз и об особенностях протокола TCP которые при этом полезно знать.

B3a3a9fb494f85892c35dcbc6a117219?s=128

Dmitry Dolzhenko

February 21, 2018
Tweet

Transcript

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

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

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

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

  5. Зачем?

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

  7. Google QUIC

  8. XMLHttpRequest

  9. XMLHttpRequest

  10. XMLHttpRequest

  11. TCP

  12. TCP/IP Model Application Transport Network Network Access HTTP FTP SSH

    TLS UDP TCP IP Ethernet IEEE 802.11
  13. HTTP-запрос HTTP-ответ Прикладной уровень

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

  15. TCP Segment

  16. TCP/IP Model Application Transport Network Network Access HTTP FTP SSH

    TLS UDP TCP IP Ethernet IEEE 802.11
  17. Здесь должна была быть картинка с Боромиром

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

  19. Sequence Number

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

  21. ACK

  22. None
  23. Контроль потока данных

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

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

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

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

  28. Flow Control

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

  30. Bottleneck

  31. None
  32. Мобильные и беспроводные сети

  33. Round Trip Time (RTT)

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

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

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

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

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

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

  40. Connection Pooling

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

  42. None
  43. Загружаем Blob

  44. Blob

  45. 1 GB Blob.slice(…) 256 MB 256 MB 256 MB 256

    MB XMLHttpRequest.send(…) Нарезаем файлы на сегменты
  46. Загружаем сегмент

  47. “XMLHttpRequest” Pooling

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

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

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

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

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

  53. На почитать • 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
  54. Спасибо за внимание! @dsdolzhenko