微服务 - 在无交易系统中处理虚假记录的最佳实践

时间:2016-09-03 11:50:43

标签: database microservices nosql

我正在开发一个基于NoSQL和微服务架构的系统。

我有一个一般的架构问题 -

Le'ts说我有三种类型的文件 - 国家,城市和街道 Street持有CityId,City持有CountyId。

在乡村服务中,我需要开发一个 deleteCountry()方法:

  1. 删除国家/地区。
  2. 请求城市服务按国家/地区ID删除所有城市。
  3. 城市服务轮流请求所有街道服务按cityIds删除所有街道。
  4. 问题:如果在删除国家/地区后此流程失败,在无交易的世界中,我会留下一些“幽灵”文档。

    • 我可以管理我的业务流程中的故障,以便它可以清理 在它之后,但这不是可扩展的(代码方式)解决方案。
    • 我可以使用编排模式,但它并没有真正解决它。
    • 我可以运行一个定期扫描过程来清理文件,但它会 很难管理,并且会留下问题仍然存在的时间漏洞。

    从NoSQL数据库中删除ghost记录的最佳做法是什么 谢谢。

2 个答案:

答案 0 :(得分:2)

在您描述的场景中,一个解决方案可以是拥有一个可以处理进程整合的状态编排组件,类似于Saga in NServiceBus

您可以通过处理发送2条消息的DeleteCountry命令开始此过程,一条消息发送到国家/地区组件,另一条发送到城市组件。

两个组件都将回复'saga',并且saga将根据执行工作的组件的状态/结果来处理操作的完成或失败。

这有意义吗?

答案 1 :(得分:0)

在此示例中,聚合门在几个微服务上分开。级联更新和删除表明CountriesCitiesStreets都属于同一个概念。

在微服务架构中,我应该被允许关闭CitiesService,它不会对业务产生影响。在设计良好的微服务架构中,这种情况要么永远不会发生,要么不应该引起任何问题。如果遇到类似于你的例子的情况,那么你的微服务就错了。