我有一个在许多云运行容器上运行的服务。
当一个容器(a(收到一个web请求来做一些工作时,我需要所有其他活动容器来从弹性搜索中获取一些更新的数据。
我本以为ES会有一个";"倾听";连接类型,如firebase,但这是不可能的。
现在我必须轮询每个服务的数据库。
在使用云运行时,是否有更好的方法来实现这种跨容器同步?酒吧/酒吧是这里最好的解决方案吗?
这是不寻常的,但并非不可能实现。
首先,您必须了解实例生命周期:只有在处理请求时才分配CPU。否则,CPU是节流阀(低于5%(。这也是因为您只在处理实例时付费,而不是在实例保持温暖(并在一段时间后卸载(时付费。
也就是说,当请求没有被处理时,在后台更新实例是完全无用和低效的。
因此,我们的想法是在实例收到请求时执行某些操作。糟糕的是,这个解决方案会增加请求延迟(实例开始同步他的缓存,然后处理请求(。
最后,解决方案是将最新的缓存更新存储在某个地方。你必须在你的实例中保留同样的信息。当实例收到请求时,首先,它将自己的缓存日期和中心数据日期进行比较。
- 如果相同,没有问题,请继续处理
- 如果中心数据日期在当前实例日期之后,请更新实例数据,然后处理请求
例如,您可以将数据和数据的日期存储在Firestore、MemoryStore或任何其他数据库中。
PubSub也可以是一个解决方案,但实现起来更复杂。每个实例在启动时都必须创建一个主题的请求订阅。当实例被终止时,您必须删除该订阅。
然后,当收到请求时,您的实例必须提取订阅,获取消息(如果有的话(,并更新他的本地缓存。
可能比以前的解决方案更快,但更难实现。