当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。
Erlang看起来更稳定的解决方案,但需要更多的学习和大量潜入功能语言范例。看起来Erlang在多核CPU方面做得更好(如果我错了就解决我的问题)。
但我应该选择哪个?从短期/长期角度来看哪一个更好?
我的目标是学习一种工具,使得在高负荷下扩展我的网络项目比传统语言更容易。
答案 0 :(得分:87)
我会试试Erlang。即使它将是一个更陡峭的学习曲线,你将获得更多,因为你将学习一种函数式编程语言。此外,由于Erlang专门用于创建可靠,高度并发的系统,因此您将学习很多有关同时创建高度可伸缩服务的知识。
答案 1 :(得分:50)
我不能代表Erlang,但有一些关于节点没有提及的事情:
在实际编写节点的人Ryan Dahl的yahoo博客上查看video。我认为这将有助于您更好地了解节点所处的位置以及它的发展方向。
请记住,节点仍处于后期开发阶段,因此一直在进行相当多的更改 - 这些更改已经破坏了早期的代码。但是,据说它可以指望API不会改变太多。所以,如果你正在寻找有趣的东西,我会说节点是一个很好的选择。
答案 2 :(得分:15)
我是一名长期的Erlang程序员,这个问题促使我看看node.js.它看起来非常好。
看起来您需要生成多个进程才能利用多个核心。我无法看到有关设置处理器关联性的任何信息。您可以在linux上使用taskset,但它可能应该参数化并在程序中设置。
我也注意到平台支持可能稍微弱一些。具体来说,看起来您需要在Cygwin下运行以获得Windows支持。
看起来不错。
Node.js现在支持Windows。
答案 3 :(得分:9)
我正在为多个项目寻找相同的两种替代方案。
到目前为止,我提出的最好的剃须刀是否需要使用Javascript来决定他们之间的特定项目。我想要迁移的一个现有系统已经用Javascript编写,因此它的下一个版本很可能在node.js中完成。其他项目将在一些Erlang Web框架中完成,因为没有现有的代码库可供迁移。
另一个考虑因素是Erlang可以扩展到多个核心,它可以扩展到整个数据中心。我没有在node.js中看到一个内置机制,它允许我向另一个JS进程发送一条消息而不关心它所在的机器,但是它是在最低级别的Erlang中构建的。如果你的问题不够大,不需要多台机器,或者它不需要多个合作进程,那么这个优势就不大了,所以你应该忽略它。
Erlang确实是一个深入潜水的游泳池。我建议您在开始构建Web应用程序之前先编写一个独立的功能程序。更简单的第一步,因为您似乎对Javascript感到满意,就是尝试以更实用的方式编写JS。如果您使用jQuery或Prototype,那么您已经开始使用这条路径了。尝试在Erlang中的纯函数式编程或其中一个kin(Haskell,F#,Scala ...)和函数式JS之间进行反弹。
一旦您对函数式编程感到满意,请找出许多Erlang Web框架之一;你可能不应该在这个晚期阶段将你的应用程序直接写入inets
这样的低级别。例如,查看Nitrogen之类的内容。
答案 4 :(得分:9)
虽然我个人会选择Erlang,但我承认我对JavaScript有点偏见。我的建议是你评估几点:
Erlang真的很好地调整了并发性。网络透明的并行分布式系统。根据项目的确切内容,这种系统的成熟实施的可用性可能超过学习新语言的任何问题。还有另外两种可以使用Erlang VM的语言,类似Ruby / Python的Reia和Lisp-Flavored Erlang。
另一个选择是使用两者,特别是将Erlang用作“中心”。我不确定Node.js是否有外部函数接口系统,但是如果有的话,Erlang有外部进程的C库来与系统接口,就像任何其他Erlang进程一样。
答案 5 :(得分:5)
看起来Erlang在相对低端的服务器(512MB 4核2.4GHz AMD VM)中的部署效果更好。这来自SyncPad's experience比较Erlang与其虚拟白板服务器应用程序的Node.js实现。
答案 6 :(得分:4)
在同一个VM上还有一种语言是erlang - > Elixir
它是Erlang的一个非常有趣的替代品,请查看这个。
它还有一个基于它的快速增长的Web框架 - > Phoenix Framework
答案 7 :(得分:3)
答案 8 :(得分:0)
我会优先选择Erlang over Node。 如果你想要并发,Node可以被Erlang或Golang代替,因为它们的重量很轻。
Erlang不容易学习,因此需要付出很多努力,但它的社区是活跃的,所以可以从中获得帮助,这只是人们更喜欢Node的原因。