Nodejs - 群集微服务问题的高流量

时间:2016-03-19 00:48:37

标签: node.js encryption fork cluster-computing high-traffic

对不起小说......

我正在开发一个Nodejs项目,我需要解密多个文件中的数百万个信封。我的应用程序的任何API都必须在localhost上运行。

主API处理客户端请求以解密一批文件。每个文件包含数千到数百万个需要解密的信封。每个文件都被视为一个作业,这些作业由Main API排队,然后通过为每个作业分配一个新进程来同时运行。 (我一次只允许5个并发作业/分支)在每个进程中,运行一个脚本并对文件进行解密。

运行速度相对较快,但是我没有在主API分叉的每个进程/脚本的代码中进行解密,而是希望将这项工作转移到另一个API(称之为Decrypt API),它基本上取决于请求并在响应中发回解密结果。

所以我创建了这个api然后使用'forky'来聚类它。然后从我的进程,而不是在那些解密中,我向Decrypt API发出多个并行请求,一旦我得到响应,只需将解密结果放在一个文件中。

起初我的问题是我提出了正确的请求,因为我收到每个信封而没有等待请​​求返回,然后再发送下一个信封。如果你愿意,我基本上会发送“并行”请求,然后在每个请求的回调中处理投票。这导致我认为一次有太多未完成的请求,因为我收到了ECONNRESET错误。有些请求被删除了。所以我的解决方案是在任何时候都有最多x个未完成的reqs(我用过10个)以避免太多的并发req。这似乎没问题,但后来我意识到,因为我从MainAPI分配了5个进程,虽然每个进程都有这个新的'优秀的reqs'限制代码,因为它们同时运行,我仍然遇到了太多需求的问题。 Decrypt API。此外,这种使用两种不同微服务/ API的方法比仅使用MainAPI的分叉进程只进行解密要慢。在Decrypt API中,我也使用节点'crypto'库,我使用的其中一些函数是同步的,所以我怀疑高流量时这是一个问题,但我无法避免这些同步方法。

最后,我的问题是,如何提高像我所描述的高流量的Decrypt API的速度,以及如何避免这些丢弃的请求呢?

如果我听起来像菜鸟,请原谅我,但由于这些API都在同一台机器和本地主机上运行,​​这可能就是为什么这种方法比在每个进程中只进行解密要慢?

谢谢!

0 个答案:

没有答案