微服务架构下你的数据一致了吗?
数据一致性问题首先是个业务问题,其次才是个技术问题。在微服务架构下,我们期望每个服务职责单一,这种职责单一体现的是业务价值,如果微服务的拆分过小而导致业务难以实现,那这种拆分是不合理的,业务专家们非常有必要了解系统,从业务侧给出服务拆分的建议。
数据怎么会不一致呢?
场景一:下游服务数据状态变化时同步调用上游服务接口失败
库存服务API调用成功,库存状态变更,但订单状态变更提交到数据库时失败,结果是库存被锁定,但订单没有确认。
库存服务API调用失败,但实际上库存服务的数据变更已成功,失败原因是响应消息返回订单服务过程中网络异常,订单服务回滚数据变更,结果同样是库存被锁定但没有订单确认。
场景二:上游服务在状态变化时没有发出事件
场景三:下游服务没有办法正常消费上游服务的事件
-
上游服务发布事件的内容格式发生变化 -
上游服务发布事件的格式没变,但某些字段的可选值空间变化了,比如一些枚举值的扩充 -
下游服务内部逻辑异常(数据库、跨服务调用等)
如何消除数据不一致?
避免同时跨服务的写操作
最大努力通知 + 最大努力处理
保证幂等性
-
上游服务接口的幂等性,保证下游系统的重试逻辑可以得到正确响应 -
下游服务消费事件保证幂等性,避免因上游多发事件或事件已消费成功后再次重试产生的问题
核心业务数据补偿机制
写在最后
- 相关阅读 -