使用OTP / Erlang作为Web应用程序的基于组件的体系结构的一部分

时间:2011-12-21 22:15:24

标签: architecture erlang frontend backend otp

我有一个Erlang / OTP应用程序,它可以执行一些业务逻辑。它是用Erlang编写的,主要用于容错,因为我可以轻松地重启系统中一个崩溃的组件(高正常运行时间是最重要的要求)。 它的每个组件都进行某种特定的“并行”计算。

作为一个工作周期的结果,应用程序生成一个值列表。让我们称这个Erlang / OTP应用程序为“后端”。

此Erlang / OTP应用程序还将使用PostgreSQL服务器将结果存储在持久存储中,并存储其计算所需的其他元信息(尚未实现)。

接下来我需要为这个Erlang / OTP应用程序添加一个前端 - 一个简单的基于Web的解决方案,可以为Web用户提供服务:接受他/她的计算请求,请后端做计算并让用户从后端返回结果。

没有可扩展性要求,我认为每天最大用户数不能超过1000个。

所以我现在的任务是为我的后端Erlang / OTP应用程序实现一个通用的前端(常见的意思是我有一个典型的用例:访问该站点,注册,登录,使用该应用程序,获取一个漂亮的ajax'y看起来网页的结果,退出)。

一方面,我知道代码重用可以节省很多时间:例如使用Ruby on Rails,我可以免费获得用户身份验证,密码存储,ajax接口和许多其他东西。

另一方面,我对设计一个包含Erlang / OTP + PostgreSQL数据库服务器后端和Web框架(RoR,Django等)作为前端的应用程序一无所知。

我脑子里浮现出许多问题:Erlang / OTP和Web框架是否应该使用相同的PostgreSQL数据库来共享结果?将计算请求从Web框架发送到Erlang / OTP应用程序并将其取回的最佳方法是什么?我如何监督PostgreSQL服务器 - 它不受OTP容错的保护?

一般来说,我有一些异构软件组件,我想从它们构建一个工作系统('主要'组件是Erlang / OTP应用程序)。


我应该从这个任务开始?你能给我任何建议或提示要阅读的资源吗?

P.S。我试过阅读this并按照链接进行操作,但不太了解。

UPD:我知道Chicago Boss和其他Erlang网络框架确实存在,但我怀疑他们中的任何一个都有如此成熟的环境,充满活力的社区以及不同插件和库的巨大变化例如Ruby on Rails,Django或任何基于PHP的MVC框架。对?

UPD2:也许我必须更深入地阐述这一点:我还需要前端尽可能保持可维护性。在Erlang中执行它意味着我可能在找到合适的开发人员维护它时遇到问题;在RoR,Django等中进行操作意味着我可以轻松找到维持前端并增长的工作力量。

2 个答案:

答案 0 :(得分:4)

首先,这里有一个Erlang PostGreySQL客户端: https://github.com/wg/epgsql 。另一件事是你可能想看看 ZOTONIC 。它是用Erlang编写的CMS,但它也是一个Web框架。它的一个特点是它已经很好地集成了PostGreySQL数据库,因此Zotoniuc背后的所有Erlang应用程序都将从中受益。在开发MVC或事件驱动的Web应用程序时非常好。

另外,您可以查看 Nitrogen Web Framework Chicago Boss ,它们也是Erlang Web应用的Web框架。我亲自使用氮气,雅司和Mnesia开发了Erlang网络应用程序。一个非常好的优点是,您可以在此技术堆栈后面拥有多个Erlang应用程序。使用 Appmods dynamic Content Serving ability (所以 RESTFUL 向网络服务器yaws我可以向您保证)它使我们的JavaScript驱动前端Web应用程序具有如此惊人的简洁性和美感,从一系列Erlang应用程序中提供服务。

如果你想拥有一个快速的Web前端,具有类似Ajaxy / HTML5的功能,那么快点,快点! Nitrogen Web Framework 抓住你自己。由于您已经是Erlang程序员,因此对您来说这将是如此之快。使用模板,您可以编写HTML4.X / HTML5模板,或使用 Web page Maker/Studio Software 为您创建模板。然后,您将显示氮气进入的位置,使用动态生成的 JQuery 您的Erlang代码产生的代码将Erlang后端绑定到那些不错的页面上。

您会发现文档非常简单。氮只是Erlang Records的集合,每个记录代表一个HTML标记。其他记录用于定义将POST回Erlang应用程序的效果和事件。在氮气中开发Web漂亮的界面是如此之快。事实上,使用动态生成的 JQuery 代码,您可以将自己的JavaScript编写到模板中以配合整个功能,例如,使用另一个JavaScript库,如 {{3} } ,或 EXT JS MooTools 。在模板中,您将指出氮气应该呈现动态生成的HTML元素以及JQuery的位置,这将是#Aax; AJaxically"按照这些要素行事。在这种情况下,模板仅仅意味着HTML页面。


请记住成为其邮件列表的成员以寻求更多帮助,并在StackOverflow上继续询问更多问题。欢迎来到Erlang Web Development的世界。您可能感兴趣的几个链接(
prototype js
IEEE Paper on Web Development in Erlang
Erlang Web Framework
erlydtl - Erlang Django like Templating Implementation
)成功!



修改
现在,你说的是真的。寻找开发人员来维护它将是一项任务。但是,正如我之前提到的ErlyWeb Framework是完全成熟的(Web)Zotonic,就像Joomla或Word Press e.t.c.有了它,您自己可以实际管理/维护站点/应用程序。

但是,您也可以使用Django或Ruby on Rails开发Web前端,但是使用JSON格式化数据从Web前端创建 CMS 的安全服务。然后,使用mochiweb附带的Mochiweb,解析JSON并将其转换为Erlang后端中的请求或方法和参数。这将在两个方向上完成,即您向Erlang应用程序发出请求,获取返回的结果并将它们呈现为JSON数据。

Mochiweb是可以将任何Erlang Back End与任何Web连接的强大工具使用Service / RESTFul模型在前端的技术。它简单轻便。它的速度快,而且只需要指出哪些方法可以处理POST,GET,PUT e.t.c HTTP请求,它会等待发回的结果。 Mochiweb已被用于很多Erlang系统,例如Mochijson2.erl(最先进的NoSQL DBMS改变我们理解Web和SOA系统的方式之一)和所有其他系统,例如 Couch DB {{3 }} 等你可以看到有人把mochiweb付诸行动 Membase Single Server Big Couch / Cloudant here

Django,Twisted,PHP或Ruby on Rails框架发出JSON请求,并期望来自Erlang后端的JSON响应由Mochiweb提供支持。 Erlang Web后端的另一个出色的RESTful接口是then here,它甚至支持Web套接字,有时候可能是最快/响应最快的Erlang HTTP库:)

根据我的经验,我曾与PHP大师,JavaScript大师e.t.c合作。但是,只要我们将Web服务器lastly hereMisultin一起使用JSON请求和来自两个方向的响应,我们就会发现开发更便宜。在这种情况下,我们不会失去Erlang的可用性和容错能力,顺便说一下,即使使用yaws隐藏在不同的子域网中,您也可以向尽可能多的分布式Erlang服务器发出许多请求。所有JavaScript和/或Front-web框架都支持它。我强烈建议你把Mochiweb或Misultin放在你的erlang后端前面,并选择你选择哪个Web框架来使用JSON格式(甚至是XML,你可以使用 Service Oriented Model ,下载JSONP)。我希望你能得到我的建议。成功!!!

答案 1 :(得分:1)

您可以使用任何可用的web framework在erlang中实现您的前端。使用erlang RPC在单独的erlang节点中运行前端和后端,以便在它们之间进行通信。