我正在集群环境中运行Nodejs Express服务器。 服务器收到数百个针对同一资源的请求。
在处理对此资源的请求时,我对另一个服务(例如服务A)进行异步调用,等待其结果,将对服务A的promise调用记忆在内存中,并返回请求的响应。
由于我正在运行群集服务器,因此其他工作程序开始接受对同一资源的请求。而且由于对服务A的记住的承诺是每个工作人员的,并且该承诺尚未解决,所以我最终对服务A的同一资源进行了多次调用。
有没有一种方法可以防止在仍使用群集环境的情况下对服务A进行这些重复调用。
答案 0 :(得分:0)
您应该为所有群集进程使用共享内存。
如前所述,您可以使用redis,如果您需要扩展到一台群集计算机之外,则首选redis。
但是,如果您没有太多要记住的数据,我将实现一个超简单的键:使用node-ipc(获取,设置)的值存储
所有集群进程都从同一数据源进行读写,它将解决您的问题。
另一种方法
创建一个微服务, 它按需调用API A,B,C,并将结果保存到内存中。 您还可以通过这种方式实现全局限制。
然后,集群获取请求,并调用您的微服务,该微服务立即返回(导致缓存)或调用api A。
P.S-如果需要扩展此微服务,则最好使用redis并将其挂接到集群。