节点 | worker_thread |保持工人内部的TCP连接?

nodejs | worker_thread | keep alive tcp connection within workers?

使用来自节点 12 的 worker_threads,是否适合在 worker 中建立远程连接并保持这些连接有效?

我不是说 sharing masterworkers 之间的套接字,就像我们可以对节点 clusterfork 做的那样。

我们的想法是在工作人员中建立安全连接池,以便在需要时使用。

假设我有 10 个工人。创建工作人员时,会创建(流)到服务器 X、Y amd Z 的一些预先建立的 "TLS" 连接,并且工作人员标记为 "ready"

每次我使用 worker 处理 "heavy" 任务(mapReduce 等),如果我需要 post 数据或获取数据 to/from 服务器 X、Y 或Z 在这个过程中, 我使用已经从池中建立的适当 "TLS" 连接。

任务完成后,结果return给master,worker只执行new/next个任务。

1 ) 你看到这样做有什么副作用/影响吗?

2 ) 在 "main thread" (master) 上设置 "TLS" 连接池会更好吗?如果在任务期间工作人员需要 "remote" 数据,请使用 "postMessage" 方法与 "master" (和 vice/versa )进行通信。

谢谢

工作线程不适用于远程连接。但是,您可以使用 TLS sockets 构建自己的系统,其工作方式与此类似。对于这样的系统,我肯定会建议保持这些类型的连接处于活动状态。设置这些连接时会有很长的延迟,并且让这些连接在内存中处于活动状态,将使用最少的资源。

请记住,这样的系统有一些缺点:

  1. 您正在使用不同的机器,这些机器中的每一个都可能有自己的一组故障条件。
  2. 您正在通过网络进行通信,与远程服务器的连接可能会因任何可以想象的原因突然中断。
  3. 您正在增加物理距离,这将导致 latency

所以请记住这一点。

我会推荐构建这样的系统吗?这真的很难确定,它取决于您的用例、时间和金钱。您提到集群节点正在处理 'heavy tasks',因此我认为 CPU / GPU 密集型任务。因此,像这样的系统可能是一个很好的解决方案,但是,在您的处理服务器前简单休息 API 可能就足够了。或者甚至是数据库同步服务器,它只是检查数据库以执行任务。

同一个问题有很多解决方案,只需要考虑最适合您的项目的解决方案即可。