繁体   English   中英

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

[英]Using OTP/Erlang as a part of the component-based architecture of a web application

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

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

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

接下来,我需要在此Erlang / OTP应用程序中添加一个前端-一个简单的基于Web的解决方案,可以为Web用户服务:接受他/她的计算请求,请后端进行计算,然后向用户提供后端的结果。

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

因此,我现在的当前任务是为我的后端Erlang / OTP应用程序实现一个通用前端(这通常意味着我有一个典型的用例:访问该站点,注册,登录,使用该应用程序并获得结果)美观的网页,退出)。

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

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

我想到了很多问题:Erlang / OTP和Web框架是否应该使用相同的PostgreSQL数据库共享结果? 将计算请求从网络框架发送到Erlang / OTP应用程序并将其取回的最佳方法是什么? 如何监督PostgreSQL服务器-OTP的容错能力未涵盖该服务器?

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


我应该从哪里开始这项任务? 您能给我任何建议或提示来阅读哪些资源吗?

PS我试图阅读和遵循的联系,但并没有多少了解。

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

UPD2:也许我必须更深入地阐述:我还需要前端尽可能地易于维护。 在Erlang中进行操作意味着我可能会遇到寻找合适的开发人员进行维护的问题。 在RoR,Django等中执行此操作意味着我可以轻松地找到工作人员来维护前端并进行扩展。

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

另外,您可能想查看Nitrogen Web FrameworkChicago Boss ,它们也是Erlang Web应用程序的Web框架。 我个人使用Nitrogen,Yaws和Mnesia作为整套工具开发了Erlang Web应用程序。 一个非常不错的好处是,您可以在此技术堆栈后面拥有许多Erlang应用程序。 Yaws Web Server凭借其Appmod动态内容服务能力RESTFUL,我可以向您保证),以如此惊人的简单性和美感为我们的JavaScript驱动的前端Web应用程序提供了强大功能,并提供了多个Erlang应用程序提供的服务。

如果您想拥有Ajaxy / HTML5之类的快速Web Front End,那就快点! 并掌握Nitrogen Web框架 由于您已经是Erlang程序员,因此对您来说是如此之快。 使用模板,您可以编写HTML4.X / HTML5模板,或使用网页Maker / Studio软件为您创建模板。 然后,稍后,您将显示Nitrogen的输入位置,并使用由您的Erlang代码产生的动态生成的JQuery代码将您的Erlang后端绑定到这些漂亮的页面。

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


记住要成为其邮件列表的成员,以寻求更多帮助,并继续在StackOverflow上提问。 欢迎来到Erlang Web开发的世界。 您可能对一些链接感兴趣(
IEEE关于Erlang网站开发的论文
Erlang Web框架
erlydtl-Erlang Django之类的模板实现
ErlyWeb框架
)成功!



编辑
现在,您所说的实际上是对的。 寻找开发人员进行维护将是一项任务。 但是,正如我前面提到的, Zotonic是成熟的(Web) CMS ,就像Joomla或Word Press等一样。有了它,您实际上可以管理/维护站点/应用程序。

但是,您也可以使用Django或Ruby on Rails开发Web前端,但可以使用JSON格式的数据从Web前端将安全服务创建到Mochiweb 然后,使用mochiweb随附的Mochijson2.erl ,解析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响应。 Misultin是Erlang Web后端的另一个很棒的RESTful接口,它甚至支持Web套接字,有时被认为是最快/响应最快的Erlang HTTP库:)

根据我的经验,我曾经使用过PHP大师,JavaScript大师等,但是每当将Web服务器作为带有JSON以及来自两个方向的响应的面向服务模型的 Yaws时 ,我们发现开发成本都会降低。 在这种情况下,我们不会失去Erlang的可用性和容错能力,而且,即使使用了所有JavaScript和/都支持的JSONP ,即使它们隐藏在域的不同子网中,您也可以向尽可能多的分布式Erlang服务器发出许多请求。或Front-web框架。 我强烈建议您将Mochiweb或Misultin放在erlang后端的前面,并选择使用JSON格式(甚至XML,您可以使用erlsom进行解析,请在此处下载)进行请求的Web框架。 希望您能得到建议。 成功!!!

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM