Google Cloud Pub/Sub如何处理多个应用程序引擎实例



阅读本页,https://cloud.google.com/appengine/docs/flexible/nodejs/writing-and-responding-to-pub-sub-messages,我看到pub/sub在有新消息时会向您提供的url发送消息。

我想使用pub/sub的原因是将我的应用程序引擎实例连接在一起(如果应用程序引擎扩展到多个服务器,我希望服务器知道一些相同的信息(。使用谷歌云Pub/Sub,我的所有应用引擎实例都会收到消息吗,还是只有一个实例收到消息?有没有办法确保所有实例都收到相同的消息?

我还登记了Pull,https://cloud.google.com/pubsub/docs/pull,听起来是可行的,但我不明白在不使用URL端点的情况下如何推送消息。

我正在寻找同样的东西。我的用例是:

我有X个应用引擎NodeJS后端实例。我使用Redis云内存库作为缓存层。为了最大限度地减少Redis的使用并提高性能,每个后端实例都有自己的间隔缓存。

规则如下:

  • 首先检查本地缓存
  • 如果找到,请使用它
  • 如果找不到,请在Redis缓存中查找
  • 使用Redis中的数据更新本地缓存

本地缓存的超时速度比Redis缓存快得多,但我仍然希望能够发送一个";清除高速缓存";消息发送给所有实例。

整个过程运行得非常好,但我希望能够通过发送pub/sub消息来更新本地缓存,然后所有后端实例都会接收到该消息,从而清除本地缓存。

是的,我可以选择不使用本地缓存,只使用Redis,但这意味着每次Redis查找的网络流量、较慢的响应和更多的Redis资源使用。

PubSub有两种传递消息的机制:

  • 推送订阅服务器。PubSub在消息到达后立即自动向端点传递消息,如您已查看的文档中所述。

  • 拉取订阅服务器。PubSub在显式执行拉取请求后将消息传递到订阅服务器。您甚至可以让多个订阅服务器来提取消息。拉取意味着客户端应用程序连接到特定的订阅并请求消息。

这两种方法都适用于您的聊天用例,让我用以下方法来解决它:

1.不确认消息

PubSub的作用域是至少传递一次消息。这意味着一旦AppEngine实例读取并确认消息,就会从PubSub中删除该消息。您的实例可以读取消息而不进行确认,这样PubSub就可以重试传递(消息将在PubSub中保留7天的默认保留期。

在某个时刻,所有实例都必须读取相同的消息;但是您需要实现一种机制来识别已经读取的消息,以防止重复,这可能不是最好的解决方案。

2.集成Publisher应用程序,每条新的聊天消息都可以发布到Pubsub。

你需要在你的聊天应用程序所依赖的每台服务器上都有一个发布服务器。你的所有服务器(实例(都会有一个客户端,在消息到达后立即发布消息。一旦收到,pubsub的目标是至少传递一次每条消息;因此,您需要有一个名为Subscriber(Push或Pull(的不同应用程序来读取这些消息,其职责是将每条消息发送到您的所有服务器(请注意,即使它们可以是相同的实例,另一个进程也必须具有Subscriber的角色(。

一旦订阅服务器将消息发送到所有服务器,就可以对消息进行确认并从PubSub中删除该消息。由于你可能有几个订阅者,你仍然需要处理重复的消息,以防止你的客户收到两次相同的消息

最新更新