Node.js或Erlang
当涉及到它可以处理的并发级别时,我真的很喜欢这些工具。
Erlang看起来更稳定的解决scheme,但需要更多的学习和大量的function语言范例。 看起来Erlang在多核CPU方面更好(修复了我的错误)。
但是我应该select哪一个? 从短期/长期来看,哪一个更好?
我的目标是学习一个工具,它使得我的web项目在高负载下的扩展比传统语言更容易。
我会试试Erlang。 即使这将是一个更陡峭的学习曲线,你会得到更多的,因为你将学习function的编程语言。 此外,由于Erlang专门devise用于创build可靠,高度并发的系统,您将同时学习大量有关创build高度可扩展的服务的知识。
我不能说Erlang,但是有一些关于节点没有提到的东西:
- Node使用Google的V8引擎将JavaScript编译成机器代码。 所以节点实际上是相当快的。 所以这是由事件驱动编程和非阻塞io提供的速度优势之上的。
- 节点有一个非常活跃的社区。 跳到他们在freenode的IRC组,你会明白我的意思
- 我注意到上面的评论推Erlang的基础上,这将是有用的学习function的编程语言。 虽然我同意重要的是扩展你的技能并获得你的一个,但你不应该基于你想学习一种新的编程风格
- 另一方面,Javascript已经是一个你感觉舒适的范例! 加上它的JavaScript,所以当你写客户端代码时,它会看起来和感觉一致。
- 节点的社区已经抽出了大量的模块 ! 有redis的模块,mongodb,沙发,你有什么。 另一个好的模块是Express (认为Sinatra是节点)
请查看Ryan Dahl博客上雅虎博客上的video ,他是真正写节点的人。 我认为这会帮助你更好地了解节点在哪里,在哪里。
请记住,节点仍然处于后期开发阶段,因此也经历了不less变化,这些变化破坏了较早的代码。 但是,据说这是在一个点,你可以指望API不要改变太多。 所以,如果你正在寻找有趣的东西,我会说节点是一个很好的select。
我是一个长期的Erlang程序员,这个问题促使我看看node.js。 它看起来非常好。
看来您需要产生多个进程来利用多个内核。 我看不到有关设置处理器亲和力的任何事情。 你可以在linux上使用taskset,但它可能应该参数化并在程序中设置。
我也注意到,平台支持可能会有点弱。 具体来说,看起来你需要在Cygwin for Windows支持下运行。
看起来不错,但。
编辑
Node.js现在对Windows有本地支持。
我正在寻找同样的两个select,你有多个项目。
到目前为止,我所提出的最好的razor来决定他们之间是否需要使用Javascript。 我正在寻求迁移的一个现有系统已经用Javascript编写,所以它的下一个版本可能会在node.js中完成。 其他项目将在一些Erlang Web框架中完成,因为没有现成的代码库来迁移。
另一个考虑是Erlang的规模远远超过了多核,它可以扩展到整个数据中心。 我没有在node.js中看到一个内置的机制,它让我可以发送另一个JS进程的消息,而不必关心它在哪个机器上,但是它在最低级别的Erlang中构build。 如果你的问题不够大,需要多台机器,或者如果不需要多个协作的进程,这个优势是不太可能的,所以你应该忽略它。
Erlang确实是一个深入的潜水池。 我build议在开始构buildWeb应用程序之前先编写一个独立的function程序。 一个更简单的第一步,因为你看起来很喜欢Javascript,就是试着用更实用的风格来编写JS。 如果你使用jQuery或Prototype,你已经开始了这个path。 尝试在Erlang或其亲属(Haskell,F#,Scala …)和function性JS之间进行纯函数式编程之间的弹跳。
一旦你熟悉函数式编程,可以找出Erlang的许多Web框架之一。 在这个晚期,你可能不应该把你的应用程序直接写入像inets
这样的低级别的应用程序。 看一下像氮气这样的东西。
虽然我亲自去Erlang,但我承认我对JavaScript有点偏见。 我的build议是你评价几点:
- 你是否重用这两种语言中的现有代码(包括源代码和程序员经验)!
- 你是否需要/需要dynamic更新而不停止应用程序(这是Erlang默认获胜的地方 – 它的运行时间是针对这种情况devise的,OTP包含了所有必要的工具)
- 在单独的并发操作方面,预期stream量有多大,而不是带宽?
- 您为每个请求所做的操作如何“并行”?
Erlang真的很好地调整了并发性和networking透明并行分布式系统。 根据项目的具体情况,这种系统的成熟实施可能会超过学习新语言的任何问题。 另外还有两种语言可以在Erlang VM上使用,Ruby / Python就像Reia和Lisp-Flavored Erlang 。
还有一种select是使用两者,尤其是将Erlang用作“集线器”。 我不确定Node.js是否有外部函数接口系统,但是如果有的话,Erlang有外部进程的C库来与系统进行接口,就像任何其他的Erlang进程一样。
看起来Erlang在相对较低端的服务器(512MB 4核2.4GHz AMD VM)中部署效果更好。 这是SyncPad比较其虚拟白板服务器应用程序的Erlang和Node.js实现的经验 。
如果没有erlang,whatsapp永远无法达到可扩展性和可靠性的水平https://www.youtube.com/watch?v=c12cYAUTXXs
在同一台虚拟机上还有另一种语言,erlang就是 – > Elixir
这是一个非常有趣的替代Erlang,检查这一个。
它也有一个基于它的快速增长的Web框架 – > Phoenix Framework
我会优先于节点的Erlang。 如果你想要并发性,Node可以被Erlang或Golang替代,因为它们的轻量级进程。
Erlang不容易学,所以需要付出很大的努力,但是它的社区是活跃的,所以可以从中获得帮助,这只是人们喜欢Node的原因。