我正在开发一个基于NoSQL和微服务架构的系统。
我有一个一般性的架构问题 -
假设我有三种类型的文档 - 国家/地区、城市和街道。
其中 Street 持有 CityId,City 持有 CountyId。
在国家/地区服务中,我需要开发一个 deleteCountry() 方法:
- 删除国家/地区。
- 请求城市服务删除所有按国家/地区 ID 排列的城市。
- 然后,城市服务会请求所有街道服务删除 cityId 的所有街道。
问题:如果在删除国家/地区后此过程失败,在无交易的世界中,我会留下一些“幽灵”文档。
- 我可以管理编排中的故障,以便将其清理干净 在它之后,但这不是可扩展的(代码方面)解决方案。
- 我可以使用编排模式,但它并不能真正解决问题。
- 我可以运行定期清理过程来清理文档,但它会 难以管理,并且会留下问题仍然存在的时间漏洞。
从 NoSQL 数据库中删除幽灵记录的最佳实践是什么。
谢谢。
最佳答案
在您描述的场景中,一种解决方案可能是拥有一个可以处理流程完整性的有状态编排组件,例如 Saga in NServiceBus .
您可以通过处理 DeleteCountry
命令来启动该过程,该命令会发送 2 条消息,一条发送到国家/地区组件,另一条发送给城市组件。
两个组件都会回复“saga”,saga 将根据执行工作的组件的状态/结果来处理操作的完成或失败。
这有意义吗?
关于database - 微服务 - 在无事务系统中处理幽灵记录的最佳实践,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39306577/