【发布时间】:2020-02-20 01:16:20
【问题描述】:
我有这种情况:
微服务 MS1 有一个数据库,假设有 N 条记录,并且外部源提供了新数据,如果有效,则应将其持久化
验证过程由作为 kafka 主题 T1 消费者的微服务 MS2 执行,MS1 在该主题上发送新数据
潜在 N+1 记录的验证涉及对所有先前 N 记录的查询。如果验证成功,MS2 会在主题 T2 上生成结果,MS1 是主题 T2,因此它可以持久化新的有效数据。
问题如下。
假设 N+1 个有效的新数据太大,需要很长时间才能写入 db:可能会发生 potential N+2 记录的验证失败,因为查询 db只有N条可用记录,而不是N+1条。
是否有可能以某种方式使用 kafka 功能暂停验证过程,直到 MS1 提交了 db 上的先前有效数据?
不使用 kafka,我发现确保对最新数据库进行验证查询的唯一方法是在两个微服务之间进行休息调用,因此要等待对方的响应。
非常感谢任何帮助或新的解决方案。
谢谢!
【问题讨论】:
-
为什么 MS2 验证 MS1 的数据?这听起来有点奇怪。每个微服务都应该验证它自己的数据。验证是特定微服务业务逻辑的一部分,除非您有充分的理由,否则不应扩展到 2 个服务?
-
@xargs 因为 MS2 中的验证逻辑被许多其他服务共享使用
-
为什么会这样?通常,vlaidation 逻辑应该与特定微服务的其余逻辑放在一起。如果您有一些通用逻辑,即验证一些通用事物并在多个微服务中使用,您可以将其提取到库中,并在您需要的微服务中重用它。您能告诉我您将系统拆分为微服务的标准是什么吗?
-
如果我对验证器进行更改并将其作为库包含,我必须重建并重新部署每个使用它的应用程序
-
我根据您的情况发布了一个带有可能选项的答案。
标签: rest apache-kafka microservices