gpt4 book ai didi

architecture - 使用 OTP/Erlang 作为 Web 应用程序基于组件的架构的一部分

转载 作者:行者123 更新时间:2023-12-04 08:28:28 26 4
gpt4 key购买 nike

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

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

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

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

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

所以我现在的任务是为我的后端 Erlang/OTP 应用程序实现一个通用的前端(通常意味着我有一个典型的用例:访问站点、注册、登录、使用应用程序、获取结果一个漂亮的 ajax'y 网页,注销)。

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

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

我的脑海中浮现出很多问题:Erlang/OTP 和网络框架是否应该使用相同的 PostgreSQL 数据库来共享结果?将计算请求从网络框架发送到 Erlang/OTP 应用程序并将其取回的最佳方法是什么?我如何监督 PostgreSQL 服务器 - 它不在 OTP 的容错范围内?

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

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

附言我试过阅读 this并按照链接进行操作,但不太了解。

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

UPD2:也许我必须更深入地阐述这一点:我还需要前端尽可能可维护。在 Erlang 中做这件事意味着我可能会遇到寻找合适的开发人员来维护它的问题;在 RoR、Django 等中做这件事意味着我可以很容易地找到劳动力来维护前端并发展它。

最佳答案

首先,这里有一个 Erlang PostGreySQL Client: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 网络应用程序。一个非常好的优势是您可以在此技术堆栈背后拥有多个 Erlang 应用程序。 Yaws Web 服务器及其 Appmodsdynamic Content Serving ability (所以 RESTFUL 我可以向你保证),它使我们的 JavaScript 驱动的前端 Web 应用程序具有如此惊人的简单性和美观性,提供来自多个 Erlang 应用程序的服务。

如果您想拥有一个快速的 Web 前端,具有 Ajaxy/HTML5 之类的功能,那么快点,快点!并捕获自己的 Nitrogen Web Framework .既然你已经是一个 Erlang 程序员,这对你来说会很快。使用模板,您可以编写 HTML4.X/HTML5 模板,或使用 Web page Maker/Studio Software为您创建模板。然后,您将向 Nitrogen 展示从哪里进入,使用动态生成 JQuery 将您的 Erlang 后端绑定(bind)到那些漂亮的页面。由你的 Erlang 代码产生的代码。您会发现文档非常简单。 Nitrogen 只是 Erlang 记录的集合,每条记录代表一个 HTML 标签。其他记录用于定义将 POST 回您的 Erlang 应用程序的效果和事件。在 Nitrogen 中开发 Web 漂亮的界面是如此之快。事实上,动态生成的 JQuery代码,您可以将自己的 JavaScript 写入模板以伴随整个功能说,利用另一个 JavaScript 库,如 EXT JS , 或 MooToolsprototype js .在模板中,您将指出 Nitrogen 应在何处呈现动态生成的 HTML 元素以及将“AJaxically”作用于这些元素的 JQuery。在这种情况下,模板仅表示 HTML 页面。

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

编辑
现在,你说的是真的。寻找开发人员来维护它将是一项任务。然而,Zotonic正如我之前提到的,是一个成熟的 (Web) CMS就像 Joomla 或 Word Press 等有了它,您自己就可以实际管理/维护站点/应用程序。
但是,您也可以使用 Django 或 Ruby on Rails 开发 Web 前端,但使用 JSON 格式数据创建安全服务到 Mochiweb从您的 Web 前端。然后,使用 Mochijson2.erl mochiweb 附带了它,您可以解析 JSON 并将其转换为 Erlang 后端中的请求或方法和参数。这将在两个方向上完成,即您向 Erlang 应用程序发出请求,获取返回的结果并将它们呈现为 JSON 数据。 Mochiweb 是一个强大的工具,它可以使用 Service/RESTFul 模型将任何 Erlang 后端与前端的任何 Web 技术连接起来。它的简单和重量轻。它的速度很快,它所需要的只是您将其指向处理 POST、GET、PUT 等 HTTP 请求的方法,它会等待返回的结果。 Mochiweb 已经在很多 Erlang 系统中使用,例如Couch DB (最先进的 NoSQL DBMS 之一,改变了我们理解 Web 和 SOA 系统的方式)以及所有其他系统,例如 Membase Single Server , Big Couch / Cloudant , 等等。你可以看到有人在使用 mochiweb here , then herelastly here .
Django、Twisted、PHP 或 Ruby on Rails 框架发出 JSON 请求并期望来自由 Mochiweb 提供支持的 Erlang 后端的 JSON 响应。 Erlang Web 后端的另一个很棒的 RESTful 接口(interface)是 Misultin ,它甚至支持 Web Sockets,有时被认为是最快/或响应最快的 Erlang HTTP 库:)
根据我的经验,我曾与 PHP 专家、JavaScript 专家等合作过。但是每当我们将 Web 服务器设置为 yaws 时,我们就会发现开发成本更低。与 Service Oriented Model使用来自两个方向的 JSON 请求和响应。在这种情况下,我们不会失去 Erlang 的可用性和容错性,顺便说一句,即使它们隐藏在不同的域子网中,您也可以使用 JSONP 向尽可能多的分布式 Erlang 服务器发出许多请求。所有 JavaScript 和/或 Front-web 框架都支持它。我强烈建议您将 Mochiweb 或 Misultin 放在您的 erlang 后端,并拥有您选择使用 JSON 格式(甚至 XML,您将使用 erlsom 解析,下载它 here)发出请求的任何 Web 框架.我希望你能明白我的建议。成功!!!

关于architecture - 使用 OTP/Erlang 作为 Web 应用程序基于组件的架构的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8597128/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com