Node.js-防止在集群服务器上进行并发异步调用

时间:2018-11-18 01:03:33

标签: node.js concurrency node-cluster

我正在集群环境中运行Nodejs Express服务器。 服务器收到数百个针对同一资源的请求。

在处理对此资源的请求时,我对另一个服务(例如服务A)进行异步调用,等待其结果,将对服务A的promise调用记忆在内存中,并返回请求的响应。

由于我正在运行群集服务器,因此其他工作程序开始接受对同一资源的请求。而且由于对服务A的记住的承诺是每个工作人员的,并且该承诺尚未解决,所以我最终对服务A的同一资源进行了多次调用。

有没有一种方法可以防止在仍使用群集环境的情况下对服务A进行这些重复调用。

1 个答案:

答案 0 :(得分:0)

您应该为所有群集进程使用共享内存。

如前所述,您可以使用redis,如果您需要扩展到一台群集计算机之外,则首选redis。

但是,如果您没有太多要记住的数据,我将实现一个超简单的键:使用node-ipc(获取,设置)的值存储

所有集群进程都从同一数据源进行读写,它将解决您的问题。

另一种方法

创建一个微服务, 它按需调用API A,B,C,并将结果保存到内存中。 您还可以通过这种方式实现全局限制。

然后,集群获取请求,并调用您的微服务,该微服务立即返回(导致缓存)或调用api A。

P.S-如果需要扩展此微服务,则最好使用redis并将其挂接到集群。