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

ska*_*tek 8 architecture erlang frontend backend erlang-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应用程序).


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

PS我试图阅读这个并按照链接,但不太了解.

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

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

Muz*_*hua 4

首先,这里有一个 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 服务器具有Appmods动态内容服务能力(因此我可以向您保证, RESTFUL),它为我们的 JavaScript 驱动前端 Web 应用程序提供了如此惊人的简单性和美观性,并提供来自多个 Erlang 应用程序的服务。

如果你想拥有一个快速的 Web 前端,具有类似 Ajaxy/HTML5 的功能,那么快点,快点!并获取Nitrogen Web 框架。由于您已经是一名 Erlang 程序员,所以这对您来说会很快。通过模板,您可以编写 HTML4.X / HTML5 模板,或使用 网页制作器/Studio 软件为您创建模板。然后,稍后,您将向 Nitrogen 展示如何发挥作用,使用由您的 Erlang 代码生成的动态生成的JQuery代码将您的 Erlang 后端绑定到那些漂亮的页面。

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


请记住成为其邮件列表的成员以寻求更多帮助,并在 StackOverflow 上继续提出任何更多问题。欢迎来到 Erlang Web 开发的世界。您可能感兴趣的一些链接(
IEEE Paper on Web Development in Erlang
Erlang Web Framework
erlydtl-Erlang Django like Templated Implement
ErlyWeb Framework
) 成功!



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

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

Mochiweb 是一个功能强大的工具,可以使用服务/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 服务器作为面向服务的模型使用 JSON 请求和来自两个方向的响应时,我们发现开发成本更低。在这种情况下,我们不会失去 Erlang 的可用性和容错能力,顺便说一句,您可以通过使用所有 JavaScript 和/或支持的JSONP尽可能多的分布式 Erlang 服务器发出许多请求,即使它们隐藏在域的不同子网中。或前端网络框架。我强烈建议你将 Mochiweb 或 Misultin 放在你的 erlang 后端前面,并使用你选择的 Web 框架来使用 JSON 格式(甚至是 XML,你可以使用erlsom解析它)发出请求,在这里下载)。我希望你能明白我的建议。成功!!!