Платформа сроком в
квартал
Александр Тоболь
Инженер-программист
Одноклассники
Видео на Одноклассниках
Видео на Одноклассниках
Видео на Одноклассниках
Видео на Одноклассниках
Аудитория и объемы
10 млн уникальных смотрителей в день
60 млн просмотров в день
20 млн классов в день
50 тысяч загрузок видео в день

28.10.13

6
Видео в цифрах
30 млн роликов в базе
Исходящий трафик до 100 Гб/сек
Загружается 5 ТБ видео в день
Входящий трафик до 2 Гб/сек
Сохраняем 3 * 2 ТБ в день
Наш видео парк
Хранилище – 70 серверов, 5 ПБ
DB + Cache – 30 серверов
Трансформация – 60 серверов
Раздача и загрузка – 30 серверов
C чего все началось
• Решили делать видео на ОК в
2011
• Запустили на платформе
сервиса Видео@mail.ru
• А сервис стал расти…
Новые требования – новая платформа
• Надежность
• Возобновляемая загрузка
видео
• Воспроизведение видео с
любого момента времени
• Поддержка мобильных
устройств
• Эксплуатация - любовь к Java
Видео изнутри

upload
server

temp
storage

transformation
server

download
server

persistent
storage
Загрузка

upload
server

temp
storage

Требования:
•Возобновляемая загрузка видео
•Отказоустройчивость при потере сервера или ДЦ
•Гарантия обработки видео после загрузки
Загрузка. Балансировка
DNS-GSLB

ДЦ 1
LVS

vu.mycdn.me

ДЦ 3
LVS

ip1

ДЦ 2
ip3

LVS

ip2
Загрузка. Балансировка
DNS-GSLB

ДЦ 1
LVS

vu.mycdn.me

ДЦ 3
LVS

ip1

ДЦ 2
ip3

LVS

ip2
Загрузка. Балансировка
DNS-GSLB

ДЦ 1
LVS

vu.mycdn.me

ДЦ 3
LVS

ip1

ДЦ 2
ip3

LVS

ip2
Распределенная загрузка
ДЦ 1
ДЦ 3
temp
storage

ДЦ 2

temp
storage

temp
storage
Failover загрузка
ДЦ 1
ДЦ 3
temp
storage

ДЦ 2

Last-known-byte

temp
storage

temp
storage
17
Видео конвейер

upload
server

temp
storage

transformation
server

download
server

persistent
storage
Трансформация
Требования:
•Преобразование видео в
унифицированный формат
(воспроизведение на разных браузерах
и платформах)

temp
storage

transformation
server

•Поддержать 4 качества видео
•Отказоустройчивость и
масштабируемость

persistent
storage
Выбор формата видео
Внутренний формат видео

FLV

MP4

WebM

H.263

H.264

VP8

MP3

AAC

Vorbis MP3
Очередь на транскодирование
Transform
server 1

upload
server

temp
storage
Transform
server 2

Transformation
queue
Transform
server N
Очередь на транскодирование
Transform
server 1

upload
server

temp
storage
Transform
server 2

Leader
Transform
server N

candidate 1

candidate 2

Zookeeper
Очередь на транскодирование
Transform
server 1

upload
server

temp
storage
Transform
server 2

Ex-Leader
Transform
server N

candidate 1
Leader

candidate 2

24

Zookeeper
Трансформация видео
ДЦ 1
ДЦ 2
ДЦ 3

ДЦ 1
ДЦ 2
ДЦ 3

temp
storage

ДЦ N

Transformation
queue

persistent
storage
Transformation
server

ffmpeg
mp4parser

MP4, H.264, ACC
426x240
640x360
853x480
1280x720
+preview
Трансформация. Коррекция длины
15% видео требуют коррекции

26
Хранение видео

70 серверов x 36 дисков * 2 Tб ~ 5 Пт
Zookeeper

transformation
server

ДЦ 1

OBS

OBS

storage
1

storage
2

storage
N

storage
N+1

storage
N+2

ДЦ K

storage
N+M
Процесс обработки видео

upload
server

temp
storage

transformation
server

download
server

persistent
storage
Раздача контента
Требования:
•Отдача видео с любого момента времени или смещения
•Высокая нагрузка ~150Gbps
•Отказоустойчивость

download
server

persistent
storage
Seek. Video pseudo-streaming

Header

data1

data2

data m

data N

6 Mb

v0 a0

v1 a1

vm am

vN aN
Video pseudo-streaming
data1

data2

data m

v0 a0

v1 a1

vm am

vN aN

start time
parameter
in the
request
URL

MOOV

MOOV

data N

data m

HTTP
byterange
request
data N

data m

data N
Video pseudo-streaming
MOOV

data1

data2

data m

data N

Fast start

v0 a0

v1 a1

vm am

vN aN

start time
parameter
in the
request
URL

MOOV

data m

HTTP
byterange
request
data N

data m

data N

32
Раздача контента
Уточнение требований:
•Псевдо-стримминг
•Кэширование только просмотренной части видео
Решение:
•Кэшировать видео сегментами по 256Кб
•Java (off-heap, shared memory, nio)
Архитектура раздачи
persistent
storage

download
server
Segment
256Kb

1-й уровень

RAM - 96GB

2-й уровень

SSD - 4TB
Требование к кэшу

download
server

persistent
storage
требования
~100GB

1-й уровень

RAM - 96GB

GC tolerance

решение
???

LRU
20k/sec
persistence

2-й уровень

SSD - 4TB

~TB
FIFO

OBS
Решение для кэширования
Большие объемы (~100Gb)
+
Не оказывает влияния на GC

= Off-heap memory
Варианты решения

• Native код
• Direct ByteBuffer
• Memory-mapped files

• Unsafe + shared memory
Раздача – результат
80%

download

eth
4 x 10 Gbps

20%
eth

RAM – 96Gb

1 x 10 Gbps

persistent
storage

SSD - 4Tb

37

Intel(R) Xeon(R) CPU E5-2690 v2 @ 3.00GHz
Балансировка раздачи
node_2
node_1

node_3
pKr0

persistent
storage

p0r1
pKr1

p0r0
pKr2

node_N

p0r2

node_4
CDN
node_1 node_2

ДЦ

node_2

node_1

node_N

node_1

node_2

node_3

node_4
Video pseudo-streaming
MOOV atom

data1

data2

data m

data N

Fast start

v0 a0

v1 a1

vm am

vN aN

start time
parameter
in the
request
URL

MOOV

data m

HTTP
byterange
request
data N

mp4parser

data m

data N
Основный вехи
октябрь 2010
январь 2011
2011 - 2012

Первый комит
Запуск на платформе
видео@mail.ru
Запуск с видео Rutube + Youtube

июнь 2012

Загрузка пользовательского видео
в платформу видео@mail.ru

январь 2013

Первое упоминание о своей видео
платформе

май 2013

Платформа видео запущена

41
41
Технологии

Java

one-nio
mp4parser

Zookeeper

Cassandra

OBS

Apache Tomcat

ffmpeg
Технологии и видео конвейер
Apache Tomcat

OBS
Zookeeper

upload
server

one-nio

download
server

temp
storage

OBS

persistent
storage

ffmpeg

transformation
server
Результаты
• Работоспособность сервиса при отказе одного ДЦ
• Возобновление загрузки видео в течение 12 часов
• Просмотр видео с любого момента времени во
Flash и HTML5
• Высокопроизводительная раздача до 30Gbps с
сервера
• Поддержка видео на мобильных устройствах
Осталось доделать
• HTML5 плеер
• «Левые» кодеки
• Использование метаданных исходного видео (GPS, например)
Спасибо!
Видео стримминг с Марса
Август
2012

• 40 Nginx сереров запущенных
Amazon EC2
• Тестовая нагрузка ~25Gbps
• Отключение серверов
• 30 серверов - 25Gbps
• 20 серверов - 12Gbps

Александр Тоболь, "Одноклассники"