在基于微服务的系统中实现数据库一致性的最佳方式是什么?
在GOTO in Berlin岁时,Martin Fowler谈到了微服务,他提到的一条"规则"是保留"每服务"数据库,这意味着服务不能直接连接到另一个服务"拥有"的数据库.
这是超级好和优雅,但在实践中,它变得有点棘手.假设您有几项服务:
- 前台
- 订单管理服务
- 忠诚计划服务
现在,客户在您的前端进行购买,它将调用订单管理服务,该服务将保存数据库中的所有内容--没问题.此时,还将呼叫忠诚度计划服务,以便它从您的帐户贷记/借记积分.
现在,当所有内容都在同一个DB/DB服务器上时,一切都变得很容易,因为您可以在一个事务中运行所有内容:如果忠诚度计划服务无法写入数据库,我们可以回滚整个事务.
当我们在多个服务中执行DB操作时,这是不可能的,因为我们不依赖一个连接/不利用运行单个事务的优势.
我很想听听你的建议!..提前谢谢!