войти зарегистрироваться

Erlang/OTPПишем интерфейс к Kyoto Cabinet для Эрланга

Вступительное слово


В одном из своих рабочих проектов была необходимость во встраиваемой базе данных. И очень приглянулся Kyoto Cabinet. Всё с ним хорошо: и максимальный размер коллекции огромный, и скорость устраивает, и выбор типа хранилищ широкий, но вот только интерфейса для Эрланга у этого замечательного инструмента не оказалось.
Что же, из-за этого отказываться от библиотеки? Конечно, нет!

Erlang/OTPMapReduce для начинающих на Erlang'e

Я продолжаю свое погружение в Эрланг. Уже есть хитрый план переписать один из наших сервисов для мониторинга на Эрланге. Мы тут осваиваем облака Windows Azure и Amazon EC2 в качестве платформы для некоторых продуктов и внутренних задач типа QA, поэтому возможность использовать много ядер и машин без переписывания кода выглядить перспективно.

Итак, для начала простой, но реальный пример — есть проект ~2000 файлов. Надо составить список используемых переменных окружения. То есть найти вхождения строк «getenv(...)» и «GetVariable(...)» (это наш wrapper) и выдрать из них параметр.

Задача незамысловатая и давно решается программой на C++, которая даже обход каталогов не делает, а просто вызывает юниксовый «find», генерирующий список файлов по маске, и затем по списку лопатит файлы. На 2000 файлах работает пару секунд в один поток.

Теперь Эрланг. Тут хочется замутить что-нибудь более кучерявое, чем последовательный обход файлов. MapReduce как раз в тему — можно составить список файлов, затем анализ каждого файла делать параллельно (Map), аккумулируя найденных имена переменных, и в конце обработать все полученные входждение (Reduce), в нашем случае просто подсчитать количество вхождения каждой переменной.

RubyRack адаптер для Cowboy — HTTP-сервера на Erlang

Готова предварительная версия адаптера, позволяющего запустить Ruby on Rails или любое другое Rack приложение за веб-сервером на Erlang: github.com/erlyvideo/rack

Адаптер представляет из себя application на Erlang, запускающее несколько воркеров (4 по умолчанию), умеющие пробрасывать запросы из сервера Cowboy к рельсам и возвращать ответы.

Эта схема может понадобиться для того, что бы воспользоваться таким бенефитами веб-сервера erlang, как WebSockets, Comet и просто ради удобной интеграции долгоживущей логики на erlang и рельсового фронтенда.

Установка согласно README в приложении.

Модуль в бета-версии, так что вопросы или сообщения об ошибках приветствуются.

Erlang/OTPExternal Term Format

Если какой-либо программе необходимо передать данные эрланговсому серверу, эти данные предварительно должны быть сериализованы. То есть преобразованы в бинарный вид, так, чтобы эрланг мог потом распаковать их обратно. Обычно это делают с помощью ASN.1, google protobuf, thrift и т.д. Все это без сомнения достойные продукты.

В качестве альтернативного варианта можно рассмотреть использование эрланговского external term format. В исполняемой системе эрланга есть две функции - term_to_binary() и binary_to_term(), которые эффективно и быстро могут запаковать/распаковать любые значения в этот формат, а сам формат хорошо описан в документации — www.erlang.org/doc/apps/erts/erl_ext_dist.html

Как это все работает.

Erlang/OTPИспользование инструмента трассировки событий в Erlang

Вот одна из распространённых проблем многопоточных(concurrent) систем: события возникают постоянно в разных частях программы в разное время, и у вас нет возможности контролировать причину и время их возникновения. Чтобы отследить проблему, мы зачастую можем воспользоваться диаграммой последовательностей. Например, такой (спасибо Wikipedia):



Предназначение данной диаграммы — показать взаимодействие между различными параллельными компонентами системы. В данном примере Fred, Bob, Hank и Renee в ресторане. Каждый может легко нарисовать подобную диаграмму на бумаге. Проблема в том, что наброски на бумаге могут отличаться от того, что происходит во время выполнения вашей программы.

Правда было бы здорово, если бы вы могли строить похожие диаграммы на основе данных трассировки программы автоматически? Что ж, Erlang вам в этом поможет.

ScalaМатериалы митапа scala.by #5 — Pragmatic Erlang

15 октября в Минске, в главном офисе EPAM Systems состоялась очередная встреча беларуских энтузиастов языка Scala и функционального программирования (коммьюнити scala.by).

Встреча была посвящена продолжающему набирать популярность языку, Erlang, послужившему вдохновителем для библиотеки актеров в Scala, и фреймворку для создания распределенных, высконадежных систем, OTP, идеи из которого также все больше и больше просачиваются в мир Scala (см. популярная библиотека Akka, которая в скором времени должна стать часть стандартной поставки Scala).

В качестве приглашенного докладчика и эксперта в области выступал Юрий Жлоба — известная личность в беларуском программерском коммьюнити, специалист в Flash/Flex, Java и Erlang. В своем почти 5-часовом (!) докладе (воистину, марафонская дистанция), Юрий затронул как концептуальные задачи современной разработки масштабируемого программного обеспечения (и пути их решения с помощью Erlang и OTP), так практические вопросы реализации систем с демонстрацией мощи Erlang/OTP во время live-coding сессии.
На встрече велась видеозапись и во время live-coding’a записывался скринкаст — ниже представлены все материалы. В качестве бонуса, Юрий опубликовал текстовую версию первой части выступления, которую вы можете найти в его блоге.

Erlang/OTPПишем модуль для Ejabberd из песочницы

Если вам нужна нестандартная функциональность от XMPP сервера ejabberd, вы не знаете, как это настроить штатными средствами и не нашли подходящего для этого модуля, то можно написать этот модуль самим.

Так я решил, когда начальство объявило войну пустой болтовней в jabber-е, для чего необходимо было запретить некоторым пользователям чатица с другими, но разрешить с третьими. И хотя у меня всё ещё есть смутное подозрение, что это можно настроить с помощью списков доступа, я решил написать модуль, которым мне будет удобно пользоваться. Этот модуль и послужит примером для рассказа.

Erlang/OTPРазработка веб-приложений при помощи Webmachine

Если вы по каким-либо причинам заинтересованы в разработке веб-приложения на Erlang, то у вас возникнет закономерный вопрос, какую из имеющихся технологий для этого использовать: взять один из существующих веб-серверов, таких как YAWS, Mochiweb, Misultin (назову их так, хотя некоторые из них называют себя фреймворком для построения веб-серверов) или воспользоваться чем-то готовым, например Zotonic CMS или Nitrogen.
Задавшись этим вопросом, вы наверняка найдёте этот пост на Stackoverflow, в котором довольно подробно рассмотрены все плюсы и минусы различных подходов.

В данной статье автор попытался раскрыть тему использования Webmachine для создания веб-ресурсов.

Erlang/OTPИспользование контролёров для того, чтобы удержать ErlyBank на плаву

Это четвертая статья в серии «Введение в ОТП». Если вы только что присоединились к нам, рекомендую начать с первой части, в которой говорится о gen_server и закладывается фундамент нашей банковской системы. Если же вы способный ученик, можете взглянуть на готовые к настоящему моменту модули: eb_server.erl, eb_event_manager.erl, eb_withdrawal_handler.erl и eb_atm.erl.

Сценарий: Момент, который нам нравится в банках и банкоматах, заключается в том, что они всегда на том же месте. Используя банкомат, мы можем снять или положить деньги когда захотим, 24 часа в сутки. Или пойти в любое отделение банка, когда оно открыто, зная, что будем иметь полный доступ к нашим финансам. Чтобы гарантировать это, необходимо быть уверенным в том, что наша система автоматизации ErlyBank всегда остается рабочей: процессы должны быть запущены постоянно. ErlyBank поручил нам реализовать эту цель. Стопроцентный uptime! (Или настолько близкий, насколько мы сможем обеспечить)

Результат: Используя контролёр (supervisor) OTP, мы создадим процесс, чья обязанность — следить за запущенными процессами и удостовериться, что они активны.

Erlang/OTPКомпиляция «на ходу» в эрланге

В некоторых случаях бывает удобно скомпилировать определенные части программы во время работы приложения. Например, в мире явы так происходит компиляция веб сервером .jsp страниц в сервлеты. Другими возможными применениями подобной техники являются разные языки шаблонов, регулярные выражения и т.д.

В эрланге транслятор встроен в библиотеку времени исполнения, и позволяет полностью управлять всеми стадиями трансляции.

Как это сделать