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

У меня есть приложение 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 Я пытался прочитать this и следовал по ссылкам, но не очень много понял.

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

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

Ответы [ 2 ]

4 голосов
/ 22 декабря 2011

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

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

Если вы хотите иметь быстрый веб-интерфейс с функциями, подобными Ajaxy / HTML5, то поторопитесь, быстро! и возьмите себя Nitrogen Web Framework . Так как вы уже являетесь программистом Erlang, это будет очень быстро для вас. С помощью Templating вы можете писать шаблоны HTML4.X / HTML5 или использовать Web Page 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-страницу.


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



EDIT
Теперь, то, что вы говорите, на самом деле правда. Найти разработчиков для поддержки это было бы задачей. Тем не менее, Zotonic , как я упоминал ранее, является полноценным (Web) CMS , как Joomla или Word Press e.t.c. С его помощью вы сами можете управлять / поддерживать сайт / приложение.

Однако вы также можете разрабатывать веб-интерфейс с помощью 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на платформах Rails делают запросы JSON и ожидают ответов JSON от бэкэндов Erlang, работающих на Mochiweb.Еще один замечательный RESTful-интерфейс для Erlang Web Back-endов - это Misultin , который даже поддерживает веб-сокеты и иногда считается самой быстрой / или наиболее отзывчивой библиотекой Erlang HTTP:)

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

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

...