【问题标题】:node.js vs java - compute intensive computationnode.js vs java - 计算密集型计算
【发布时间】:2015-05-19 11:18:27
【问题描述】:
我目前正在评估 api 的后端架构,深入研究 node.js 和 j2ee 应用程序服务器以及相应的 j2ee 战争文件。该 api 将不得不计算相当 cpu 密集型的任务 - 更具体地说是神经网络的训练。您是否有任何关于性能和/或应该用于机器学习的软件包的设置的经验?是否还有其他 API 技术我应该考虑 - 例如 java 微服务?
提前非常感谢,
菲利普
【问题讨论】:
标签:
java
node.js
performance
neural-network
【解决方案1】:
根据问题做出决定
任务是 CPU 密集型还是 I/O 受限?”
CPU 密集型操作的一些示例是图形或视频编辑或任何需要巨大计算能力的东西。 I/O 绑定操作的一些示例是实时聊天、媒体流、文件处理等
【解决方案2】:
我遇到了完全相同的问题,并通过在 R 子进程中进行大量计算来解决它。我写了一个简单的 npm 模块,你现在可以试试:
npm install computer
现在在您的节点应用程序中:
var computer = require('computer');
var R = new computer('C:/Program Files/R/R-3.2.0/bin/x64/R.exe');
R.start(function(){
R.run('cat("1 + 2 =", 1 + 2)', function(err, log){
console.log(log);
R.stop();
});
});
这允许您的单线程 nodejs 应用程序在将计算卸载到子进程时保持精简和平均。我什至连接到 R 本身的数据库,所以这是在节点中进行大量计算的一种非常强大且有效的方式。
【解决方案3】:
我会推荐至少两个微服务。一种用于接受 API 请求。其他的用于计算。您可以为这两种语言选择任何语言。
例如:
- node.js API 服务 - 接收 HTTP Restful 请求。该服务使用事务性 RPC 协议(如 dnode)调用第二个服务。
- 无状态 C++/Java/Go 服务 - 通过 dnode RPC 接收计算任务,执行计算,然后返回结果。
因此,您将卸载前端服务。它不会滞后于高负载。第二个服务是使用 CPU 优化库/语言编写的。此外,您可以在负载非常高的情况下扩展第二个服务。