《彻底解决分布式系统一致性问题》直播者:李艳鹏 笔记作者:JKXQJ
一致性问题产生的背景
JEE架构:WEB容器—组合业务逻辑—>EJB容器—数据存ORM—>数据库
SSH架构:Struts MVC—组合业务逻辑—>Spring容器—Hibernate ORM–>数据库
Web Service: WebService–> 注册服务(WSDL、UDDI)–>发现服务(UDDI)–> 服务调用(SOAP), 解耦,有中心服务,分布式并不推荐
ESB:企业服务总线
微服务:倡导REST服务,JSON传递数据,现在主流的。
常见的不一致的问题
- 转账
- 下订单和扣库存
- 同步超时
- 异步回调超时
- 调单
- 系统间状态不一致
- 缓存和数据库不一致
- 本地缓存节点间不一致
- 缓存数据结构不一致
酸碱平衡原理
酸碱平衡原理 ACID
- A:原子性
- C:一致性
- I: 隔离性
- D:持久性
酸碱平衡-帽子 CAP
- C: 一致性、数据一致更新,所有数据变动都是同步的
- A: 可用性,好的相应性能,完全的可用性是指在任何故障模型下,服务都可以在有限的时间处理相应
- P:分区容错性、可靠性
酸碱平衡-碱 Base
BA: 基本可用
S: 软状态,状态可以有一段时间不同步
E: 最终一致,最终数据是一致的就可以了,而不是时时保持一致
分布式一致性协议
两阶段
Created with Raphaël 2.1.0协调者协调者参与者1参与者1参与者2参与者2准备写redo、undo日志、锁定资源、执行操作、不提交准备成功准备写redo、undo日志、锁定资源、执行操作、不提交准备成功提交提交操作,释放资源提交成功提交提交操作,释放资源提交成功
三阶段
Created with Raphaël 2.1.0协调者协调者参与者1参与者1参与者2参与者2询问校验、超时导致中止可以执行询问校验、超时导致中止可以执行准备写redo、undo日志、锁定资源、执行操作、不提交准备成功准备写redo、undo日志、锁定资源、执行操作、不提交准备成功提交提交操作,释放资源提交成功提交提交操作,释放资源提交成功
TCC
查询模式
补偿模式
定期校对模式
可靠消息模式
缓存一致性模式
同步调用模式
消息模式
同步异步的抉择
- 尽量使用异步来替换同步操作
- 能用同步解决的问题就不要引入异步化