【问题标题】:How to integrate Java with nodejs for handling CPU-heavy tasks?如何将 Java 与 nodejs 集成以处理 CPU 繁重的任务?
【发布时间】:2013-08-03 19:16:51
【问题描述】:

我正在尝试为 I/O 繁重和 CPU 繁重的任务选择合适的 Web 技术。 NodeJs 非常适合处理大负载,它也可以横向扩展。但是,我被 cpu 沉重的部分困住了。是否可以将另一种技术(例如 Java)集成到节点中,以便我让它在其他线程中运行我的算法,然后在节点中再次使用结果。有没有现成的解决方案?任何其他建议都会非常好。

【问题讨论】:

  • 最简单的事情就是对其进行测试,看看各种技术如何满足您的要求。还要记住,基础设施并不像 10 年前那么昂贵。如今,启动新的服务器实例以支持负载是微不足道的。
  • 既然可以将cpu-heavy JS代码外包给另一个线程,为什么还要选择其他一些技术呢?查看threads-a-gogo github.com/xk/node-threads-a-gogo 和其他nodejs 线程工具:)
  • 非常感谢大家,nodejs 线程工具似乎正是我想要的。我一定会试试的。 :)
  • 您还可以查看原生 c++ 扩展。许多用例在 Java 中比 Node 运行得更好,C++ 甚至比 Java 运行得更好。 syskall.com/how-to-write-your-own-native-nodejs-extension/…

标签: java node.js integration


【解决方案1】:

您可以使用 node-java 将 NodeJS 与 Java 集成。

【讨论】:

  • 非常感谢,我也试试。
【解决方案2】:

如上一个答案所述,您可以使用 node-java,它是一个与 Java 对话的 npm 模块。您还可以使用J2V8,它将 Node.js 包装为 Java 库并提供 Java 中的 Node.js API。

【讨论】:

  • 感谢您的回答。这个问题是3年前提出的。目前的结论:像 rabbit mq 或 kafka(作为分布式解决方案)这样的消息代理实际上可以帮助避免进行此类集成。此外,计算量大的任务可以委托给专门的模块,如 apache spark。总的来说,在这个阶段,lambda 架构是我认为的问题的答案。
  • J2V8 在哪个 Java 版本上运行?最低 Java 版本要求是什么?
【解决方案3】:

答案是lambda architecture

NodeJs 本身就很好——以轻量级的方式处理快速查询,不对数据进行任何额外的计算。

CPU 繁重的任务可以轻松地委派给基于 JVM 的专用组件(嗯,最著名的组件在 JVM 上)。这是通过使用消息代理和微服务很好地实现的。

基于事件的架构,其中 nodejs 可以连接到 Cassandra 或 Mongodb 等数据库和 Apache Spark 等集群计算框架(但不一定,这取决于问题)来处理系统的 CPU 密集型部分.轻量级容器为每个组件提供了良好的隔离运行时环境,从而锦上添花。

到目前为止,这是我对这个问题的结论。 我认为上述建议消除了将节点包装在 java 或其他基于 JVM 的解决方案以处理 cpu 繁重任务的需要。

【讨论】:

    【解决方案4】:

    NodeJS 基于用 c++ 编写的 v8 javascript 引擎。

    因此可以用 C++ 为 NodeJS 编写完全原生的插件。查看其中一些资源:

    【讨论】:

      猜你喜欢
      • 2015-02-28
      • 2015-06-12
      • 2011-06-21
      • 2016-06-04
      • 2023-02-07
      • 2021-01-02
      • 2021-02-05
      • 2019-06-28
      • 2017-04-10
      相关资源
      最近更新 更多