对不起小说......

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

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

这运行相对较快,但我没有在主API分叉的每个进程/脚本的代码中进行解密,我想把这项工作交给另一个API(称之为Decrypt API),它基本上取决于请求中的包络并发送在响应中回复解密的结果 .

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

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

最后,我的问题是,我能做些什么来提高像我所描述的高流量的Decrypt API的速度,以及我该怎么做才能避免这些丢弃的请求?

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

谢谢!