我有一个应用程序,使用登录名和密码实时接收来自多个来源的数据。收到数据后,它将存储在内存存储中,并在新数据可用后进行替换。我还使用mongo-db的会话来授权用户请求。问题是我无法使用pm2扩展此应用程序,因为我只能使用一个连接到我的数据源一个登录/密码对。
有没有办法为每个群集使用不同的登录名/密码或在应用内获取群集ID?
群集之间是否共享内存值/会话还是分开?谢谢。
答案 0 :(得分:0)
因此,如果我理解了这个问题,你就有了一个node.js应用程序,它使用HTTP或其他协议连接到第三方,并且因为你只有一个凭据,所以你不能使用多个连接到所述第三方实例。要回答您的问题,是的,可能要将群集设置为使用独特的use / pw组合,棘手的部分是如何将这些凭据分配给每个群集(假设您不想对其进行硬编码) 。您必须在服务器启动时执行此分配,并且可能使用数据存储来保存这些凭据并为每个凭据引入某种锁定机制(以便每个凭据对于特定实例是唯一的)。 / p>
但是,如果我在你的位置,那么我要做的就是创建一个新的服务器,其唯一的工作就是获取这个"实时数据",然后将它存储在集群可用的地方,例如作为redis或一些持久存储。然后,服务器将成为独立服务器,只获取此数据。您还可以附加一个RESTful API,这样如果您的其他服务器需要与它通信,他们可以通过HTTP或消息队列来实现(同样,Redis也可以在那里正常工作。
答案 1 :(得分:0)
'实时'含糊不清;你在使用WebSockets吗?如果经常提出HTTP请求,也可以将其视为“实时”。
可能你的问题就像我们遇到的扩展SocketStream(websockets)应用程序的问题,其中持久连接需要将相同的请求路由到同一进程。 (还有其他网络拓扑/架构不需要这个,但这是另一个主题)
你只需要使用fork模式1进程和一个使会话变得粘稠的解决方案,例如:
https://www.npmjs.com/package/sticky-session
我有一些示例代码,但需要找到它(部署后一年以上)
基本上你只需使用pm2来表示“永远在线”功能; sticky-session模块处理节点集群化的东西 我可以稍后发布示例。