我有一个在许多云运行容器上运行的服务。
当单个容器(A)接收到一个web请求来完成某些工作时,我需要所有其他活动容器从elasticsearch获取一些更新的数据。
我原以为ES会有一个“监听”类型的连接,如防火墙,但这是不可能的。
现在,我必须从每个服务中轮询数据库。
在使用云运行时,是否有更好的方法来实现这种跨容器同步?酒吧/潜艇是这里最好的解决方案吗?
发布于 2022-08-02 15:09:10
这是不寻常的,但并非不可能实现。
首先,您必须了解实例生命周期:只有在处理请求时才分配CPU。否则,CPU是节气门(低于5%)。这也是因为您只在处理实例时支付,而不是当实例保持温暖时(并在一段时间后卸载)。
尽管如此,在没有处理请求的情况下,在后台更新实例是完全无用和低效的。
因此,我们的想法是在实例接收到请求时执行一些操作。不好的是,这个解决方案会增加请求延迟(实例开始同步缓存,然后处理请求)。
最后,解决方案是在某个地方存储最新的缓存更新。在你的例子中,你必须保留同样的信息。当实例接收到请求时,首先,它会将自己的缓存日期与中央数据日期进行比较。
如果是相同的
。
例如,您可以将数据和该数据的日期存储在Firestore、MemoryStore或任何其他数据库中。
PubSub也可以是一个解决方案,但更复杂的实现。每个实例,当它们开始创建一个主题的拉订阅。当该实例被杀死时,您必须删除该订阅。
然后,当请求传入时,您的实例必须提取订阅,并获取消息(如果有的话),并更新他的本地缓存。
可能比以前的解决方案更快,但更难实现。
https://stackoverflow.com/questions/73197870
复制相似问题