分布式解决分案
2021-10-09 11:26:09 1 举报
AI智能生成
JAVA分布事解决方案
作者其他创作
大纲/内容
6.分布式任务调度
难点
分布式锁,唯一索引
分布式任务调度平台
XXL-JOB-分布式任务调度平台
Elastric-Job
TBSchedule
Quartz
7.分布式配置中心
Disconf(依赖于zookpeer)
diamond
携程(阿波罗)
Apollo和Spring Cloud Config对比
xxl-conf
nacos
8.网站跨域
9.分布式缓存
缓存的分类
多级缓存
热点问题
缓存雪崩
解决方案
事前:1.不同的key,设置不同的过期时间,让缓存失效的时间点尽量均匀
事中:2.本地 Ehcache 缓存 (二级缓存)+ Hystrix 限流&降级,避免 MySQL 崩掉。
图片
定时更新缓存策略
缓存穿透
解决方案
1.空结果进行缓存
2.布隆过滤器
缓存更新
热点key
缓存击穿
解决方案
使用互斥锁
永远不过期
1.分布式ID
1.数据库自增长序列或字段
2.uuid
3.snowkeFlake
Twitter开源的分布式ID生成算法,结果是一个long型的ID。把64-bit分别划分成多段,分开来标识序列号,工作机器和时间戳等
4.Zookeeper
可以通过顺序节点和版本号来生产唯一的ID
5. MongoDB的ObjectId
6.Redis
1.利用redis的原子操作INCR和INCRBY来执行
2.可以利用redis的lua脚本执行功能,在每个节点上通过lua脚本生成唯一ID。
2.分布式锁
1.基于数据库实现分布式锁
优点:简单
缺点:
1、数据库的可用性和性能将直接影响分布式锁的可用性及性能,所以,数据库需要双机部署、数据同步、主备切换;
2、不具备可重入的特性
3、没有锁失效机制;
4、不具备阻塞锁特性
2.基于Redis实现分布式锁
原理
加锁
解锁
缺点或者需要解决的问题
1.单点故障问题,造成锁状态不同步
2.超时后使用del 导致误删其他线程的锁
开源实现Redisson
3.基于Zookeeper实现分布式锁
排他锁
共享锁
Zookeeper和Redis分布式锁的比较
开源实现curator
Curator是Netflix公司开源的一套zookeeper客户端框架
3.分布式session
1.session复制
2.Session Sticky 方式管理
3. 缓存集中式管理
使用Redis存放Session
基于令牌(Token)方式实现Session解决方案
4.单点登录
登录
注销
5.分布式事务
分布式事务理论模型
X/Open分布式事务模型
图片
两阶段提交协议
分布式事务两阶段提交,对应技术上的XA、JTA/JTS。
图片
子主题
三阶段提交协议
原理
图片
三阶段提交协议和两阶段提交协议相比有一些不同点
CAP定理
C:Consistency,一致性,在分布式系统中的所有数据备份,在同一时刻是否同样的值。(等同于所有节点访问同一份最新的数据副本)
A:Availability,可用性,每次请求都能获取到非错的响应——但是不保证获取的数据为最新数据。(对数据更新具备高可用性)
P:Partition tolerance,分区容错性,以实际效果而言,分区相当于对通信的时限要求。系统如果不能在时限内达成数据一致性,就意味着发生了分区的情况,必须就当前操作在C和A之间做出选择。
Eureka 保证 AP
Zookeeper保证CP
BASE理论
柔性事务方案
基于消息的最终一致性
异步确保型事务(会计记账)(基于可靠消息的最终一致性,可以异步,但数据绝对不能丢,而且一定要记账成功)
示意图
基于RocketMQ的实现
图片
最大努力通知型
最大努力通知型事务(商户通知)按规律进行通知,不保证数据一定能通知成功,但会提供可查询操作接口进行核对)
原理图
支付实例
TCC补偿型
TCC框架
原理图
失败补偿:重试,记录错误日志
分布式事物框架LCN
分布式事务框架Seata
AT 模式
图片
一阶段
图片
二阶段提交
图片
二阶段回滚
图片
Seata TCC 模式
图片
SEATA Saga 模式
图片
Seata XA 模式
图片
0 条评论
下一页