最近,我在使用微服务时遇到了一些问题。我的主要应用程序使用关系数据库,微服务使用Mongo DB并为某些模型提供带有CRUD方法的ReST API。 CRUD方法也在应用程序中实现。来自前端的调用首先转到应用程序,在关系数据库中创建一条新记录(仅在其中保存一些字段),然后将模型外部保存-在Mongo DB中。最后,事务被提交。因此,如果出现问题并回滚了事务,则该API调用将已经执行。在创建的情况下,我只能从Mongo DB中删除新创建的记录,但是在编辑的情况下,我不知道该怎么做。
想法之一是用关系数据库中的记录覆盖Mongo DB中的模型,但是在这种情况下,数据将是混杂的,因为并非所有字段都保存在那里。
对此有什么想法吗?
答案 0 :(得分:0)
执行此操作的方法有多种:
使用2PC(两阶段提交):您基本上要求在任何分布式服务中进行操作,然后再确认/回滚。
使用sagas :使用sagas的目的是为您在分布式服务中执行的操作提供某种“回滚操作”。当您需要回滚已执行的操作时,请致电服务并指示回滚。
此处提供有关sagas的更多信息:https://microservices.io/patterns/data/saga.html