当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。
Erlang / OTP看起来更稳定,但是需要更多的学习,并且需要深入研究功能语言范例。看起来,Erlang / OTP在多核CPU方面做得更好(如果我错了,请纠正我)。
但是我应该选择哪个呢?从短期和长期角度看,哪一个更好?
我的目标是学习一种工具,该工具比传统语言更容易在高负载下扩展Web项目。
当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。
Erlang / OTP看起来更稳定,但是需要更多的学习,并且需要深入研究功能语言范例。看起来,Erlang / OTP在多核CPU方面做得更好(如果我错了,请纠正我)。
但是我应该选择哪个呢?从短期和长期角度看,哪一个更好?
我的目标是学习一种工具,该工具比传统语言更容易在高负载下扩展Web项目。
Answers:
我会尝试一下Erlang。尽管这将是一个陡峭的学习曲线,但是由于您将学习一种函数式编程语言,因此您将获得更多收益。另外,由于Erlang是专门设计来创建可靠的高度并发系统的,因此您将学到很多有关同时创建高度可扩展服务的知识。
我不能代表Erlang,但是关于node的一些未提及的事情:
观看Ryan Dahl在Yahoo博客上的视频,Ryan Dahl是实际编写node的人。我认为这将帮助您更好地了解节点的位置以及去向。
请记住,node仍处于后期开发阶段,因此已经经历了许多更改,这些更改破坏了早期的代码。但是,据推测,正是在这一点上,您可以期望API的更改不会太大。因此,如果您正在寻找有趣的东西,我会说node是一个不错的选择。
我是Erlang的长期程序员,这个问题促使我看一下node.js。看起来不错。
看来确实需要产生多个进程才能利用多个内核。我看不到任何有关设置处理器相似性的信息。您可以在Linux上使用Taskset,但是可能应该对其参数化并在程序中进行设置。
我还注意到,平台支持可能会弱一些。具体来说,您似乎需要在Cygwin下运行才能获得Windows支持。
看起来不错。
Node.js现在具有Windows的本机支持。
我正在为多个项目寻找相同的两种选择。
到目前为止,对于给定的项目,我想出的最好的剃刀是我是否需要使用Javascript。我要迁移的现有系统已经用Javascript编写,因此其下一个版本可能会在node.js中完成。其他项目将在某些Erlang Web框架中完成,因为没有现有的代码库可移植。
另一个考虑因素是,Erlang的扩展范围远远超出了多个内核,它可以扩展到整个数据中心。我没有在node.js中看到一个内置的机制,该机制使我可以向另一个JS进程发送消息,而无需关心它在哪台计算机上,但这是最低级内置在Erlang中的。如果您的问题不够大,无法使用多台计算机,或者不需要多个协作流程,则这种优势不太重要,因此您应该忽略它。
Erlang确实是一个可以潜入的深渊。我建议您在开始构建Web应用程序之前先编写一个独立的功能程序。因为您似乎对Java脚本很熟悉,所以一个甚至更简单的第一步是尝试以更实用的样式来编程JS。如果您使用jQuery或Prototype,那么您已经开始使用此路径。尝试在Erlang中的纯函数式编程或其亲属之一(Haskell,F#,Scala ...)和函数式JS之间弹跳。
一旦您对函数式编程感到满意,就可以从许多Erlang Web框架中找到一种。您可能不应该inets
在后期阶段直接将应用程序编写为低级的东西。例如,看看类似Nitrogen的东西。
当我亲自去找Erlang时,我承认我对JavaScript有点偏见。我的建议是您评估以下几点:
Erlang确实对并发和网络透明的并行分布式系统进行了微调。根据项目的确切情况,此类系统的成熟实现的可用性可能会超过与学习新语言有关的任何问题。您还可以使用在Erlang VM上工作的其他两种语言,即Ruby / Python类的Reia和Lisp-Flavored Erlang。
另一个选择是同时使用两者,尤其是将Erlang用作“集线器”。我不确定Node.js是否具有外部功能接口系统,但如果有,则Erlang具有C库,用于外部进程与任何其他Erlang进程一样与系统接口。
如果没有erlang https://www.youtube.com/watch?v=c12cYAUTXXs,whatsapp将永远无法达到可扩展性和可靠性水平
我将优先使用Erlang而不是Node。如果您希望并发,则可以使用轻量级的Erlang或Golang代替Node。
Erlang不容易学习,因此需要大量的努力,但是它的社区很活跃,因此可以从中获得帮助,这只是人们偏爱Node的原因。