Персональные инструменты
 

ADD-2010: отчет Игоря Беспальчука/Видеохостинг на Erlang

Материал из CustisWiki

Перейти к: навигация, поиск
Разработка видеохостинга на Erlang (Максим Лапшин на ADD-2010)

Максим Лапшин рассказывал о том, как он написал сервер видеостриминга Erlyvideo на Erlang, и почему этот язык оказался наилучшим средством для этой специфической задачи. Доклад мне очень понравился, хотя презентация была унылая – белый фон, черные bullet'ы. Максим докладывал четко, понятно, без лишней воды и не занудно. Фактически, слайды были и не нужны.

Специфика задачи видеостриминга состоит в том, что подключенному клиенту нужно обеспечить непрерывное вещание в течение нескольких часов или даже суток. При этом уже нельзя относится к управлению памятью и устойчивости сервиса так же наплевательски, как в случае простого веб-сайта, где легко можно recycle'ить рабочие процессы на случай, если где-то имеет место утечка.

Сервер нельзя останавливать, у него не должна течь память, он должен масштабироваться и обслуживать большое число клиентов. При этом его еще нужно как-то обновлять. А если все-таки с каким-то клиентом случится что-то нехорошее – то другие не должны пострадать. Задача звучит достаточно внушительно, правда?

Так вот оказывается, что Erlang одной своей природой и стандартным комплектом поставки эту сложную задачу наполовину решает сразу, причем радикально.

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

Далее, как следствие, вся, абсолютно вся выделенная память всегда принадлежит одному потоку, который, собственно, ее и запросил. А это, в свою очередь, означает, что если с одним потоком что-то пошло не так, то его можно относительно безболезненно убить и освободить всю его память. И это не повлияет на работу остальных потоков. В стандартный комплект поставки Erlang входит весьма продвинутый инструментарий для такого рода анализа и наладки программ.

И, наконец, Erlang предоставляет очень редкую возможность обновления выполняемого кода на лету. В случае с сервером стриминга Erlyvideo это означает, что функционал может быть обновлен без прерывания трансляции, причем не только для новых клиентов, но и для тех, которые уже подключены и принимают поток видео.

Таким образом, Erlang хорошо подходит для организации устойчивых информационных сервисов, работающих с большим числом клиентов, под нагрузкой. Некоторый минус (для меня) состоит в том, что Erlang – динамически типизированный язык. Не люблю я их почему-то. Максим говорил, что в его случае это не было проблемой, хотя для реализации сложной бизнес-логики типа банковской он бы тоже поостерегся выбирать Erlang и предпочел бы язык со статической системой типов.

Напоследок было отмечено, что Erlang сам по себе язык очень простой и когда Максиму потребовалось найти разработчика, он нашел его очень быстро. Это был разработчик на Java, который освоил Erlang в считанные дни.