HighLoad++ 2017
Зал «Дели + Калькутта», 8 ноября, 11:00
Тезисы:
http://www.highload.ru/2017/abstracts/3071.html
Пишем свой протокол стриминга с гарантированной задержкой поверх UDP. Архитектура отказоустойчивого стриминг-сервиса, способного выдержать потерю дата-центра и миллион онлайнов. Проблемы мобильного стриминга и TCP-протокола, QUIC как замена TCP, UDP и fast retransmit, forward error correction (FEC), задержка или потеря пакетов, приоритезация потоков, шифрование и многое другое.
Сервис Видео в Одноклассниках – вторая площадка в Рунете по просмотрам видео, ежедневно мы фиксируем свыше 400 миллионов просмотров видео.
...
Пишем свой протокол поверх UDP или платформа потокового видео с нуля на миллион онлайнов / Александр Тоболь (Одноклассники)
1. Пишем свой протокол
поверх UDP или
платформа потокового
видео с нуля на миллион
онлайнов
Александр Тоболь
2. 2 Live Timeline
1949
Первая
передвижная
телевизионная
станцая (ПТС)
в МСК
март 2015
Запустился
Periscope
январь 2016
Тест
Одноклассниками
Periscope в
высокогорье
июнь 2016
OK Live
OK Live
ноябрь 2016
Insta Live
март 2017
Стрим с
высокогорья
из OK Live
5. Что НЕ хочет пользователь5
ЖДАТЬ
Старта
трансляции
6. Что НЕ хочет пользователь6
Низкое Качество
Видео
трансляции
7. Заголовок
Видео: ok.ru/video/402843570592, автор Pladform
7 Что НЕ хочет пользователь
ЗАДЕРЖКИ
Между
стримером
и зрителем
Итак, с лесной опушки наш
специальный корреспондент – Роман!… Роман?!Так! Слушайте, Роман, я не понимаю, о
чем вы говорите!
Скажите, вы сейчас находитесь в
лесу?…Татьяна?!… … …?!… … … ?!
10. Periscope10
RTMP
RTMP
HLS
"Our video streaming engine is powered by Wowza. So all of the broadcasting and
all the consuming is going through this service called Wowza.” —Sara Haider,
Periscope Engineering Lead
25. WebRTC–стриминг25
1 Cоздан для p2p конференций,
потребует доработок для стриминга
1 к N
2 Шифрует весь поток данных, что,
для броадкаст стриминга зря и
нагружает CPU
Отказать
41. Packet Loss: fast retransmit41
Client Server
pkt 1
pkt 2
ack 2
ack 3
ack 1
fast retransmit
+ нет избыточности
– retransmit period
pkt 3
packet
drop
pkt 3
retransmit
period
42. Retransmit period: jitter42
PING highload.ru (178.248.233.16): 56 data bytes
icmp_seq=11 ttl=43 time=117.177 ms
icmp_seq=12 ttl=43 time=132.868 ms
icmp_seq=13 ttl=43 time=176.413 ms
icmp_seq=14 ttl=43 time=225.981 ms
50 ms
avg jitter
117ms to 132ms = 15ms
132ms to 176ms = 44ms
176ms to 225ms = 79ms
(14 + 44 + 79) / 3 = 46ms
44. Packet Loss: fast speculative retransmit44
Client Serverack 2
ack 3
pkt 3
packet
drop
pkt 3
retransmit
period
fast retransmit
– проблема со сходимостью
например, потеря 5% приводит к
лишнему RTT каждые 400
пакетов
400 пакетов * 0.05 * 0.05 = 1
1
fast speculative retransmit
+ избыточность только при
потере пакетов
– нет лишних RTT
2
speculative
retransmit
pkt 3
pkt 3
packet
drop
retransmit
period
pkt 4
ack 4
45. Forward Error Correction45
… +
K
FEC
– избыточность
+ Zero RTT
P
XOR
…… …
K
Reed-Solomon codes
N
PP
а если пропадет несколько пакетов?
а если пропадут все пакеты?
46. Packet Loss: negative acknowledgement — NACK46
Client Server
pkt 1
pkt 2
pkt 4
nack 4
pkt 4
packet
drop
RTT
NACK
+ прост в реализации
+ совместим с FEC
– можно потерять сам NACK
pkt3
pkt5
57. Приоритезация57
Данные Приоритет Гарантия доставки Шифрование
Метадата Высокий Гарантирована Включено
Аудио Средний < 500* мс Опционально
Видео Низкий < 300* мс Опционально
t t > t drop
IPBBI AAA M
t
73. 73 Просмотры прямых эфиров на ОК
просмотров
прямых эфиров
х3
апрель
2017
октябрь
2017
Просмотры
прямых эфиров
74. OKLive хранение записей стримов74
50 тыс +17 TB/
сутки +1 PB
стримов в сутки записей стримов всего видео в месяц
75. Что получили МЫ75
гарантию задержки между стримером и зрителями1
непрерывный стриминг даже при потере части оборудования
2
балансировка нагрузки во время популярных3
стриминг в FullHD на динамично меняющемся мобильном Интернет-канале
4
76. Что узнали ВЫ76
что такое видео и как его
стримить1
как писать свой UDP-протокол2
архитектура стримингового
сервиса3