Оптимизация сервера потокового видеовещания (Дмитрий...

42
Оптимизация сервера потокового видеовещания Дмитрий Шатров

Upload: ontico

Post on 14-Dec-2014

1.145 views

Category:

Documents


3 download

DESCRIPTION

 

TRANSCRIPT

Page 1: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Оптимизация сервера

потокового видеовещания

Дмитрий Шатров

Page 2: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Мой Мир@Mail.Ru

трансляции

видеочат

http://momentvideo.org

Page 3: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Трансляции@mail.ru

Page 4: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

В поисковой выдаче

Page 5: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Сервис трансляций

Page 6: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Сервис трансляций

Page 7: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Потоковое видео

Трансляции

Конференции

Видеочат

...и не только

Page 8: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Организация сервиса

Центральный сервер

Мультикаст

P2P

Page 9: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Центральный сервер

сервер

Page 10: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Мультикаст

сервер

Page 11: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

P2P

сервер

Page 12: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Центральный сервер

Основа видеосервиса

сервер

Page 13: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Сервер видеочата

2 тыс. одновременно подключенных клиентов

Два видеопотока ~250 Кбит/сек на клиента

Горизонтальное масштабирование

3 независимых сервера, ~350 Мбит/сек на сервер, загрузка CPU не больше 25%

Page 14: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Сервер трансляций

5 тыс. одновременно подключенных клиентов

Один видеопоток 200-500 Кбит/сек на клиента

Кластер из трёх раздающих серверов и одного арбитра

Очень неравномерная нагрузка на серверы

Page 15: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Характер нагрузки

Нагрузка быстро скачет с одного сервера на другой.

Трансляций с кол-вом зрителей >100 обычно не больше 10 штук.

Нужно разносить популярные трансляции по нескольким серверам.

Page 16: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Шторм подключений

Рестарт сервера — реконнект всех клиентов.

Moment отлично справляется с толпой клиентов, пришедших одновременно.

Реконнект работает хорошо, на это можно рассчитывать при перебалансировке.

Page 17: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

1 ∞

Page 18: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Видеосервер

Бизнес-логика

отдельные сообщения

RTMP

видеопоток

Page 19: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

API

Клиент подключился

Клиент отключился

Запрос на просмотр

Запрос на вещание

RPC

Page 20: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Протокол RTMP

Нужен для взаимодействия с Flash

2 уровня: chunk stream и message stream

поддержка RPC

RTMPT — RTMP поверх HTTP

Переусложнён, спецификация неточна

Page 21: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Реализация RTMP

~1,5 месяца работы одного разработчика

изучение протоколареализацияотладкаоптимизация

+ RTMPT

Page 22: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Принцип работы

event-машина на неблокирующихся сокетах

Page 23: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Получение данных

Page 24: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Отправка данных

Page 25: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Оптимизация

Стараемся максимально эффективно использовать примитивы, предлагаемые ядром.

Минимизируем количество системных вызовов для отправки данных.

Хотим ускориться в несколько раз.

Page 26: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Немедленная отправка

При отправке сообщение либо уходит целиком,либо мы заключаем, что клиент медленный и начинаем отбрасывать сообщения.

В результате writev работает только в рамках одного сообщения.

Page 27: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Отложенная отправка

За одну операцию чтения в приёмный буфер может быть считано сразу несколько сообщений.

Откладываем отправку данных до конца итерации цикла обработки сообщений.

Отправляем все считанные за итерацию данные одним writev.

Page 28: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

В конце итерации

Page 29: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

mwritev

Простой модуль ядра: /dev/mwritev

Принимает массив наборов параметров для вызовов writev

Вызывает vfs_writev для каждого набора параметров

Возвращает массив результатов

Page 30: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

mwritev

-15% нагрузки на CPU

Это немного. Значит, контекстные переключения относительно недороги.

Дальнейшая оптимизация снижает эффект от использования mwritev.

Page 31: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Группировка сообщений

Равномерный видеопоток => интервалы между сообщениями препятствуют группировке.

Тестовый модуль Moment — mod_test. Генерирует поток сообщений.

rtmptool — имитирует N одновременных подключений.

Page 32: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Группировка сообщений

burst = 3 => производительность x 2.5

Группировать сообщения очень выгодно.

Page 33: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Группировка сообщений

Задерживаем помещение клиента в очередь отложенной отправки, если в очереди только аудио и видео сообщения, и с момента последней отправки прошло меньше M миллисекунд.

Т.е. буферизуем поток на сервере, вводим искуственную задержку.

Page 34: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Эффект от группировки

Видео ~560 Кбит/секPentium 4, 2.8 ГГц (low-end сервер)

задержка 0 мс — 1400 клиентов

задержка 100 мс — 3500 клиентов

задержка 500 мс — 5000 клиентов

Page 35: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Эксперимент

Добиваемся 100%-й загрузки CPU и продолжаем увеличивать кол-во подключений.

Видимого ухудшения качества видео при просмотре не происходит. Немного растёт задержка (но не превышает 1 сек).

Первые пропуски видео/звука — на 6000 клиентов.

Page 36: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

?CPU — 100%

Page 37: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Саморазгон сервера

CPU 100% => следующая итерация цикла обработки сообщений начнётся позже.

На следующей итерации будет доступно больше данных от источника видео.

В конце итерации мы отправим больше данных. Т.е размер отправляемой за раз порции данных вырастет.

Page 38: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Саморазгон сервераЧем больше размер блока данных при отправке, тем выше производительность сервера.

Получаем эквивалент динамического увеличения задержки при отправке в зависимости от нагрузки на сервер.

Порог в 6000 клиентов согласуется с эффектом от явной буферизации.

Page 39: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Многопоточность

В Moment:

Отдельная блокировка на каждый крупныйобъект (мьютекс)

Подсчёт ссылок

- 25% производительности даже с однимпотоком

Page 40: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Многопоточность

Сложно писать

Сложно отлаживать

Сервер медленнее

Но есть свои плюсы

Page 41: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Итог

Архитектура «боевого» видеосервера.

3 тыс. клиентов с одного ядра на low-end системе (500 Кбит/сек на клиента).

До 6 тыс. клиентов на пике при умеренном увеличении задержки.

Page 42: Оптимизация сервера потокового видеовещания (Дмитрий Шатров)

Реализованы все описанные оптимизации.

Умеет всё, что нужно для таких сервисов, как трансляции, видеочат и им подобные.

Захват видео с камер, видеонаблюдение, запись.

Открытый код. API для плагинов.

http://momentvideo.org