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



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

作为一个工作循环的结果,应用程序产生一个值列表。让我们把这个Erlang/OTP应用程序称为"后端"。

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

接下来,我需要为这个Erlang/OTP应用程序添加一个前端——一个简单的基于web的解决方案,它可以为web用户服务:接受他/她的计算请求,要求后端进行计算,并将后端结果返回给用户。

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

所以我现在的任务是为我的后端Erlang/OTP应用程序实现一个通用的前端(通用的意思是我有一个典型的用例:访问网站,注册,登录,使用应用程序,在一个漂亮的ajax看起来的网页上得到结果,注销)。

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

另一方面,我不知道如何设计一个由Erlang/OTP + PostgreSQL数据库服务器后端和web框架(RoR, Django等)作为前端的应用程序。

我想到了很多问题:Erlang/OTP和web-framework应该使用相同的PostgreSQL数据库来共享结果吗?从web框架向Erlang/OTP应用程序发送计算请求并将其取回的最佳方式是什么?我如何监督PostgreSQL服务器-它不包括在OTP的容错?一般来说,我有一些异构软件组件,我想从它们构建一个工作系统("主要"组件是Erlang/OTP应用程序)。


我应该从哪里开始这个任务?你能给我一些建议或提示哪些资源可以阅读吗?

注:我试着阅读这篇文章,并按照链接,但没有理解太多。

乌利希期刊指南:我知道Chicago Boss和其他Erlang web框架确实存在,但我怀疑它们中有没有一个拥有如此成熟的环境、充满活力的社区和不同插件和库的巨大可变性,比如Ruby on Rails、Django或任何基于php的MVC框架。对吧?

UPD2:也许我需要对此进行更深入的阐述:我还需要前端尽可能地易于维护。在Erlang中这样做意味着我可能会面临找到合适的开发人员来维护它的问题;在RoR、Django等中这样做意味着我可以很容易地找到维护和发展前端的人力。

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

另外,你可能想看看Nitrogen Web FrameworkChicago Boss,它们也是Erlang Web应用程序的Web框架。我个人使用氮气、Yaws和Mnesia开发了Erlang web应用程序。一个非常好的优点是,在这个技术堆栈背后可以有许多Erlang应用程序。Yaws web Server与它的Appmods动态内容服务能力(所以RESTFUL我可以向你保证),它赋予我们的JavaScript驱动的前端web应用程序如此惊人的简单和美丽,提供服务从一堆几个Erlang应用程序

。如果你想有一个快速的Web前端,与ajax/HTML5类似的功能,那么快,快!并抓住你自己的氮气Web框架。因为你已经是一个Erlang程序员了,所以这对你来说太快了。使用template,您可以编写HTML4。X/HTML5模板,或使用网页制作/工作室软件为您创建模板。然后,您将向氮气展示从哪里进来,使用动态生成的JQuery代码将您的Erlang后端绑定到那些漂亮的页面。

您会发现文档非常简单。氮气只是Erlang记录的集合,每个记录代表一个HTML标签。其他记录用于定义将POST回您的Erlang应用程序的效果和事件。在氮气中开发Web漂亮的界面是如此之快。事实上,使用动态生成的JQuery代码,你可以将自己的JavaScript编写到模板中,以配合整个功能,比如使用另一个JavaScript库,如EXT JS,或MooToolsprototype JS。在模板中,你将指出氮气应该在哪里呈现动态生成的HTML元素,以及JQuery将"ajax"地作用于这些元素。在这种情况下,模板只是指一个HTML页面。


记得成为其邮件列表的成员,以获得更多的帮助,并继续在StackOverflow上提出更多的问题。欢迎来到Erlang Web开发的世界。一些你可能感兴趣的链接(
IEEE Paper on Web Development in Erlang
Erlang Web Framework
erlydtl - Erlang Django like template Implementation
ErlyWeb Framework
) Success !



EDIT
现在,你说的是真的。寻找开发人员来维护它将是一项任务。然而,正如我之前提到的,Zotonic是一个完全成熟的(Web)CMS,就像Joomla或Word Press等一样。有了它,你自己可以实际管理/维护网站/应用程序。

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

Mochiweb是一个强大的工具,可以使用Service/RESTFul模型将任何Erlang后端与任何Web技术连接起来。它简单,重量轻。它很快,它所需要的只是你指向哪个方法来处理POST, GET, PUT等HTTP请求,它会等待结果发送回来。Mochiweb已经在很多Erlang系统中使用,例如Couch DB(最先进的NoSQL DBMS之一,改变了我们理解Web和SOA系统的方式)和所有其他系统,如Membase Single ServerBig Couch/Cloudant等。你可以看到有人把Mochiweb应用在这里然后这里最后这里

Django、Twisted、PHP或Ruby on Rails框架发出JSON请求,并期望从由Mochiweb支持的Erlang后端得到JSON响应。Erlang Web后端的另一个很棒的RESTful接口是Misultin,它甚至支持Web Sockets,有时甚至被担心是最快/或响应最快的Erlang HTTP库:)

根据我的经验,我曾与PHP大师,JavaScript大师等人合作过,但我们发现每当我们将Web服务器作为yws与面向服务的模型一起使用JSON请求和来自两个方向的响应时,开发成本更低。在这种情况下,我们不会失去Erlang的可用性和容错性,顺便说一下,你可以通过使用JSONP向尽可能多的分布式Erlang服务器发出请求,即使它们隐藏在不同的域的子网络中,所有JavaScript和/或Front-web框架都支持。我强烈建议你把Mochiweb或Misultin放在你的erlang后端前面,让你选择的任何Web框架使用JSON格式(甚至XML,你将使用erlsom解析,下载它在这里)。我希望你明白我的意思。成功! !

你可以用erlang实现你的前端,也可以使用任何可用的web框架。使用erlang RPC在不同的erlang节点上运行前端和后端,以实现它们之间的通信。

最新更新