繁体   English   中英

Google Cloud Pub/Sub 和多个接收器

[英]Google Cloud Pub/Sub and multiple receivers

我的用例是这样的:

我有 X 个 App Engine NodeJS 后端实例。 我使用 Redis Cloud Memorystore 作为缓存层。 为了最大限度地减少 Redis 的使用并提高性能,每个后端实例也有自己的本地缓存。

规则是这样的,当请求进入后端实例时:

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

本地缓存比 Redis 缓存超时快得多,但我仍然希望能够向所有实例发送“清除缓存”消息。

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

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

这有可能吗,还是每条推送的消息只有 1 个接收者? 我知道接收者可以选择不确认消息,但是如何确保所有实例都已收到,以及如何知道已经发生,所以最后一个实例可以发送确认? 似乎不可能

您的用例并不常见,但 IMO,您有 2 个解决方案:

  1. 使用 Redis

将清除缓存日期时间放入 redis。对于每个请求,App Engine 实例都会调用清除缓存日期时间。 如果本地值(之前的清缓存值,如果没有先例调用(新实例案例)则为null)落后于Redis值,则清空本地缓存。 否则继续

  1. 使用发布订阅

(不是我的首选)当实例启动时,在 PubSub 主题上创建请求订阅。 拉取消息。 当您收到一个时,清除缓存。

使用 PubSub,当您在主题中发布消息时,它会在所有订阅中复制。 使用该模式,所有实例都将有订阅并可以接收消息。

但是,您可能会达到订阅配额的数量。 要限制这一点,请将过期值设置为 1 天,以在 1 天后自动清除没有任何订阅者的订阅。

不确定 App Engine 实例上是否有拆卸通知,让您有时间很好地删除订阅。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM