在Google云运行容器之间共享事件的最佳方式是什么



我有一个在许多云运行容器上运行的服务。

当一个容器(a(收到一个web请求来做一些工作时,我需要所有其他活动容器来从弹性搜索中获取一些更新的数据。

我本以为ES会有一个";"倾听";连接类型,如firebase,但这是不可能的。

现在我必须轮询每个服务的数据库。

在使用云运行时,是否有更好的方法来实现这种跨容器同步?酒吧/酒吧是这里最好的解决方案吗?

这是不寻常的,但并非不可能实现。

首先,您必须了解实例生命周期:只有在处理请求时才分配CPU。否则,CPU是节流阀(低于5%(。这也是因为您只在处理实例时付费,而不是在实例保持温暖(并在一段时间后卸载(时付费。

也就是说,当请求没有被处理时,在后台更新实例是完全无用和低效的。

因此,我们的想法是在实例收到请求时执行某些操作。糟糕的是,这个解决方案会增加请求延迟(实例开始同步他的缓存,然后处理请求(。

最后,解决方案是将最新的缓存更新存储在某个地方。你必须在你的实例中保留同样的信息。当实例收到请求时,首先,它将自己的缓存日期和中心数据日期进行比较。

  • 如果相同,没有问题,请继续处理
  • 如果中心数据日期在当前实例日期之后,请更新实例数据,然后处理请求

例如,您可以将数据和数据的日期存储在Firestore、MemoryStore或任何其他数据库中。


PubSub也可以是一个解决方案,但实现起来更复杂。每个实例在启动时都必须创建一个主题的请求订阅。当实例被终止时,您必须删除该订阅。

然后,当收到请求时,您的实例必须提取订阅,获取消息(如果有的话(,并更新他的本地缓存。

可能比以前的解决方案更快,但更难实现。

最新更新