【独家干货】线下沙龙嘉宾讨论技术点大集合-李艳鹏篇
1
一致性问题产生的背景
JEE架构
SSH架构
Web Service
ESB
微服务
微服务团队管理
2
生活中遇见的一致性问题
假如你想要享受生活的随意,只想买个两居,不想让房贷有太大压力,而你媳妇却想要买个三居,还得带花园的,那么你们就不一致了,不一致导致生活不愉快、不协调,严重情况下还会吵架,可见生活中的不一致问题影响很大。
服务化系统中遇到的不一致的问题
1、转账
2、下订单和扣库存
3、同步超时
4、异步回调超时
5、掉单
6、系统间状态不一致
7、缓存和数据库不一致
8、本地缓存节点间不一致
9、缓存数据结构不一致
3
酸碱平衡原理
酸碱平衡 – 酸(ACID)
A: Atomicity,原子性
C: Consistency,一致性
I: Isolation,隔离性
D: Durability,持久性
酸碱平衡 – 帽子(CAP)
C:Consistency,一致性, 数据一致更新,所有数据变动都是同步的
A:Availability,可用性, 好的响应性能,完全的可用性指的是在任何故障模型下,服务都会在有限的时间处理响应
P:Partition tolerance,分区容错性,可靠性
酸碱平衡 – 碱(BASE)
BA:Basically Available,基本可用
S:Soft State,软状态,状态可以有一段时间不同步
E:Eventually Consistent,最终一致,最终数据是一致的就可以了,而不是时时保持强一致
4
分布式一致性协议
两阶段
三阶段
TCC
5
最终一致性
查询模式
补偿模式
异步确保模式
定期校对模式
定期校对模式
可靠消息模式
缓存一致性模式
1、缓存是用来加速的,牺牲了一致性,获得高性能,只适合特殊场景;
2、保持数据库和缓存的强一致性是个伪命题 ;
3、如果性能要求不是非常的高,尽量使用分布式缓存,而不要使用本地缓存
4、种缓存的时候一定种完全,如果缓存数据的一部分有效,一部分无效,宁可放弃种缓存,也不要把部分数据种入缓存;
5、通常情况下读的顺序要先缓存,后数据库,写的顺序要先数据库,后缓存。
6
微服务交互模式
同步调用
受理模式
消息模式
同步与异步的抉择
1、尽量使用异步来替换同步操作;
2、能用同步解决的问题,不要引入异步化。
同步两状态接口超时
同步三状态接口超时
异步接口超时
异步内部超时
异步回调超时
消息队列发送超时
消息队列接收超时
超时补偿原则
生活案例:
模式:
1、服务1调用服务2,如果服务2响应服务1,并且告诉服务1消息我接收了,那么服务1就的任务就结束了,如果服务2处理失败,服务2应该负责重试或者补偿。在这种情况下,服务2通常先持久消息后再告诉服务1接收成功,随后服务2才开始处理持久的消息,避免服务进程被杀掉丢失消息的情况。
2、服务1调用服务2,如果服务2没有给出明确的接收响应,那么服务1应该持续尝试重试,直到服务2明确表达已经接收消息。这种情况下,容易出现消息重复,因此在服务2中通常要保证滤重或者幂等性。
7
其他问题
迁移开关的设计
1、不要用统一配置开关 ;
2、不要用节点内独立的开关 ;
3、迁移开关必须使用订单开关 ;
4、开关要有权限控制 ;
5、开关要能开能关。
Java我最强,关心Java人成长的技术社区,加入精品技术群请公众号后台留言“加群”。投稿合作请邮件至:[email protected],注明“Java我最强投稿”。
Java我最强
关心Java人成长的技术社区
快速关注
1
一致性问题产生的背景
2
生活中遇见的一致性问题
2
生活中遇见的一致性问题