面试题答案
一键面试Saga模式在社交分布式系统中的基本工作原理
- 事务分解:在社交分布式系统中,一个复杂业务操作(如发布带图片的动态并同时通知好友)会被拆分成多个本地事务。例如,发布动态本身是一个本地事务,向图片存储服务上传图片是另一个本地事务,通知好友又是一个本地事务。每个本地事务都在各自的服务中独立执行。
- 协调器:引入一个协调器组件来管理整个Saga事务流程。协调器负责按顺序发起各个本地事务。比如在上述例子中,协调器先让动态发布服务执行发布动态的本地事务,成功后再触发图片上传服务的本地事务,最后通知好友服务执行通知事务。
- 事件驱动:各个本地事务完成后,会通过事件的方式通知协调器。例如图片上传服务完成图片上传后,会发送一个“图片上传成功”的事件给协调器,协调器根据收到的事件来决定下一步操作,如继续触发下一个本地事务或在出现问题时启动补偿操作。
Saga模式处理事务一致性问题的方式
- 正向执行:Saga事务按照预定的顺序依次执行各个本地事务。只要所有本地事务都能成功执行,整个Saga事务就能保证一致性。比如在社交系统中,若发布动态、上传图片、通知好友这一系列本地事务都顺利完成,那么用户发布带图片动态并通知好友的业务目标就达成,数据在各个相关服务中保持一致状态。
- 补偿机制:如果在Saga事务执行过程中某个本地事务失败,协调器会启动补偿操作。补偿操作是与正向操作相反的操作,用于撤销之前已成功执行的本地事务的影响。例如若图片上传失败,协调器会触发发布动态服务的补偿事务,将刚发布的动态删除,以保证整个业务操作回到初始状态,避免出现数据不一致,如已发布动态但无对应图片的情况。
- 重试机制:对于一些可恢复的错误(如网络短暂故障),协调器可以选择重试失败的本地事务。例如图片上传服务因网络闪断导致上传失败,协调器可在短暂延迟后重试图片上传事务,若重试成功则继续按顺序执行后续事务,确保事务最终达成一致性。