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

У меня есть приложение Erlang/OTP, которое выполняет бизнес-логику. Он написан на Erlang в основном для отказоустойчивости, потому что я могу легко перезапустить один из аварийных компонентов системы (наиболее важным требованием является высокая продолжительность работы). Каждый из его компонентов выполняет определенные "параллельные" вычисления.

В результате одного рабочего цикла приложение выдает список значений. Давайте назовем это приложение Erlang/OTP "back-end".

Это приложение Erlang/OTP также будет использовать сервер PostgreSQL для хранения результатов в постоянном хранилище и для хранения дополнительной мета-информации, необходимой для его вычислений (еще не реализовано).

Затем мне нужно добавить внешний интерфейс к этому приложению Erlang/OTP - простое веб-решение, которое может служить веб-пользователю: принять запрос на вычисления от него / нее, попросить серверную часть выполнить вычисления и вернуть пользователю результат из серверной части.

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

Таким образом, моя текущая задача сейчас состоит в том, чтобы реализовать единый интерфейс для моего внутреннего приложения Erlang/OTP (обычно означает, что у меня есть типичный пример использования: посещение сайта, регистрация, вход в систему, использование приложения, получение результата на симпатичная ajax'y выглядящая веб-страница, выход из системы).

С одной стороны, я знаю, что повторное использование кода может сэкономить мне много времени: например, с помощью Ruby on Rails я могу получить аутентификацию пользователя, хранение паролей, интерфейсы ajax и многое другое бесплатно.

С другой стороны, я ничего не знаю о разработке приложения, которое включает в себя серверную часть Erlang/OTP + PostgreSQL db и веб-фреймворк (RoR, Django и т. Д.) В качестве внешнего интерфейса.

У меня возникает множество вопросов: должны ли Erlang/OTP и веб-платформа использовать одну и ту же базу данных PostgreSQL для обмена результатами? Каков наилучший способ отправить запрос на вычисление из веб-платформы в приложение Erlang/OTP и получить его обратно? Как контролировать сервер PostgreSQL - он не защищен отказоустойчивостью OTP?

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


С чего мне начать с этой задачей? Можете ли вы дать мне какой-либо совет или подсказку, какие ресурсы читать?

PS Я пытался прочитать это и следовал по ссылкам, но не очень понял.

UPD: я знаю, что Chicago Boss и другие веб-фреймворки Erlang существуют, но я сомневаюсь, что у любого из них есть такая зрелая среда, активное сообщество и огромная вариабельность различных плагинов и библиотек, таких как, например, Ruby on Rails, Django или любой PHP на основе MVC. Правильно?

UPD2: Может быть, мне нужно уточнить это глубже: мне также нужно, чтобы интерфейс был как можно более удобен в обслуживании. Выполнение этого в Erlang означает, что у меня могут возникнуть проблемы с поиском подходящих разработчиков для поддержки этого; делать это в RoR, Django и т. д. означает, что я легко могу найти рабочую силу для поддержки внешнего интерфейса и его роста.

2 ответа

Решение

Прежде всего, здесь есть клиент Erlang PostGreySQL: https://github.com/wg/epgsql. Другое дело, что вы можете проверить ZOTONIC. Это CMS, написанная на Erlang, но также и веб-фреймворк. Одной из его особенностей является то, что он очень хорошо интегрировал базу данных PostGreySQL, и поэтому все приложения Erlang, стоящие за Zotoniuc, выиграют от этого. Это очень хорошо при разработке MVC или Event-управляемых веб-приложений.

Кроме того, вы можете проверить Nitrogen Web Framework и Chicago Boss, которые также являются веб-фреймворками для веб-приложений Erlang. Я лично разработал веб-приложения Erlang, используя Nitrogen, Yaws и Mnesia как полный комплект. Одним очень приятным преимуществом является то, что за этим технологическим стеком может быть несколько приложений Erlang. Веб-сервер Yaws с его Appmods и способностью динамического обслуживания контента (так что RESTFUL, я могу заверить вас в этом) позволил нашим веб-приложениям на основе JavaScript с поразительной простотой и изяществом предоставлять услуги из нескольких приложений Erlang.

Если вы хотите иметь быстрый веб-интерфейс с функциями, подобными Ajaxy/HTML5, то поторопитесь, быстро! и захватите себя Nitrogen Web Framework. Так как вы уже являетесь программистом Erlang, это будет очень быстро для вас. С помощью Templating вы можете писать шаблоны HTML4.X / HTML5 или использовать веб-страницу Maker/Studio Software для создания шаблонов. Позже вы покажете Nitrogen, куда идти, привязывая ваши Erlang Backends к этим красивым страницам, используя динамически генерируемый код JQuery, вытекающий из вашего кода Erlang.

Вы найдете документацию очень простой. Nitrogen - это просто коллекция записей Erlang, каждая из которых обозначает HTML-тег. Другие записи используются для определения эффектов и событий, которые будут отправлены обратно в ваше приложение Erlang. Разработка прекрасных веб-интерфейсов в Nitrogen происходит очень быстро. Фактически, с помощью динамически генерируемого кода JQuery, вы можете написать свой собственный JavaScript в шаблон, чтобы сопровождать всю функциональность, скажем, используя другую библиотеку JavaScript, такую ​​как EXT JS, или MooTools или прототип js. В этом шаблоне вы укажете, где Nitrogen должен отображать динамически генерируемые HTML-элементы, а также JQuery, который будет "AJaxical" воздействовать на эти элементы. Шаблон в этом случае просто означает HTML-страницу.


Не забудьте стать участником своего списка рассылки, чтобы получить дополнительную помощь, а также задавать дополнительные вопросы здесь, на Stackru. Добро пожаловать в мир веб-разработки Erlang. Несколько ссылок, которые могут вас заинтересовать (
Документ IEEE по веб-разработке в Эрланге,
Erlang Web Framework,
erlydtl - Erlang Django как шаблонная реализация,
ErlyWeb Framework
) Удачи!



РЕДАКТИРОВАТЬ
Теперь то, что вы говорите, на самом деле правда. Найти разработчиков для поддержки это было бы задачей. Однако Zotonic, как я упоминал ранее, является полноценной (Web) CMS, так же как Joomla или Word Press и т. Д. С ее помощью вы сами можете управлять / поддерживать сайт / приложение.

Однако вы также можете разрабатывать веб-интерфейс с помощью Django или Ruby on Rails, но создавать защищенные сервисы, используя JSON-форматированные данные для Mochiweb из своего веб-интерфейса. Затем, используя Mochijson2.erl, поставляемый с mochiweb, вы анализируете JSON и переводите его в запросы или методы и аргументы в вашем Erlang Back-end. Это будет сделано в обоих направлениях, то есть вы будете отправлять запросы приложениям Erlang, получать возвращенные результаты и отображать их как данные JSON.

Mochiweb - это мощный инструмент, который может взаимодействовать с любым интерфейсом Erlang с любой веб-технологией с использованием Service/ RESTFul Model. Это простой и легкий вес. Он быстрый и все, что ему нужно, это указать, какие методы будут обрабатывать HTTP-запросы POST, GET, PUT и т. Д., И он будет ожидать результатов для отправки обратно. Mochiweb использовался во многих системах Erlang, например, Couch DB (одна из самых совершенных СУБД NoSQL, изменяющих наше понимание систем Web и SOA) и всех других системах, таких как Membase Single Server, Big Couch / Cloudant и т. Д. увидеть кого-то, приводящего mochiweb в действие здесь, затем здесь и, наконец, здесь.

Фреймворки Django, Twisted, PHP или Ruby on Rails делают запросы JSON и ожидают ответов JSON от Erlang Back end на основе Mochiweb. Еще один замечательный RESTful-интерфейс для Erlang Web Back- end ов - это Misultin, который даже поддерживает веб-сокеты и иногда опасается, что это самая быстрая / или самая отзывчивая библиотека Erlang HTTP:)

По своему опыту я работал с PHP-гуру, JavaScript-гуру и т. Д., Но мы обнаруживаем, что разработка обходится дешевле, когда мы ставим наш веб-сервер в тупик с сервис-ориентированной моделью, используя JSON-запросы и ответы от обоих направлений. В этом случае мы не теряем в доступности и отказоустойчивости Erlang, и, между прочим, вы можете сделать много запросов к как можно большему количеству распределенных серверов Erlang, даже если они скрыты в разных подсетях доменов, используя JSONP, который поддерживается всеми JavaScript и / или Front-веб-фреймворки. Я настоятельно советую вам поставить Mochiweb или Misultin перед своим Erlang Backend и иметь какую-либо веб-среду, которую вы выбираете для отправки запросов, используя формат JSON (или даже XML, который вы могли бы проанализировать с помощью erlsom, загрузите его здесь). Я надеюсь, что вы получите то, что я предлагаю. Удачи!!!

Вы также можете реализовать свой интерфейс в Erlang, используя любой доступный веб-фреймворк. Запустите front-end и back-end в отдельных узлах erlang, используя erlang RPC для связи между ними.

Другие вопросы по тегам