Платформа для видео сроком в квартал. Александр Тоболь
DESCRIPTION
A talk from jokerconf.com conference. "Video Platform in 3 months. Delivered." by Alexander Tobol. Доклад не затронет какую-то особенную технологию или волшебный алгоритм. Речь пойдет о том, как чуть больше чем за квартал совсем небольшая команда перезапустила работающий в режиме 24/7 совсем немаленький видео-сервис на Одноклассниках на написанной с нуля платформе, развернутой на парке из свыше 200 серверов, распределенных между несколькими центрами обмена данными. Я бы хотел поделиться успехами и неудачами в ходе решения задачи по обеспечению бесперебойных загрузки, трансформации, хранения, раздачи видео и мониторинга, а также остановиться на особенностях, связанных с нагрузкой в 1000 просмотров в секунду, размером ежедневной аудитории в 8 миллионов географически распределенных в и за пределами РФ. Я также остановлюсь на некоторых использованных нами технологиях.TRANSCRIPT
Платформа для видео сроком в квартал
Александр Тоболь
инженер-программистпроекта Одноклассники
2
Видео на Одноклассниках
3
Видео на Одноклассниках
4
Видео на Одноклассниках
5
Видео на Одноклассниках
Аудитория и Объемы
6
8 млн уникальных смотрителей в день
50 млн просмотров в день
16 млн классов в день
50 тысяч загрузок видео в день
Видео в цифрах
7
28 млн роликов в базе
Исходящий трафик до 80 Гб/сек
Входящий трафик до 2 Гб/сек
Загружается 5 ТБ видео в день
Сохраняем 3 * 2 ТБ в день
Наш видео парк
8
Хранилище – 70 серверов, 5 ПБ
Раздача и загрузка – 30 серверов
DB + Cache – 30 серверов
Трансформация – 60 серверов
С чего все началось
9
• Решили делать видео на ОК в 2011
• Запустили на платформе сервиса Видео@mail.ru
• А сервис стал расти…
Новые требования – новая платформа
10
• Надежность
• Возобновляемая загрузка видео
• Воспроизведение видео с любого момента времени
• Поддержка мобильных устройств
• Эксплуатация - любовь к Java
Видео изнутри
tempstorage
persistentstorage
uploadserver
downloadserver
transformationserver
Загрузка
tempstorage
uploadserver
Требования:
• Возобновляемая загрузка видео
• Отказоустройчивость при потере сервера или ДЦ
• Гарантия обработки видео после загрузки
Загрузка. БалансировкаDNS-GSLB
ДЦ 3
ДЦ 1
ДЦ 2
LVSvu.mycdn.me
ip1
LVS ip2LVS ip3
Загрузка. БалансировкаDNS-GSLB
ДЦ 3
ДЦ 1
ДЦ 2
LVSvu.mycdn.me
ip1
LVS ip2LVS ip3
Загрузка. БалансировкаDNS-GSLB
ДЦ 3
ДЦ 1
ДЦ 2
LVSvu.mycdn.me
ip1
LVS ip2LVS ip3
Распределенная загрузка
16
ДЦ 1
ДЦ 2
ДЦ 3
tempstorage
tempstorage
tempstorage
Failover загрузка
17
ДЦ 1
ДЦ 2
ДЦ 3
tempstorage
tempstorage
tempstorage
Last-known-byte
Видео конвейер
tempstorage
persistentstorage
uploadserver
downloadserver
transformationserver
Трансформация
tempstorage
persistentstorage
transformationserver
Требования:
• Преобразование видео в унифицированный формат(воспроизведение на разных браузерах и платформах)
• Поддержать 4 качества видео
• Отказоустройчивость и масштабируемость
Выбор формата видео
Внутренний формат видео
MP4
H.264
AAC
FLV
H.263
MP3
WebM
VP8
Vorbis MP3
Очередь на транскодирование
22
tempstorage
Transformationqueue
Transform server 1
Transform server 2
Transform server N
uploadserver
Zookeeper23
Leader
candidate 2candidate 1
tempstorage
Transform server 1
Transform server 2
Transform server N
Очередь на транскодирование
uploadserver
24
Ex-Leader
candidate 2candidate 1Leader
Zookeeper24
tempstorage
Transform server 1
Transform server 2
Transform server N
uploadserver
Очередь на транскодирование
Трансформация видео
25
ДЦ N
tempstorage
Transformation queue
Transformationserver
ДЦ 1ДЦ 2ДЦ 3
persistent storage
ffmpegmp4parser
ДЦ 1ДЦ 2ДЦ 3
MP4, H.264, ACC
426x240640x360853x480
1280x720+preview
Трансформация. Коррекция длины
26
15% видео требуют коррекции
27
70 серверов x 36 дисков * 2 Tб ~ 5 Пт
ДЦ 1
storage1
storage2
storageN
Zookeeper
ДЦ K
storageN+1
storageN+2
storageN+M
OBSOBS
transformationserver
Хранение видео
Процесс обработки видео
tempstorage
persistentstorage
uploadserver
downloadserver
transformationserver
Раздача контента
persistentstorage
downloadserver
Требования:
• Отдача видео с любого момента времени или смещения
• Высокая нагрузка ~150Gbps
• Отказоустройчивость
Seek. Video pseudo-streaming
30
Header data1 data2 data N
v1 a1 vN aNv0 a06 Mb
data m
vm am
Video pseudo-streaming
31
MOOVdata1 data2 data N
v1 a1 vN aNv0 a0
data m
vm am
data N data m
HTTP byte-range
request
start time parameter
in the request
URL
MOOV data N data m
Video pseudo-streaming
32
MOOV data1 data2 data N
v1 a1 vN aNv0 a0Fast start
data m
vm am
data N data m
HTTP byte-range
request
start time parameter
in the request
URL
MOOV data N data m
Раздача контента
33
Уточнение требований:
• Псевдо-стримминг
• Кэширование только просмотренной части видео
Решение:
• Кэшировать видео сегментами по 256Кб
• Java (off-heap, shared memory, nio)
Архитектура раздачи
downloadserver
persistent storage
RAM - 96GB
SSD - 4TB
34
1-й уровень
2-й уровень
Segment256Kb
Требование к кэшу
downloadserver
persistent storage
RAM - 96GB
SSD - 4TB
~100GBGC tolerance
LRU10k/sec
persistence
~TBFIFO
???
OBS
35
1-й уровень
2-й уровень
требования решение
Решение для кэширования
36
Большие объемы (~100Gb)
+
Не оказывает влияния на GC
= Off-heap memory
• Native код
• Direct ByteBuffer
• Memory-mapped files
• Unsafe + shared memory
Варианты решения
Раздача – результат
37
download
persistent storage
RAM – 96Gb
SSD - 4Tb
eth4 x 1 Gbpseth
2 x 10 Gbps
80%
20%
Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Балансировка раздачи
38
node_1
persistent storage
node_2
node_3
node_4node_N
p0r0
p0r1
p0r2
pKr0
pKr1
pKr2
Video pseudo-streaming
39
MOOV atom data1 data2 data N
v1 a1 vN aNv0 a0Fast start
data m
vm am
data N data m
HTTP byte-range
request
start time parameter
in the request
URL
MOOV data N data m
mp4parser
Видео стримминг с Марса
40
Август 2012
• 40 Nginx сереров запущенных Amazon EC2
• Тестовая нагрузка ~25Gbps
• Отключение серверов
• 30 серверов - 25Gbps
• 20 серверов - 12Gbps
Основный вехи
41
октябрь 2010 Первый комит
январь 2011 Запуск на платформе видео@mail.ru
2011 - 2012 Запуск с видео Rutube + Youtube
июнь 2012 Загрузка пользовательского видео в платформу видео@mail.ru
январь 2013 Первое упоминание о своей видео платформе
май 2013 Платформа видео запущена
JavaТехнологии
42
Cassandra
OBS
ffmpeg
one-nio
ZookeeperApache Tomcat
mp4parser
Технологии и видео конвейер
tempstorage
persistentstorage
uploadserver
downloadserver
transformationserver
Apache Tomcat OBS
Zookeeperffmpeg
OBSone-nio
Результаты
44
• Работоспособность сервиса при отказе одного ДЦ
• Возобновление загрузки видео в течение 12 часов
• Просмотр видео с любого момента времени во Flash и
HTML5
• Высокопроизводительная раздача до 20Gbps с
сервера
• Поддержка видео на мобильных устройствах
45
Осталось доделать
• HTML5 плеер
• «Левые» кодеки
• Получение метаданных видео (GPS, например)