Erlang и видеосервер         Опыт разработки.   Макс Лапшин, max@maxidoors.ru
Что такое        видеосервер• Камеры наблюдения (rtsp)• Софт захвата (rtmp)• Спутниковые грабберы (multicast)• VLC/ffmpeg ...
Все это раздается на• Десктопы (rtmp, hds)• Приставки и айпады (hls)• Архив для таймшифта
Протоколы и         форматы• Их много• Все реализуются по своему• Закрытые и глючные реализации• Надо адаптироваться под в...
Вытекающие         проблемы• Код запутан из-за того что стройные идеи  пронизаны запилами• Очень сложно юнит-тестировать. ...
Какие еще       особенности?• Высокие требования по скорости• Хочется слабую связанность компонент  (конфликтует с п. 1)• ...
Что хочется?• Высокоэффективная платформа для сетевых  демонов• Возможность горячей замены кода• Автоматический контроль з...
Erlang• Процессы - фантастически клевая идея• Это объекты в которых данные и поток  выполнения связаны вместе• Больше тако...
Что из этого          следует?• Автоматическая обработка ошибок  изолирует их в одном процессе• Бесплатная многоядерность•...
Процессы это          объекты• Данные инкапсулированы в них и только в них• Имеют ограниченное время жизни• Есть конструкт...
Чем же это не C++• Value данные немутабельны• Вызов метода эксплицитно происходит посылкой  сообщения• Все объекты - поток...
Неожиданные          фишки• Возможность горячей замены кода• Отложенный ответ на вызов метода (!)• Отсутствие race conditi...
Erlang - это не о том, как быть модным     хипстером
Erlang - это о том, как делать работающие         вещи
Pattern matching• Труъ ООП• Классификация аргументов через классы в  дереве наследования работает плохо• Мы классифицируем...
Обработка ошибок• Изолированы внутри процесса• По умолчанию завершают текущий  объект с его ресурсами• Можно подписаться н...
Одного Erlang мало    Нужен OTP• Эмуляция вызовов методов через  сообщения• Слежение за деревом процессов• Автоматическое ...
Ложка дегтя• Неудобные строки• error_logger при известном стечении  обстоятельств может уронить систему в  oom• Нет ORM ти...
Пример Erlang в         видео• Поток кадров осуществляется посылкой  сообщений подписчикам• Никаких задержек источника: ра...
Опыт erlyvideo• Малыми силами• Быстро• Лучше чем на джаве• Все круто
Опыт erlyvideo• Несколько гигабит• Без утечек памяти и файлов• Работает месяцами без сбоев• Приносит деньги
Структура ПО• Java, C++ — это как марионетка с одной  веревочкой• Erlang — раздельные компоненты
Либы на C• Событийные• Можно в отдельных тредах• Достаточно удобно• Нет аналога FFI
Резюме• Erlang оказался прекрасной платформой  для разработки сложного, запутанного  сетевого демона• Потребовалось горазд...
Вопросы? Макс Лапшинmax@maxidoors.ru
Upcoming SlideShare
Loading in …5
×

Erlang for Yandex

6,777 views

Published on

Выступление в яндексе про эрланг

Published in: Technology
0 Comments
5 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
6,777
On SlideShare
0
From Embeds
0
Number of Embeds
3,930
Actions
Shares
0
Downloads
21
Comments
0
Likes
5
Embeds 0
No embeds

No notes for slide
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • Erlang for Yandex

    1. 1. Erlang и видеосервер Опыт разработки. Макс Лапшин, max@maxidoors.ru
    2. 2. Что такое видеосервер• Камеры наблюдения (rtsp)• Софт захвата (rtmp)• Спутниковые грабберы (multicast)• VLC/ffmpeg (mpegts)• Файлы (адский набор вариантов)
    3. 3. Все это раздается на• Десктопы (rtmp, hds)• Приставки и айпады (hls)• Архив для таймшифта
    4. 4. Протоколы и форматы• Их много• Все реализуются по своему• Закрытые и глючные реализации• Надо адаптироваться под всех• Иногда кажется что надо обобщить (rtp/ rtsp/sip)
    5. 5. Вытекающие проблемы• Код запутан из-за того что стройные идеи пронизаны запилами• Очень сложно юнит-тестировать. Лучше вообще не рассчитывать на тесты• Ошибки возникают и это нормально• Нельзя из-за них ронять рантайм, который живет долго
    6. 6. Какие еще особенности?• Высокие требования по скорости• Хочется слабую связанность компонент (конфликтует с п. 1)• Утечки памяти - огромная проблема с которой не справляется джава
    7. 7. Что хочется?• Высокоэффективная платформа для сетевых демонов• Возможность горячей замены кода• Автоматический контроль за ошибками рантайма, ограничивающий их воздействие• Слабую связность отдельных компонент• Дешевую многоядерность
    8. 8. Erlang• Процессы - фантастически клевая идея• Это объекты в которых данные и поток выполнения связаны вместе• Больше такого нет нигде• "Объекты обмениваются друг с другом различными сообщениями"
    9. 9. Что из этого следует?• Автоматическая обработка ошибок изолирует их в одном процессе• Бесплатная многоядерность• Слабая связанность через сообщения• Немутабельность упрощает все• Софт-риалтайм сборка мусора. Никакого stop world
    10. 10. Процессы это объекты• Данные инкапсулированы в них и только в них• Имеют ограниченное время жизни• Есть конструкторы и деструкторы• Имеют бизнес-логику• Могут вызывать методы друг на друге• Даже есть указатели на объекты (сетевые!)
    11. 11. Чем же это не C++• Value данные немутабельны• Вызов метода эксплицитно происходит посылкой сообщения• Все объекты - потоки выполнения• Не реентерабельны и синхронизируются по mailbox• Нет явного наследования, только руками• Код не связан с данными
    12. 12. Неожиданные фишки• Возможность горячей замены кода• Отложенный ответ на вызов метода (!)• Отсутствие race condition внутри одного объекта (да и вообще их мало)• Можно сделать счетчик ссылок с таймаутом
    13. 13. Erlang - это не о том, как быть модным хипстером
    14. 14. Erlang - это о том, как делать работающие вещи
    15. 15. Pattern matching• Труъ ООП• Классификация аргументов через классы в дереве наследования работает плохо• Мы классифицируем объекты ad-hoc, в каждом месте ветвления логики• Pattern matching - это классификация объектов по их значению, актуальному здесь и сейчас
    16. 16. Обработка ошибок• Изолированы внутри процесса• По умолчанию завершают текущий объект с его ресурсами• Можно подписаться на смерть объекта (!)• Органичная часть рантайма• Не надо писать код по обработке ошибок
    17. 17. Одного Erlang мало Нужен OTP• Эмуляция вызовов методов через сообщения• Слежение за деревом процессов• Автоматическое журналирование событий• Стандартизация стиля программ• Код не по OTP это зло
    18. 18. Ложка дегтя• Неудобные строки• error_logger при известном стечении обстоятельств может уронить систему в oom• Нет ORM типа ActiveRecord• Не ценится в гей-сообществе
    19. 19. Пример Erlang в видео• Поток кадров осуществляется посылкой сообщений подписчикам• Никаких задержек источника: рантайм сам раскидает сообщения и зашедулит получателей• Клиент падает и не должен явно отписываться• В источнике счетчик подписчиков с таймаутом
    20. 20. Опыт erlyvideo• Малыми силами• Быстро• Лучше чем на джаве• Все круто
    21. 21. Опыт erlyvideo• Несколько гигабит• Без утечек памяти и файлов• Работает месяцами без сбоев• Приносит деньги
    22. 22. Структура ПО• Java, C++ — это как марионетка с одной веревочкой• Erlang — раздельные компоненты
    23. 23. Либы на C• Событийные• Можно в отдельных тредах• Достаточно удобно• Нет аналога FFI
    24. 24. Резюме• Erlang оказался прекрасной платформой для разработки сложного, запутанного сетевого демона• Потребовалось гораздо меньше ресурсов и сил чем на джаве и результаты тоже лучше
    25. 25. Вопросы? Макс Лапшинmax@maxidoors.ru

    ×