首页 文章

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

提问于
浏览
8

我有一个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应用程序) .


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

附:我试过阅读this并按照链接,但不太了解 .

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

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

2 回答

  • 1

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

    此外,您可能需要查看 Nitrogen Web FrameworkChicago Boss ,它们也是Erlang Web应用程序的Web框架 . 我亲自使用氮气,雅司和Mnesia开发了Erlang网络应用程序 . 一个非常好的优点是,您可以在此技术堆栈后面拥有多个Erlang应用程序 . Yaws web Server及其 Appmodsdynamic Content Serving ability (所以 RESTFUL 我可以向您保证),它使我们的JavaScript驱动前端Web应用程序具有如此惊人的简洁性和美感,从一些Erlang应用程序中提供服务 .

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

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

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


    EDIT
    现在,你所说的实际上是真的 . 寻找开发人员来维护它将是一项任务 . 但是,正如我前面提到的那样,Zotonic是一个完整的(Web)CMS,就像Joomla或Word Press e.t.c.有了它,您自己可以实际管理/维护站点/应用程序 .

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

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

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

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

  • 4

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

相关问题