Александр Тоболь, "Одноклассники"
DESCRIPTION
HighLoad++ 2013TRANSCRIPT
Платформа сроком в квартал
Александр Тоболь
Инженер-программист
Одноклассники
Видео на Одноклассниках
Видео на Одноклассниках
Видео на Одноклассниках
Видео на Одноклассниках
Аудитория и объемы
10 млн уникальных смотрителей в день
60 млн просмотров в день
20 млн классов в день
50 тысяч загрузок видео в день
28.10.13 6
Видео в цифрах
30 млн роликов в базе
Исходящий трафик до 100 Гб/сек
Входящий трафик до 2 Гб/сек
Загружается 5 ТБ видео в день
Сохраняем 3 * 2 ТБ в день
Наш видео парк
Хранилище – 70 серверов, 5 ПБ
Раздача и загрузка – 30 серверов
DB + Cache – 30 серверов
Трансформация – 60 серверов
C чего все началось
• Решили делать видео на ОК в
2011
• Запустили на платформе
сервиса Видео@mail.ru
• А сервис стал расти…
Новые требования – новая платформа
• Надежность
• Возобновляемая загрузка видео
• Воспроизведение видео с любого момента времени
• Поддержка мобильных устройств
• Эксплуатация - любовь к 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
Распределенная загрузка
ДЦ 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
Очередь на транскодирование
tempstorage
Transformationqueue
Transform server 1
Transform server 2
Transform server N
uploadserver
Zookeeper
Leader
candidate 2candidate 1
tempstorage
Transform server 1
Transform server 2
Transform server N
Очередь на транскодирование
uploadserver
24
Ex-Leader
candidate 2candidate 1Leader
Zookeeper
tempstorage
Transform server 1
Transform server 2
Transform server N
uploadserver
Очередь на транскодирование
Трансформация видео
ДЦ N
tempstorage
Transformation queue
Transformationserver
ДЦ 1ДЦ 2ДЦ 3
persistent storage
ffmpegmp4parser
ДЦ 1ДЦ 2ДЦ 3
MP4, H.264, ACC
426x240640x360853x480
1280x720+preview
Трансформация. Коррекция длины
26
15% видео требуют коррекции
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
Header data1 data2 data N
v1 a1 vN aNv0 a06 Mb
data m
vm am
Video pseudo-streaming
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
Раздача контента
Уточнение требований:
•Псевдо-стримминг
•Кэширование только просмотренной части видео
Решение:
•Кэшировать видео сегментами по 256Кб
•Java (off-heap, shared memory, nio)
Архитектура раздачи
downloadserver
persistent storage
RAM - 96GB
SSD - 4TB
1-й уровень
2-й уровень
Segment256Kb
Требование к кэшу
downloadserver
persistent storage
RAM - 96GB
SSD - 4TB
~100GBGC tolerance
LRU20k/sec
persistence
~TBFIFO
???
OBS
1-й уровень
2-й уровень
требования решение
Решение для кэширования
Большие объемы (~100Gb)
+
Не оказывает влияния на GC
= Off-heap memory
• Native код
• Direct ByteBuffer
• Memory-mapped files
• Unsafe + shared memory
Варианты решения
Раздача – результат
37
download
persistent storage
RAM – 96Gb
SSD - 4Tb
eth1 x 10 Gbpseth
4 x 10 Gbps
80%
20%
Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Балансировка раздачи
node_1
persistent storage
node_2
node_3
node_4node_N
p0r0
p0r1
p0r2
pKr0
pKr1
pKr2
CDN
node_1
node_2
node_3
node_4node_N
node_1 node_2
node_2node_1
ДЦ
Video pseudo-streaming
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
Основный вехи
41
41
октябрь 2010 Первый комит
январь 2011 Запуск на платформе видео@mail.ru
2011 - 2012 Запуск с видео Rutube + Youtube
июнь 2012 Загрузка пользовательского видео в платформу видео@mail.ru
январь 2013 Первое упоминание о своей видео платформе
май 2013 Платформа видео запущена
JavaТехнологии
Cassandra
OBS
ffmpeg
one-nio
ZookeeperApache Tomcat
mp4parser
Технологии и видео конвейер
tempstorage
persistentstorage
uploadserver
downloadserver
transformationserver
Apache Tomcat OBS
Zookeeperffmpeg
OBSone-nio
Результаты
• Работоспособность сервиса при отказе одного ДЦ
• Возобновление загрузки видео в течение 12 часов
• Просмотр видео с любого момента времени во
Flash и HTML5
• Высокопроизводительная раздача до 30Gbps с
сервера
• Поддержка видео на мобильных устройствах
Осталось доделать
• HTML5 плеер
• «Левые» кодеки
• Использование метаданных исходного видео (GPS, например)
Спасибо!
Видео стримминг с Марса
Август 2012 • 40 Nginx сереров запущенных
Amazon EC2
• Тестовая нагрузка ~25Gbps
• Отключение серверов
• 30 серверов - 25Gbps
• 20 серверов - 12Gbps