0

我有一个托管在 kubernetes 中的事件源 CQRS 架构。我有一个编写器(“非规范化器服务”),它监听事件并将非规范化视图写入数据存储。然后,这些视图由单独的视图服务提供。当通过具有新投影的部署更新非规范化器图像时,它会从头开始重播所有事件并将新视图写入不同的数据存储。

所以我需要 2 个反规范化器实例,一个使用旧代码,另一个通过新代码重播事件。当新代码完成重放时,我需要:1)向视图服务发出信号以切换到新写入的数据存储,然后,2)停止旧的非规范化部署,因为它不再需要。

问题是,(据我所知)kubernetes 似乎没有能力处理这种情况。

知道我会怎么做这样的事情吗?

4

1 回答 1

0

我不知道您系统的具体情况,但我想到了两种解决方案。

使用 readinessProbe

你可以为你的 writer 服务定义一个readinessProbe。重写完成后,让它报告服务已准备就绪。然后,滚动更新程序将知道何时关闭旧版本的编写器并开始为新版本提供流量。您唯一需要做的就是通知查看者切换到新的数据源。这可以通过编写者在查看器服务上调用一些 API 来完成。

使用单独的过程

您可以创建一个特殊的进程来执行您使用 Kubernetes API 描述的过程。它比第一个解决方案需要更多的工作,但可以让您更好地控制整个过程。如果有新版本的编写器,它将观察您的存储库,如果是,它将启动一个新服务,等待它准备好,杀死旧编写器并通知查看器。

于 2019-05-07T15:43:44.330 回答