【独家干货】线下沙龙嘉宾讨论技术点大集合-李艳鹏篇


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人成长的技术社区,加入精品技术群请公众号后台留言“加群”。投稿合作请邮件至:javawozuiqiang@qq.com,注明“Java我最强投稿”。



Java我最强

关心Java人成长的技术社区

快速关注


1

一致性问题产生的背景


2

生活中遇见的一致性问题

ž

2

生活中遇见的一致性问题

ž

阅读更多
个人分类: 原创 java
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

【独家干货】线下沙龙嘉宾讨论技术点大集合-李艳鹏篇

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭