NodeJS如何扩展企业应用程序?

假设我有一个企业Java应用程序,基本上做到以下几点:

收集用户input,查询后端数据库(可能是多个),运行一些algorithm(比如说在内存中计算查询的数据集以产生一些统计数据等),然后返回一些html页面中的数据。

我的问题是:如果应用程序的瓶颈在数据库查询上,NodeJS如何在这种情况下帮助我,因为在呈现页面之前,我仍然需要执行所有这些post-dbalgorithm。 应用程序架构如何看起来像?

当然,节点不能加速你的存储层,并且使那些引起如此多后端处理的单个请求以更快的速度满足最终用户的请求。 但是它可以做的不是在应用程序服务器线程池中绑定一个线程。 单线程可以继续循环,而这个工作正在进行,并接受另一个请求。

另一个请求可能是一个更便宜的请求,它会在工作完成时返回。 在具有线程池模型的应用程序服务器中也可能发生这种情况……除非线程池模型中的所有线程都被阻塞在I / O请求上 – 以及每个线程的开销。 更便宜的请求将排队等待线程池外的线程,因为它们都被阻塞。 节点单线程将循环并服务于廉价的请求。

这是有效的,因为节点要求所有的I / O是asynchronous的,唯一阻止循环的工作是你的代码。 这就是为什么说“ 节点中的所有东西都是并行运行的,除了你的代码 ”。 虽然可以在其他应用程序服务器中编写asynchronous代码并获得类似结果,但是许多代码提供了非asynchronous线程池模型,其中编码更容易,但有时可缩放性较差。

例如, 这个hanselman文章演示了asp.net如何处理asynchronous请求,但这不是大多数人使用的通用模式。