对不起小说...
我正在开发一个 Nodejs 项目,我需要在多个文件中解密数百万个信封。我的应用程序的任何 API 都必须在 localhost 上运行。
主 API 处理客户端请求以解密一批文件。每个文件都包含数千到数百万个需要解密的信封。每个文件都被视为一个作业,这些作业由 Main API 排队,然后通过为每个作业分叉一个新进程来并发运行。(我一次只允许 5 个并发作业/分叉)在每个进程中,都会运行一个脚本来遍历并解密文件。
这运行相对较快,但不是在 Main API 派生的每个进程/脚本的代码中进行解密,我想将这个工作分发给另一个 API(称为 Decrypt API),该 API 基本上接受请求中的信封并发送在响应中返回解密的结果。
所以我创建了这个 api,然后使用'forky' 来集群它。然后从我的流程中,我没有在其中进行解密,而是向 Decrypt API 发出多个并行请求,一旦我得到响应,只需将解密的结果放在一个文件中。
起初我的问题是我在收到每个信封时就提出了请求,而没有等待请求返回,然后再发送下一个。如果您愿意,我基本上会发送“并行”请求,然后在每个请求的回调中处理投票。这导致我认为一次有太多未完成的请求,因为我收到了 ECONNRESET 错误。一些请求被丢弃。所以我的解决方案是在任何时候最多有 x 个未完成的请求(我使用了 10 个),以避免过多的并发请求。这看起来没问题,但后来我意识到,因为我从 MainAPI 分叉了 5 个进程,虽然每个进程都有这个新的“优秀请求”限制代码,但由于它们同时运行,我仍然遇到了一次请求过多的问题解密 API。还,这种使用两个不同微服务/API 的方法比只使用 MainAPI 的分叉进程进行解密要慢。在 Decrypt API 中,我还使用了节点“crypto”库,并且我使用的一些函数是同步的,所以我怀疑高流量是个问题,但我无法避免这些同步方法。
所以最后,我的问题是,我能做些什么来提高 Decrypt API 的速度,就像我描述的那样,我能做些什么来避免这些丢弃的请求?
如果我听起来像个菜鸟,请原谅我,但是由于这些 API 都在同一台机器和本地主机上运行,这可能是为什么这种方法比在每个进程中进行解密要慢的原因吗?
谢谢!