kubernetes事件重播编排

时间:2019-03-20 16:12:45

标签: kubernetes cqrs event-sourcing replay

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

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

(据我所知,问题是,kubernetes似乎不足以应对这种情况。

知道我将如何做这样的事情吗?

1 个答案:

答案 0 :(得分:0)

我不知道您的系统的细节,但是我想到了两种解决方案。

使用readinessProbe

您可以为作家服务定义readinessProbe。重写完成后,使其报告服务已就绪。然后,rolling updater将知道何时关闭旧版本的编写器并开始向新版本提供流量。您唯一需要做的事情就是通知查看器切换到新的数据源。这可以通过编写者在查看器服务上调用一些API来完成。

使用单独的过程

您可以创建一个特殊的过程,该过程将执行使用Kubernetes API描述的过程。它比第一个解决方案要花更多的精力,但是可以让您更好地控制整个过程。它会观察您的存储库中是否有新版本的writer,如果是,它将启动新服务,等待其准备就绪,杀死旧的writer并通知查看器。