《彻底解决分布式系统一致性问题》学习笔记

《彻底解决分布式系统一致性问题》直播者:李艳鹏 笔记作者: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

查询模式

补偿模式

定期校对模式

可靠消息模式

缓存一致性模式

同步调用模式

消息模式

同步异步的抉择

  • 尽量使用异步来替换同步操作
  • 能用同步解决的问题就不要引入异步化

最终一致性模式

微服务超时模式

常见的不一致问题的解决

原作笔记:
http://www.jianshu.com/p/1156151e20c8

你可能感兴趣的:(【JavaWeb】)