使用NodeJS进行大型项目

NodeJS是大型服务器端应用程序的良好框架/代码库吗? 我期望开发的是一个需要HTTP事务(状态)和大量并发用户的大型应用程序。

从我在线阅读的内容来看,当谈到大型项目时,NodeJS并不是最好的工具。 我碰到的是如下:

  • NodeJS运行在运行于事件循环的JavaScript上,在批量使用时效率不高。
  • NodeJS可能是非阻塞的,但是所有的请求都是在一个线程中处理的,所以在处理很多请求的时候,这可能会导致一些瓶颈。
  • NodeJSbuild立在它自己的HTTP服务器之上,所以将来的维护将需要自己的系统pipe理员/开发人员混合来照顾应用程序。
  • NodeJS没有经过充分testing和多样化的软件,可以帮助您构build更大的应用程序。

有什么我失踪? NodeJS是否真的如它强大?

NodeJS是大型服务器端应用程序的良好框架/代码库吗?

这个问题有点主观,但是我包含了解决在大型项目中使用节点时遇到的实际问题的实际客观问题。

在项目工作一段时间后更新:

最好是作为I / O绑定的前端/ API服务器(大多数前端/ api服务器)。 如果你有后端计算需求(处理等),可以将其他技术(C#net core,go,Java等… worker节点)

我创build了这个项目作为一个例子说明大多数点 – Sane节点开发 : https : //github.com/bryanmacfarlane/sanenode

NodeJS不是build立在自己的http服务器之上的。 它build立在V8 chrome javascript引擎之上,并不承担一个http服务器。 有一个内置的http模块以及stream行的快速Web服务器,但也有套接字模块(以及socket.io )。 这不只是一个HTTP服务器。

单线程不会造成瓶颈,因为所有I / O都是asynchronous的。 这个链接解释得很好: http : //blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/

就软件模块而言,您可以在npmregistry中进行search。 总是看看有多less人使用它(下载),并访问github回购看它是否积极维护(或有一堆问题从未得到关注)。

关于“大项目”,我发现对理智的发展至关重要的是:

  1. 编译时间支持(和智能感知)编译时发现问题。 如果你不觉得你需要这样的东西,那么当我开始的时候,你会在第一次重构之后改变主意。

  2. 消除回拨地狱 :保持关键(如上所述)的性能,但消除回拨代码。 使用asynchronous/等待写入线性代码并保持asynchronous性能。 与承诺相结合,但比单纯使用承诺要好得多。

  3. 工具 :很多select,但我发现最好的是Typescript(今天ES6 / 7),VS代码(智能感知),摩卡(unit testing)。

  4. 仪表/logging :使用跟踪和仪器对您的应用程序进行深入分析至关重要。

  5. build立在良好的审查框架 :我用快递为例,但这是一个偏好,还有其他人。

Node.js是构build分布式networking服务的一个非常好的工具。 什么是你的大型应用程序devise不仅仅是一个“使用哪个工具”的问题。 很多人用ruby,php,erlang,apache&nginx&HAproxy以非常不同的方式使用node.js。 如果你不知道为什么你需要节点,你可能不需要它。 考虑节点的可能原因:

  • 你想在服务器和客户端之间共享通用的Javascript代码
  • 您预计高并发负载(每台服务器同时连接数千到数十万)
  • 你(或你的团队)比JavaScript更能熟练使用其他语言/框架
  • 如果其中一个7600 +模块正在实现大部分所需的function

与NodeJS有一个“问题”,就是构build一个大型应用程序需要开发者/团队的纪律。

对于同一家公司内的多个团队尤其如此。 现有的框架有点松散,不同的团队会想出不同的方法来解决问题。

KrakenJS是一个构build在express之上的框架。 它增加了一个约定和configuration层,可以很容易地构build大型项目,涉及多个团队。

真的NodeJs是以自己的方式强大的,一些更多的信息,

  1. 您可以在负载平衡下运行多个应用程序实例来处理大量请求。
  2. selectNodeJs来读取2000个文件,而不是计算20个质数。
  3. 让NodeJ忙于读取/写入文件或端口。
  4. 当您需要将您的响应广播到多个客户端时非常有用。
  5. 不要在意NodeJs中的死锁,但是要关心你做同样操作的频率。
  6. 最重要的是,这些值在V8引擎中存在,直到进程终止。 确定你要在NodeJs中input多less行代码。

我发现最重要的是尽可能less的使用CPU时间。 如果您的应用程序需要密集使用CPU,事件循环延迟会增加,应用程序将无法响应任何其他请求。