谈到并发处理能力时,我非常喜欢这些工具。
Erlang/OTP看起来更加稳定,但需要更多的学习和深入了解函数式语言范式。而且,当涉及到多核CPU时,Erlang/OTP似乎做得更好(如果我错了请指出)。
但我该选择哪一个呢?从短期和长期角度来看,哪个更好呢?
我的目标是学习一种工具,使我能够更轻松地在高负载下扩展Web项目,比传统语言更容易实现这一点。
谈到并发处理能力时,我非常喜欢这些工具。
Erlang/OTP看起来更加稳定,但需要更多的学习和深入了解函数式语言范式。而且,当涉及到多核CPU时,Erlang/OTP似乎做得更好(如果我错了请指出)。
但我该选择哪一个呢?从短期和长期角度来看,哪个更好呢?
我的目标是学习一种工具,使我能够更轻松地在高负载下扩展Web项目,比传统语言更容易实现这一点。
我建议尝试使用Erlang。虽然学习曲线比较陡峭,但是既然你在学习一门函数式编程语言,就应该从中获得更多的收益。此外,Erlang是专门设计用来创建可靠、高并发系统的语言,所以你也将同时学到很多有关创建高度可伸缩服务的知识。
虽然我不能代表Erlang,但有一些关于Node的事情还没有被提到:
在Yahoo博客上,Ryan Dahl是实际编写Node的人。你可以查看视频,我认为这将有助于更好地了解Node的现状和未来方向。
请记住,Node仍处于后期开发阶段,因此经历了许多变化——这些变化可能会破坏早期的代码。然而,据说它已经达到了一个可以预期API不会再太多改变的水平。所以,如果你正在寻找一些有趣的东西,我认为Node是一个很好的选择。
我是一名长期使用Erlang编程的程序员,这个问题促使我开始了解node.js。它看起来相当不错。
似乎需要生成多个进程才能利用多核心。但我没有看到关于设置处理器亲和性的内容。在Linux上可以使用taskset,但应该将其参数化并在程序中设置。
我还注意到平台支持可能稍微弱一些。具体而言,看起来您需要在Cygwin下运行以获得Windows支持。
看起来不错。
现在Node.js已经原生支持Windows。
我正在考虑与你一样的两个选择,gotts,用于多个项目。
到目前为止,我想出的最好方法来决定在给定项目中它们之间的选择是是否需要使用Javascript。 我正在寻找要迁移的一个现有系统已经使用Javascript编写,因此它的下一个版本很可能会使用node.js完成。 其他项目将使用某个Erlang Web框架,因为没有现有的代码库可供迁移。
另一个考虑因素是,Erlang不仅可以扩展到多个核心,而且可以扩展到整个数据中心。 我没有看到node.js中内置的机制,可以让我发送消息给另一个JS进程,而不必关心它在哪台机器上,但这已经内置在Erlang的最低层中了。 如果您的问题不足以需要多台机器或不需要多个协作进程,则这种优势不太重要,因此您应该忽略它。
Erlang确实是一个深入研究的领域。我建议您在开始构建Web应用程序之前,先编写一个独立的函数式程序。如果您已经熟悉JavaScript,那么更容易的第一步是尝试以更函数式的风格编程JS。如果您使用jQuery或Prototype,则已经开始了这条道路。尝试在纯函数式编程中在Erlang或其类似语言(Haskell、F#、Scala等)和函数式JS之间跳转。尽管我个人更喜欢Erlang,但我承认我对JavaScript有一点偏见。我的建议是您评估以下几个方面:
Erlang具有真正精细的并发性和网络透明的并行分布式系统。根据项目的实际情况,这样的系统的成熟实现的可用性可能会超过学习新语言方面的任何问题。还有另外两种运行在Erlang VM上的语言可以使用,类似于Ruby / Python的Reia和Lisp-Flavored Erlang。
另一个选择是同时使用两种语言,特别是将Erlang用作“中心”。我不确定Node.js是否有外部函数接口系统,但如果有的话,Erlang有C库可用于外部进程与系统进行接口,就像任何其他Erlang进程一样。在与Erlang相同的VM上还有一种语言-> Elixir
它是Erlang的一个非常有趣的替代品,可以了解一下。
此外,它还有一个快速增长的基于它的Web框架-> Phoenix Framework
看起来Erlang在相对低端的服务器上表现更好(512MB 4核心2.4GHz AMD虚拟机)。这是根据SyncPad对其虚拟白板服务器应用程序的Erlang和Node.js实现进行比较的经验。
我更喜欢Erlang而不是Node。 如果你需要并发,可以用轻量级进程的Erlang或Golang替代Node。
Erlang并不容易学习,需要付出很多努力,但它的社区非常活跃,因此可以从中获得帮助,这也是人们为什么更喜欢Node的原因。