微服务中的事务与查询:同步、异步与Saga模式解析
1. 同步与异步通信方式对比
1.1 同步方式下的卖单流程
在同步方式处理卖单时,订单服务负责协调其他服务的行为,按顺序调用一系列步骤,直至订单成功投放市场。具体步骤如下:
1. 创建订单
2. 预留库存
3. 确认预留
4. 确认收费
5. 订单投放
6. 确认投放
7. 投放市场
8. 收取费用
若任何一个步骤失败,订单服务需负责与其他服务发起回滚操作,如撤销收费。这种方式下,订单服务承担了大量责任:
- 明确知道需要调用哪些服务以及调用顺序。
- 需清楚当下游服务出现错误或因业务规则无法继续执行时应采取的措施。
虽然这种交互方式逻辑清晰、顺序明确,易于理解,但也使订单服务与其他服务紧密耦合,限制了其独立性,增加了未来变更的难度。
1.2 异步方式下的事件驱动设计
可以通过事件重新设计该场景。每个服务订阅感兴趣的事件,以确定何时执行相应工作:
1. 用户通过UI发出卖单请求,应用发布 OrderRequested 事件。
2. 订单服务获取该事件,处理后向事件队列发布 OrderCreated 事件。
3. 交易和费用服务获取 OrderCreated 事件,各自执行工作并发布事件通知完成情况。
4. 市场服务等待费用收取和库存预留的通知事件,两者都到达后,将订单投放市场,并发布最终事件。
事件驱动允许采用乐观的
超级会员免费看
订阅专栏 解锁全文

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



