将OTP/Erlang作为Web应用程序组件化架构的一部分使用

8
我有一个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框架应该使用同一个PostgreSQL数据库来共享结果吗?从Web框架向Erlang/OTP应用程序发送计算请求并将其返回的最佳方法是什么?我如何监控PostgreSQL服务器 - 它没有被OTP的容错性所覆盖?
总的来说,我有几个异构软件组件,我想从它们中建立一个工作系统("主要"组件是Erlang/OTP应用程序)。

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

P.S. 我尝试阅读了this并跟随链接,但并没有理解太多。

更新:我知道Chicago Boss和其他Erlang Web框架存在,但我怀疑它们是否有像Ruby on Rails、Django或任何基于PHP的MVC框架那样成熟的环境、充满活力的社区以及不同插件和库的巨大可变性。对吧?

更新2:也许我需要更深入地阐述这一点:我还需要前端尽可能易于维护。使用Erlang意味着我可能会面临找到正确的开发人员来维护它的问题;而使用RoR,Django等则意味着我可以轻松找到维护前端和扩展其功能的劳动力。


我也编辑了我的答案。请查看答案更新。谢谢。 - Muzaaya Joshua
2个回答

4

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

此外,你可能还想检查一下 Nitrogen Web FrameworkChicago Boss,它们也是 Erlang Web 应用程序的 Web 框架。我个人使用 Nitrogen、Yaws 和 Mnesia 作为完整的设置开发过 Erlang Web 应用程序。一个非常好的优势是你可以在这个技术栈后面有许多 Erlang 应用程序。Yaws Web 服务器具有其 Appmods动态内容服务能力(如此 RESTFUL 我可以向你保证),它赋予了我们的 JavaScript 驱动前端 Web 应用程序如此惊人的简单和美观,提供了来自一堆几个 Erlang 应用程序的服务。
如果你想拥有一个快速的Web前端,并具有类似Ajaxy/HTML5的功能,那么赶快行动起来,获取Nitrogen Web Framework。由于你已经是Erlang程序员,这对你来说将非常快速。通过模板化,你可以编写HTML4.X/HTML5模板,或使用Web page Maker/Studio Software创建模板。然后,你将向Nitrogen展示哪些页面绑定到Erlang后端,使用从你的Erlang代码生成的动态生成的JQuery代码。

你会发现文档非常简单。Nitrogen只是一组Erlang记录,每个记录代表一个HTML标记。其他记录用于定义将被POST回你的Erlang应用程序中的效果和事件。在Nitrogen中开发美丽的Web界面非常快速。事实上,借助动态生成的JQuery代码,你可以编写自己的JavaScript代码,以配合整个功能,比如使用另一个JavaScript库,如EXT JSMooToolsprototype js。在模板中,你需要指出Nitrogen应该呈现动态生成的HTML元素以及JQuery,这些元素将"AJaxically"作用于这些元素。在这种情况下,模板只是指一个HTML页面。
记得成为邮件列表的成员,以获得更多帮助并在StackOverflow上继续提问。欢迎来到Erlang Web开发的世界。以下是您可能感兴趣的一些链接(
Erlang Web开发IEEE论文
Erlang Web框架
erlydtl - 类似于Django的Erlang模板实现
ErlyWeb框架



编辑
现在,你说的是真的。找到开发人员来维护它将是一项任务。然而,正如我之前提到的{{link5:Zotonic}},它是一个完整的(Web){{link6:CMS}},就像Joomla或Word Press等一样。使用它,您自己可以实际管理/维护站点/应用程序。

但是,您还可以使用Django、Ruby on Rails等开发Web前端,但是使用JSON格式数据创建安全服务来将请求发送到Mochiweb,然后使用随Mochiweb一起提供的{{link8:Mochijson2.erl}}解析JSON并将其转换为Erlang后端中的请求或方法和参数。这将在两个方向上完成,即您发出请求到Erlang应用程序,获取返回的结果并将其呈现为JSON数据。

Mochiweb是一个强大的工具,可以使用服务/RESTFul模型将任何Erlang后端与任何Web技术接口。它简单、轻巧、快速,只需要您指向哪些方法来处理POST、GET、PUT等HTTP请求,并等待结果进行发送。 Mochiweb已在许多Erlang系统中使用,例如{{link9:Couch DB}}(最先进的NoSQL DBMS之一,正在改变我们对Web和SOA系统的理解)以及所有其他系统,例如Membase Single ServerBig Couch / Cloudant等。您可以在此处、{{link13:然后在此处}}和最后在此处看到有人将mochiweb投入实际运用。

Django、Twisted、PHP或Ruby on Rails框架从由Mochiweb驱动的Erlang后端发出JSON请求并期望JSON响应。另一个用于Erlang Web后端的RESTful接口是{{link15:Misultin}},它甚至支持Web Sockets,有时被认为是最快/最响应的Erlang HTTP库 :)

在我的经验中,我曾与PHP大师、JavaScript大师等合作,但是我们发现,只要我们将Web服务器作为{{link16:yaws}}与使用JSON请求和响应的面向服务的模型结合使用,开发就会更便宜。在这种情况下,我们不会失去Erlang的可用性和容错性,顺便说一句,即使它们隐藏在不同的域的子网中,您也可以向许多分布式Erlang服务器发出许多请求,使用{{link18:JSONP}}(由所有JavaScript和/或前端框架支持)。我强烈建议您将Mochiweb或Misultin放在Erlang后端的前面,并使用JSON格式(甚至是XML,您可以使用erlsom解析它,从这里下载它)进行请求,无论您选择哪个Web框架。我希望您能理解我的建议。成功!


你的回答编辑得真好!你能否给我提供一些资源,让我可以了解更多关于“使用JSON格式数据来保护Mochiweb服务”的安全服务呢?我知道Mochiweb是什么,但我从未听说过与Mochiweb相关的安全服务。 - skanatek

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接