Слайд 2Эрливидео
Потоковое видео
Разные протоколы: MPEG-TS, RTMP, …
Высокая эффективность
![Эрливидео Потоковое видео Разные протоколы: MPEG-TS, RTMP, … Высокая эффективность](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-1.jpg)
Слайд 3Разные нагрузки
Тысячи пар: один источник, один клиент
Один источник, тысячи клиентов
![Разные нагрузки Тысячи пар: один источник, один клиент Один источник, тысячи клиентов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-2.jpg)
Слайд 4Видео
Один поток: 50 кадров/сек, 500 КБит/с
2000 клиентов — 100 000 кадров/сек.
Суммарно 1 ГБит/с
![Видео Один поток: 50 кадров/сек, 500 КБит/с 2000 клиентов — 100 000 кадров/сек. Суммарно 1 ГБит/с](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-3.jpg)
Слайд 5RTMP
У каждого клиента своё
Каждому клиенту своя копия потока
Данные общие, заголовки разные
![RTMP У каждого клиента своё Каждому клиенту своя копия потока Данные общие, заголовки разные](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-4.jpg)
Слайд 6RTMP
Скорости не хватает — клиент залипает
Ошибка в тайстемпе — клиент залипает
Клиент залипает — надо что-то
![RTMP Скорости не хватает — клиент залипает Ошибка в тайстемпе — клиент](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-5.jpg)
делать
Слайд 7Рост эрливидео
Начались проблемы на 800 клиентах
Неверная архитектура
Пришлось профилировать
![Рост эрливидео Начались проблемы на 800 клиентах Неверная архитектура Пришлось профилировать](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-6.jpg)
Слайд 8Профилирование
Девелопмент одно — продакшн другое
Разные версии клиентов
Разные скорости каналов
Разные задержки на каналах
![Профилирование Девелопмент одно — продакшн другое Разные версии клиентов Разные скорости каналов Разные задержки на каналах](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-7.jpg)
Слайд 9Профилирование
Профилирование на продакшне
Не отключая пользователей
Без деградации системы
![Профилирование Профилирование на продакшне Не отключая пользователей Без деградации системы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-8.jpg)
Слайд 10Инструменты
Valgrind и профилировщики тормозят систему
gdb вносит искажения в код
![Инструменты Valgrind и профилировщики тормозят систему gdb вносит искажения в код](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-9.jpg)
Слайд 11Инструменты
Erlang предлагает другие подходы к профилированию
![Инструменты Erlang предлагает другие подходы к профилированию](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-10.jpg)
Слайд 12Erlang
Данные и потоки выполнения объединены, как процессы ОС
Обмен асинхронными сообщениями
Message box у
![Erlang Данные и потоки выполнения объединены, как процессы ОС Обмен асинхронными сообщениями](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-11.jpg)
каждого процесса
Слайд 13Erlang
Все данные немутабельные
Процесс — рекурсивная функция, вызывающая себя с новым значением
![Erlang Все данные немутабельные Процесс — рекурсивная функция, вызывающая себя с новым значением](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-12.jpg)
Слайд 14Erlang
Один процесс под каждого клиента
Один процесс под каждый «объект»
Вызовы методов строго последовательны
![Erlang Один процесс под каждого клиента Один процесс под каждый «объект» Вызовы методов строго последовательны](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-13.jpg)
Слайд 15Lowload
Процесс-«поток» шлет сообщения процессам-«клиентам»
Клиенты упаковывают RTMP сами
в системе FPS*N сообщений
![Lowload Процесс-«поток» шлет сообщения процессам-«клиентам» Клиенты упаковывают RTMP сами в системе FPS*N сообщений](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-14.jpg)
Слайд 16Тормоза
Начинаются «лаги» и «залипание»
Куда смотреть? Что мерять?
![Тормоза Начинаются «лаги» и «залипание» Куда смотреть? Что мерять?](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-15.jpg)
Слайд 17Мониторинг
Меряем очереди сообщений
erlang:process_info(Pid,message_queue_len)
![Мониторинг Меряем очереди сообщений erlang:process_info(Pid,message_queue_len)](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-16.jpg)
Слайд 18Мониторинг
Меряем загрузку CPU
etop:start()
мониторим общую память процессов
![Мониторинг Меряем загрузку CPU etop:start() мониторим общую память процессов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-17.jpg)
Слайд 19Узкие места
В узких местах накапливаются сообщения
Растет CPU, потребляемый процессом
Накапливается память
![Узкие места В узких местах накапливаются сообщения Растет CPU, потребляемый процессом Накапливается память](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-18.jpg)
Слайд 20Узкие места
Процессу не хватает одного ядра
Недообрабатывает сообщения
Накапливается память
Встают в ожидании клиентские процессы
![Узкие места Процессу не хватает одного ядра Недообрабатывает сообщения Накапливается память Встают в ожидании клиентские процессы](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-19.jpg)
Слайд 21Как боролись?
Уменьшили количество сообщений
Прямая запись в сокет
Распараллелили запись в сокеты по ядрам
![Как боролись? Уменьшили количество сообщений Прямая запись в сокет Распараллелили запись в сокеты по ядрам](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-20.jpg)
Слайд 22Результат
Во много раз увеличили количество одновременных клиентов
![Результат Во много раз увеличили количество одновременных клиентов](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-21.jpg)
Слайд 23Рекомендации
Планировать количество проходящих сообщений
Уменьшать работу внутри вызываемого процесса
Раскладывать работу по процессам — расползутся
![Рекомендации Планировать количество проходящих сообщений Уменьшать работу внутри вызываемого процесса Раскладывать работу](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-22.jpg)
по ядрам
Слайд 24Выводы
Профилировка приложений на erlang возможен без деградации качества обслуживания
Методы поиска проблем несложны
![Выводы Профилировка приложений на erlang возможен без деградации качества обслуживания Методы поиска проблем несложны и эффективны](/_ipx/f_webp&q_80&fit_contain&s_1440x1080/imagesDir/jpg/388685/slide-23.jpg)
и эффективны