Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

2,601 views

Published on

  • Be the first to comment

Высокая нагрузка на Erlang приложения erlyvideo на гигабитном канале (Макс Лапшин)

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

×