[英]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 Framework和Chicago 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 JS或MooTools或prototype js之类的其他JavaScript库将自己的JavaScript编写到Template中,以配合整个功能。 在模板中,您将指出Nitrogen应该在哪里呈现动态生成的HTML元素以及将“ AJaxically”作用于这些元素的JQuery。 在这种情况下,模板仅表示HTML页面。
记住要成为其邮件列表的成员,以寻求更多帮助,并继续在StackOverflow上提问。 欢迎来到Erlang Web开发的世界。 您可能对一些链接感兴趣(
IEEE关于Erlang网站开发的论文 ,
Erlang Web框架 ,
erlydtl-Erlang Django之类的模板实现 ,
ErlyWeb框架
)成功!
您也可以使用任何可用的Web框架在erlang中实现您的前端。 使用erlang RPC在单独的erlang节点中运行前端和后端,以在它们之间进行通信。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.