我正在开发一个基于NoSQL和微服务架构的系统。
我有一个一般的架构问题 -
Le'ts说我有三种类型的文件 - 国家,城市和街道 Street持有CityId,City持有CountyId。
在乡村服务中,我需要开发一个 deleteCountry()方法:
问题:如果在删除国家/地区后此流程失败,在无交易的世界中,我会留下一些“幽灵”文档。
从NoSQL数据库中删除ghost记录的最佳做法是什么 谢谢。
答案 0 :(得分:2)
在您描述的场景中,一个解决方案可以是拥有一个可以处理进程整合的状态编排组件,类似于Saga in NServiceBus。
您可以通过处理发送2条消息的DeleteCountry
命令开始此过程,一条消息发送到国家/地区组件,另一条发送到城市组件。
两个组件都将回复'saga',并且saga将根据执行工作的组件的状态/结果来处理操作的完成或失败。
这有意义吗?
答案 1 :(得分:0)
在此示例中,聚合门在几个微服务上分开。级联更新和删除表明Countries
,Cities
和Streets
都属于同一个概念。
在微服务架构中,我应该被允许关闭CitiesService
,它不会对业务产生影响。在设计良好的微服务架构中,这种情况要么永远不会发生,要么不应该引起任何问题。如果遇到类似于你的例子的情况,那么你的微服务就错了。