27

我一直在查看Nitrogen 项目,它应该是 Erlang 最成熟的 Web 开发框架。

Erlang,作为一门语言,令人印象深刻。然而,关于 Nitrogen,我不太热衷于使用 Erlang 相当不常见的语法(除非你是 PROLOG 中的本地人)来构建 UI。

与Django 或 Rails等其他主流Web 框架相比,您对它有何经验?

4

4 回答 4

31

到目前为止,我对 Nitrogen 所做的很少,但几个月来我一直在关注邮件列表,所以我想我有一些有用的东西要说。

对于您对 Erlang 和 Nitrogen 框架的语法的担忧,我认为这听起来像是纯粹的不熟悉,而不是不适合。客观地说,HTML 并不是一门漂亮的语言,而且它有很多怪癖。你现在已经习惯了,所以看起来并没有那么糟糕。给 Nitrogen/Erlang 一个机会,你可能会发现你很快就会习惯它。

对于您与其他语言和框架进行比较的问题,我想说最大的区别在于,使用 Nitrogen,整个网站都直接由 Erlang 运行时提供服务。Ruby on Rails 有这样的模式,但它只用于测试。许多其他框架甚至不提供在单个长时间运行的进程中运行所有内容的选项。

在单个长时间运行的进程中运行整个 Web 应用程序及其底层基础架构对站点的运行方式具有重大影响:

  • 使用 Apache,每 N 个连接(其中 N=500 左右)每个子节点都会被杀死,并且您不能说给定子节点是否总是处理给定客户端的所有请求。由于 HTTP 是无状态的,但 Web 应用程序几乎总是需要一些客户端状态,因此 Apache 子节点必须重建其客户端状态视图,作为处理新连接的一部分。默认情况下,这意味着返回磁盘以获取有关该客户端存储的持久数据。有诸如memcached之类的替代方案,但它们并未内置到 LAMP 类型堆栈的核心中。使用 Erlang,没有任何东西会定期被杀死,并且 Erlang 提供了标准工具,例如 Mnesia,它提供了磁盘支持的内存数据库。

    顺便说一句,如果您熟悉nginx,它的构建原理与 Erlang 相同,并且出于相同的原因它很快。nginx 和运行 web 服务器的 Erlang 实例之间的主要区别在于 nginx 不是编程环境,因此它仍然需要将大量处理委托给外部代码。这意味着它与 Apache 共享相同的 IPC 和持久状态问题。

  • 因为运行时持续保持运行并且是一个功能齐全的编程环境,所以您可以在 Erlang 中构建系统的更多部分,而不是使用捆绑在一起的 LAMP 类型堆栈。这放大了上述好处。系统的各个部分可以通过消息传递和 Mnesia 而不是重量级的 IPC 和 MySQL 进行协调,并且所有部分都保持正常运行并持续运行,从而减少耗时的状态重建。

  • 十几个访问持久客户端状态数据存储的 Apache 子节点是一个基于锁的毛球。这些框架都透明地为您处理锁定等问题,但它们无法隐藏的是正确完成所有这些操作所需的时间。

    Erlang 是一种不纯的函数式语言,它暗示但不要求数据纯洁;它在构建时也考虑到了多处理,明确了运行时设计的核心。这两个事实意味着您不太可能花时间等待基于 Erlang 的服务器中的锁,而不是天真地构建在其他框架之一上的服务器。当然可以优化其他系统中的锁定延迟,但这真的是您想要做的吗?您是否想成为第 100 支必须学习如何在服务流行后优化其 Web 堆栈的团队,还是宁愿将这一切都交给工具来完成,这样您就可以把时间花在做其他人还没有做过的事情上?

于 2010-05-24T23:56:44.380 回答
6

我也曾经担心过笨重的 Erlang 语法。我已经构建了几个工具来减轻日常 Web 编程的烦恼,也许你会发现其中一个或两个都有帮助:

  • ErlyDTL是 Django 模板语言的 Erlang 实现;它在 Nitrogen 中不可用,但在其他框架中可用,例如 Zotonic、Erlang Web、BeepBeep 和 Chicago Boss

  • Chicago Boss是一个全栈 Erlang 框架,它生成了大量代码,因此您可以使用函数调用访问数据字段,而不是 Erlang 相当冗长的记录语法(例如Person:name(),代替Person#person.name

请注意,Nitrogen 不包含数据库层,因此它无法与 Rails 或 Django 真正相提并论。要全面比较数据库驱动的框架,请查看我对 StackOverflow 问题的回答:

https://stackoverflow.com/questions/1822518/current-state-of-erlang-web-development-frameworks-template-languages/2898271#2898271

于 2010-05-25T04:08:38.767 回答
4

如果我是你,我会检查Webmachine 。它非常简单,快速,并且界面由您决定。

于 2010-05-25T18:06:31.663 回答
3

Erlang Web也应该被认为是成熟的。它是一个 MVC 框架,而 Nitrogen 更基于事件。这是一个偏好问题。

除了Webmachine,我没有用过这里提到的其他工具,我认为它是一个很棒的工具,但它不像其他工具那样是一个Web框架。它作为 HTTP 处理器,非常适合构建 restful 接口。

我还建议你给 Erlang 语法一个机会。Erlang 是我最喜欢使用的语言之一。

于 2010-05-27T15:27:31.580 回答