• SpringCloud(三)Sentinel、Seata、多级缓存


    Sentinel

    雪崩问题

    微服务之间相互调用,因为调用链中的一个服务故障,引起整个链路都无法访问的情况。

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Sentinel与Hystrix

    在这里插入图片描述

    sentinel使用案例

    sentinel官网
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    访问微服务任意端点,即可触发sentinel监控:
    在这里插入图片描述

    限流规则

    在这里插入图片描述
    在这里插入图片描述

    流控模式

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述

    在这里插入图片描述

    service层方法添加@SentinelResource注解
    在这里插入图片描述
    在这里插入图片描述
    对来源于query入口的请求限流。
    在这里插入图片描述

    流控效果

    在这里插入图片描述
    在这里插入图片描述

    热点参数限流

    在这里插入图片描述
    在这里插入图片描述

    隔离和降级

    在这里插入图片描述

    Feign整合Sentinel

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    线程隔离

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    熔断降级

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    授权规则与规则持续化

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    自定义异常结果

    在这里插入图片描述
    在这里插入图片描述

    规则管理模式

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    Seata

    分布式事务问题

    在这里插入图片描述
    在这里插入图片描述

    理论基础

    CAP定理

    CAP 也就是 Consistency(一致性)、Availability(可用性)、Partition Tolerance(分区容错性) 这三个单词首字母组合。

    在这里插入图片描述

    CAP 定理(CAP theorem)指出对于一个分布式系统来说,当设计读写操作时,只能同时满足以下三点中的两个:

    C:一致性(Consistency) : 所有节点访问同一份最新的数据副本
    A:可用性(Availability): 非故障的节点在合理的时间内返回合理的响应(不是错误或者超时的响应)。
    P:分区容错性(Partition Tolerance) : 分布式系统出现网络分区的时候,仍然能够对外提供服务。

    在这里插入图片描述

    由于当前的网络服务,网络故障是不可避免的,那么在保证分区容错性(P, Partition Tolerance)的前提下,可用性(A,Avaliability)和一致性(C, Consistency)就只能保证一个,因为你要保证可用,在分区的情况下,发生网络故障一定无法保证一致性,在保证一致性的情况下,就只能把网络故障断开的分区的机器停用,那这就违背了可用性。

    CAP理论告诉我们,在保证P的前提下,只能出现CP或AP的架构

    在这里插入图片描述

    BASE理论

    在这里插入图片描述

    在这里插入图片描述
    在这里插入图片描述

    Seata架构

    • TC(Transaction Coordinator)事务协调者:维护全局和分支事务状态,协调全局事务提交或者回滚。
    • TM(Transaction Manager)事务管理器:定义全局事务的范围,提交或者回滚全局事务。
    • RM(Resource Manager)资源管理器:管理分支事务处理的资源,注册分支事务并报告分支事务的状态给TC,驱动分支事务提交或回滚。

    在这里插入图片描述
    在这里插入图片描述

    部署TC服务

    微服务集成Seata

    在这里插入图片描述
    在这里插入图片描述

    Seata的四种模式

    XA - 强一致性

    XA模式:强一致性模式,几乎所有主流的数据库都对XA规范提供了支持。

    缺点在于:

    • XA模式一阶段需要锁定数据库资源,等待二阶段结束才释放,性能较差
    • XA模式依赖于关系型数据库来实现事务。

    正常情况下:
    在这里插入图片描述
    回滚情况下:
    在这里插入图片描述
    seata的XA模式:
    seata对XA模式做了一些调整:

    RM(资源管理者)一阶段工作:

    • 注册分支事务到TC
    • 执行分支事务SQL但不提交
    • 报告执行状态到TC

    TC(事务协调者)二阶段工作:
    TC检测各个分支事务执行状态

    • a、如果都成功,通知所有的RM提交事务
    • b、如果有失败,通知所有的RM回滚事务

    RM(资源管理者)二阶段工作:
    接收TC(事务协调者)指令,提交或回滚事务

    在这里插入图片描述

    代码中实现:
    直接在yaml中设置XA模式,然后使用时用@GlobalTransaction注解。
    在这里插入图片描述

    AT(Auto Transaction)- 最终一致性

    XA模型中多个资源需要相互等待事务提交状态都报告后,才可以执行最后的提交或者回滚,期间会锁定资源,由于多个事务相互等待,可能导致资源锁定周期过长。

    AT模式强调最终一致性,同样是分阶段提交的事务模型:
    阶段一RM的工作:

    • 注册分支事务到TC
    • 记录Resource的undo-log(数据快照)
    • 每个Resource直接执行业务SQL并提交
    • 报告事务状态到TC

    阶段二:
    如果成功提交,则RM删除undo-log
    如果失败回归,则RM根据快照记录恢复到执行前

    在这里插入图片描述

    AT模式与XA模式最大的区别是什么?
    • XA模式一阶段不提交事务,锁定资源,AT模式一阶段直接提交,不锁定资源。
    • XA模式依赖数据库机制实现回顾,AT模式利用undo-log数据快照实现数据回滚。
    • XA模式强一致性,AT模式是最终一致,因为没有锁定资源,可能导致脏写问题。
    脏写与写隔离

    在这里插入图片描述
    解决脏写问题,可以由TC记录正在操作某行数据的事务,该事务持有全局锁,具备执行权,即AT模式的写隔离,这样AT模式相当于锁的粒度就降低了。

    在这里插入图片描述

    优缺点

    AT模式的优点:

    • 一阶段完成直接提交事务,释放数据库资源,性能比较好
    • 利用全局锁实现读写隔离
    • 没有代码侵入,框架自动完成回滚和提交

    AT模式的缺点:

    • 两阶段之间处于软状态,属于最终一致性
    • 框架的快照功能会影响性能,但比XA模式好很多

    实现:
    在这里插入图片描述

    TCC(Try-Comfirm-Cancel)- 无锁模式

    TCC模式与AT模非常相似,每个阶段都是独立事务,不同的是TCC通过人工编码来实现数据恢复,需要实现三个方法:

    • Try:资源检测和预留
    • Confirm:完成资源操作业务,要求Try成功Comfirm一定要成功
    • Cancel:预留资源释放,可以理解为try的反向操作

    在这里插入图片描述
    在这里插入图片描述

    TCC的优点和缺点

    优点:

    • 一阶段完成直接提交事务,释放数据库资源,性能好
    • 相比AT模式,无需生成快照,无需使用全局锁,性能最强
    • 不依赖数据库事务,而是依赖补偿操作,可以用于非事务型数据库

    缺点:

    • 有代码侵入,需要人为编写try、confirm、cancel接口,太麻烦
    • 软状态,事务是最终一致的
    • 需要考虑confirm和cancel的失败情况,最好幂等处理。
    空回滚和业务悬挂

    在这里插入图片描述

    使用案例

    在这里插入图片描述
    在这里插入图片描述
    具体编码时:
    首先申明TCC服务接口,定义好TCC的三个方法:
    在这里插入图片描述

    在service层编写实际的TCC逻辑
    在这里插入图片描述

    Saga模式

    Saga模式是Seata提供的长事务解决方案,也分为两个阶段:

    • 一阶段:直接提交本地事务
    • 二阶段:成功则什么都不做,失败则通过编写补偿业务来回滚

    在这里插入图片描述

    四种模式对比

    在这里插入图片描述

    多级缓存

    • 客户端缓存
    • Nginx本地缓存
    • Redis缓存
    • JVM进程缓存

    在这里插入图片描述

  • 相关阅读:
    Anolis 8.6 安装 Drawio
    长短期记忆网络(LSTM)
    概率论和数理统计(四)方差分析与回归分析
    如何通过Navicat导入sql文件
    【算法题】2874. 有序三元组中的最大值 II
    十二、流程控制-循环
    排列组合总结
    spring组件之BeanFactory
    数据结构(7-2广度~~7-15)所有代码
    软考高级系统架构设计师系列之:案例分析典型试题七
  • 原文地址:https://blog.csdn.net/baiduwaimai/article/details/133611432