微服务中的事务与查询:策略、模式及挑战
1. 微服务中的一致性策略
在微服务应用中,为了实现一致性,有多种策略可供选择,具体如下表所示:
| 编号 | 名称 | 策略 |
| ---- | ---- | ---- |
| 1 | 补偿操作 | 执行一个操作来撤销先前的操作 |
| 2 | 重试 | 重试直到成功或超时 |
| 3 | 忽略 | 出现错误时不做任何处理 |
| 4 | 重启 | 重置到初始状态并重新开始 |
| 5 | 试探性操作 | 执行试探性操作,稍后确认(或取消) |
这些策略的使用取决于服务交互的业务语义。例如,在处理大数据集时,忽略个别失败(策略 #3)可能是合理的,因为处理整个数据集的成本很高。而在与仓库交互以完成订单时,对客户购物篮中的库存商品进行试探性保留(策略 #5)可以减少超卖的可能性。
2. 事件溯源
传统上,我们假设实体状态和事件是不同的:实体状态存储在适当的事务存储中,而事件则独立发布。而事件溯源模式则是将状态完全表示为对象所经历的一系列事件。要获取特定时间点的实体状态,只需聚合该日期之前的事件。
例如,对于订单服务,传统的持久化方法会在数据库中存储订单的最新状态,而在事件溯源中,会存储导致订单状态改变的事件,通过重放这些事件可以实现当前订单状态的具体化。
事件溯源解决了企业应用中的一个常见问题,即理解如何达到当前状态,它消除了状态和事件之间的界限。但它也使复杂查询变得更加困难,因为事件存储格式通常只支持通过主键检索实体,要执行连接或按字段值过滤,就需要具体化视图。
事件溯源不是微服务应用
超级会员免费看
订阅专栏 解锁全文
171万+

被折叠的 条评论
为什么被折叠?



