1.服务雪崩
1.1.什么是服务雪崩
比如说 1服务 2服务 3服务 他们直接的调用关系是 1接2 2接3 由于网络或者自身原因导致中间的2服务进入处理超时 而此时进入大量的请求进入导致服务2进入瘫痪,服务2的瘫痪会把古装传播对整个服务造成严重的错误 ,这就是服务雪崩
1.2处理方式
1)降级处理 生成一个托底数据 设定个时间如果超过了这个设定时间的话就给一个托底的虚假数据,之后可以通过feign接口来进行判断时候是托底数据之后进行处理虽然给的是假数据但是也比服务雪崩好。
2)熔断器
豪猪熔断器
熔断器使用时 默认是关闭状态 当处于关闭状态时所以请求都可以正常被调用,当在10秒内得到20个以上的请求并且请求的访问失败率到达百分之50的话就会把熔断器打开,打开时会向所有请求都进行降级处理,之后在指定的休眠时间后进行半开状态 允许一个请求访问如果成功的话就关闭熔断器,如果还是失败的话就继续进行全开熔断之后就循序这个过程。
2.传统事务:
2.1传统事务的四大特性 acid 主要是
原子性 : 原子性的话就是在一个事务操作中要么都成功要么则都失败。
一致性: 事务开始前和结束后,数据的状态要保持一致,比如说当一篇文章那边审核没通过时,文章已经发布了。
隔离性: 事务隔离级别分为以下四个
读未提交:一个用户修改数据还没提交 ,结果另一个用户读取到了这个数据,可能后面前面的用户还会进行修改那么这个数据就变成脏数据了。
读已提交:一个事务只能读到另一个事务提交的数据。oracle数据库就是读已提交的等级 ,会造成不可重复读的情况
可重复读: 能解决不可重复读的情况可能造成幻读,幻读的话比如本来存在三条数据,一个事务进行操作时,使用修改开始的时候是存在两条数据,另一个事务对这个数据库进行增加一条数据,那么可重复的话就会让第一个事务本来修改两天数据,结果回显到了三条数据 基本上不管这个幻读。
串行化:相当于给所有数据都上了个锁效率极低。
持久性:事务一旦提交便是永久的,不可逆
传统事务是由Connection :控制的 commit 和roback
Mybayis: SqlSessoin 封装了 Connection
3.分布式事务问题:
当一个事务服务调用fegin接口后出现了报错 但是fegin调用的接口已经执行完毕并把数据保存到了数据库,而那个使用fegin接口的任务已经出现了回滚的情况,恢复到了原来的数据造成数据库里面的数据不一致违反了数据库的一致。
3.1什么是分布式事务:
服务对数据操作造成多个数据库链接。
在分布式情况下出现的事务问题
分布式事务主要分为两种:
第一种就是多服务多数据库 :比如一个服务中 既有创建订单,扣除余额和减少库存,到最后发现库存报错了 所以这个事务需要回滚。
第二种就是多服务单数据库: 多个服务进行操作数据库 比如说把创建订单和扣除余额和减少库存都放在了一个数据库中进行操作时减少库存时出错了也需要对所有服务操作的数据进行回滚。
分布式事务有两种类型:
刚性事务:强一致性 ,在执行时时间没有误差直接完成同步。
柔性事务:最终一致即可。
3.2 CAP 理论
C指的是一致性
用户访问分布式系统中的任意节点得到的数据必须都是一样的。
A表示可用性
用户访问集群中的任意节点都是健康的可以访问的而不是超时或者拒绝。
P表示分区容错性
分区的话就是集群上的几个节点因为网络问题导致出现了分开区域的情况,前面和后面的节点链接不上。 容错的话就是虽然分区了但是已经能访问到数据。
因为cap 必须保证两个一起存在,而p又是必须存在的
cp的话:在一定时间出现分区问题的时候为了保证数据的一致性所以需要牺牲可用性,等数据恢复之后继续可以保证一致性。
ap的话:在一定时间内因为网络原因出现了分区问题这种情况下我们抛弃数据的一致性保证数据的可用性。
3.3base理论:
BASE理论的话是对cap理论的一种补充
ba代表基本可用:就是当数据访问量大时,暂停活关闭一些服务把性能主要给核心业务提高。
s代表 可以出现中间状态比如 售出商品时的已付款代发货。
e代表 最终一致性
4.seata是用来解决分布式事务的提供了常用的at xa 事务模式
seata有三个概念分别为
1.tc 事务协调者,维护全局和分支事务的状态,协调全局事务提交或者回滚
2.tm 事务管理器,定义全集事务的范围,开启全局事务的提交回滚。
3.rm 资源管理器,管理分支事务处理资源,于tc交谈以注册分支事务和报告分支事务的状态。
AT模式