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

Post on 15-Jun-2015

1.152 views 1 download

description

HighLoad++ 2013

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

Платформа сроком в квартал

Александр Тоболь

Инженер-программист

Одноклассники

Видео на Одноклассниках

Видео на Одноклассниках

Видео на Одноклассниках

Видео на Одноклассниках

Аудитория и объемы

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