可以水平扩展的服务上的分布式操作序列



我有一个微服务分布式操作序列。服务A需要告诉服务B做一些事情,一旦完成,它就会告诉服务C。序列很重要,所以我使用的是传奇模式,正如你所看到的。

我的问题是,服务B可以扩展,每个实例都需要接收消息并完成操作。该操作必须发生在每个服务B实例上。然后,服务C应该只在所有服务B实例完成其任务后才运行。

这是必须在每个实例上进行的缓存清除。我无法控制这个体系结构,所以服务B的缓存耦合到每个实例。如果可以的话,我会有一个实例的共享缓存。

我已经提出了这个编排解决方案,但它需要维护状态和大量额外的代码来处理我希望避免的边缘情况。

  1. 服务A向其知道的所有服务B实例发送相同的消息
  2. 所有服务B实例都向服务A发送成功
  3. 在最终服务B成功时,服务A向服务C发送消息

有更好的替代方案吗?

假设您不能重新安排服务B,那么您已经了解到了操作的基本复杂性:A必须跟踪服务B的实例,并且必须处理大量边缘情况。这个过程从根本上讲是有状态的。

如果缓存清除命令是幂等的(也就是说,你不在乎它在过程中是否多次发生(,你可以简化一些边缘情况处理,并且可以摆脱不太持久的状态(在失败时,你可以从头开始,而不需要重建过程中的位置(。

最新更新