Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)

 

目录

分布式流量防护_SentinelResource配置详解之fallback和 blockHandler都配置

分布式流量防护_实时监控数据

分布式流量防护_Sentinel为什么需要持久化 

分布式流量防护_Sentinel组件二次开发

分布式事物处理_认识本地事物 

数据库事务的四大特性ACID


 

分布式流量防护_SentinelResource配置详解之fallback和 blockHandler都配置

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第1张图片

 /**
     * 根据id查询支付信息
     * 测试fallback
     * @param id
     * @return
     */
    @SentinelResource(value = "orderfindById",
//           fallback = "testFallBack",fallbackClass = PaymentServiceFallback.class)
            fallback = "testFallBack",fallbackClass = PaymentServiceFallback.class,
            blockHandler = "testBlockHeader",blockHandlerClass =PaymentServiceFallback.class)
    @GetMapping("findById")
    public String test(String id){
        if (id.equals("1")){
            throw  new RuntimeException("制造接口异常.");
       }
        return iPaymentFeginService.findById(id);
   }

 总结

1、fallback是针对方法出现异常了,则会进入fallback方法。

2、blockhandler是针对流控设置,超出规则,则会进入blockhandler方法。

3、blockHandler 和 fallback 都进行了配置,则被限流降级而抛出BlockException时只会进入 blockHandler 处理逻辑。

4、若未配置 blockHandler、fallback 和 defaultFallback,则被限流降级时会将 BlockException 直接抛出。

 实时效果反馈

1.下列描述SentinelResource注解fallback和blockHandler都配 置正确的是。

A 全部进入fallback

B 全部进入blockHandler

C 限流降级进入blockHandler,接口异常进入fallback

D 以上都是正确

分布式流量防护_实时监控数据

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第2张图片

Sentinel 提供对所有资源的实时监控。如果需要实时监控,客户端需引入以下依赖(以 Maven 为例): 


        
            com.alibaba.csp
            sentinel-transport-netty-http
            1.8.3
        

注意: 引入上述依赖后,客户端便会主动连接 Sentinel 控制台。通过 Sentinel 控制台即可查看客户端的实时监控。

设定启动参数

只使用基本的流控功能的话,是不用额外指定启动参数的。但如果要接入Dashboard进行实时监控,则需要在应用启动时加入JVM参 数指定控制台地址和端口。 

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第3张图片

内容如下

-
Dcsp.sentinel.dashboard.server=192.168.66.101:8858

 其他相关参数有:

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第4张图片

界面展示

应用的监控指标数据已经保存到Dashboard了,这个时候,我们在控制台界面来查看监控数据: 

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第5张图片 

分布式流量防护_Sentinel为什么需要持久化 

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第6张图片

为什么需要持久化 

Sentinel的所有规则都是内存存储,重启后所有规则都会丢失。在 生产环境下,我们必须确保这些规则的持久化,避免丢失。

项目启动成功日志打印

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第7张图片

Sentinel支持三种规则管理模式

原始模式

Sentinel的默认模式,将规则保存在内存,重启服务会丢失。

pull模式

控制台将配置的规则推送到Sentinel客户端,而客户端会将配置规则保存在本地文件或数据库中。以后会定时去本地文件或数据库中 查询,更新本地规则。 

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第8张图片

push模式 

控制台将配置规则推送到远程配置中心,例如Nacos。Sentinel客户端监听Nacos,获取配置变更的推送消息,完成本地配置更新。

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第9张图片 

实时效果反馈 

1.Sentienl为什么需要配置持久化_____。

A 解决单点故障问题

B 解决数据安全问题

C 解决重启后所有规则都会丢失

D 以上都错误

2. Sentienl规则管理模式哪种是将配置规则推送到远程配置中心 ____。

A pull模式

B push模式

C 原始模式

D 以上都是错误

分布式流量防护_Sentinel组件二次开发

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第10张图片

在开始二次开发之前,我们需要将Sentinel 的代码下载到本地。你可以从GitHub 的Releases页面中找到1.8.3版本,在该版本下的 Assets面板中下载 Source code源文件。

下载地址https://github.c om/alibaba/Sentinel/releases 

 Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第11张图片

改造过程三个步骤

1 修改 Nacos 依赖项的应用范围,将其打入jar 包中;

2 后端程序对接 Nacos,将 Sentinel 限流规则同步到 Nacos;

3 开放单独的前端限流规则配置页面。 

修改Nacos依赖项 

首先,你需要打开 sentinel-dashboard 项⽬的 pom.xml 文件,找到其中的依赖项 sentinel-datasource-nacos,它是连接 Nacos Config 所依赖的必要组件。


            com.alibaba.csp
            sentinel-datasourcenacos



 后端程序对接Nacos

首先,你需要打开 sentinel-dashboard 项目下的 src/test/java目 录。定位到com.alibaba.csp.sentinel.dashboard.rule.nacos目录下。

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第12张图片 

解释:

NacosConfig:初始化 Nacos Config 的连接;

NacosConfigUtil:约定了 Nacos 配置⽂件所属的 Group 和⽂件命名后缀等常量字段;

FlowRuleNacosProvider:从 Nacos Config 上获取限流规则;

FlowRuleNacosPublisher:将限流规则发布到 Nacos Config。 

为了让这些类在 Sentinel 运行期可以发挥作用,你需要在 src/main/java 下创建同样的包路径,然后将这四个文件从 test 路 径拷贝到 main 路径下。 

实现Nacos数据同步 

    @Bean
    public ConfigService nacosConfigService() throws Exception {
        Properties properties = new Properties();
        // Nacos服务地址
        properties.setProperty("serverAddr","192.168.66.101:8848");
        // NameSpace id
        properties.setProperty("namespace","a26e7bb2-04df-4574-8313-3d8728ae88ba");
        return ConfigFactory.createConfigService(properties);
   }

FlowControllerV2接入Nacos

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第13张图片

解释:   

在代码中,我通过Qualifer标签将FlowRuleNacosProvider注入 到了ruleProvier变量中,又采用同样的方式将 FlowRuleNacosPublisher注入到了rulePublisher变量中。 FlowRuleNacosProvider和 FlowRuleNacosPublisher就是上一 步我们刚从 test目录 Copy到main目录下的两个类。

查看FlowRuleNacosPublisher源码 

@Override
    public List getRules(String appName) throws Exception {
        // 发布到Nacos上的配置文件名
        // app + NacosConfigUtil.FLOW_DATA_ID_POSTFIX  +NacosConfigUtil.GROUP_ID
        String rules = configService.getConfig(appName +NacosConfigUtil.FLOW_DATA_ID_POSTFIX,
            NacosConfigUtil.GROUP_ID, 3000);
        if (StringUtil.isEmpty(rules)) {
            return new ArrayList<>();
       }
        return converter.convert(rules);
   }

解析: 我们就完成了对后端程序的改造,将 Sentinel 限流规则同步到 了 Nacos。接下来我 们需要对前端页面稍加修改,开放⼀个独立的页面,用来维护那些被同步到 Nacos 上的限流规则。

前端页面改造 

首先,我们打开 sentinel-dashboard 模块下的 webapp 目录,该 目录存放了 Sentinel 控制台的前端页面资源。我们需要改造的文件是 sidebar.html,这个 html文件定义了控制台的左侧导航栏。

Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第14张图片 

新增内容 

  •   流控规则
  • 微服务改造

    微服务端的改造非常常简单,我们不需要对代码做任何改动,只需要添加⼀个新的依赖项,并在配置文件中添加 sentinel datasource 连接信息就可以了。

    
         com.alibaba.csp
         sentinel-datasource-nacos
    

    我们在 application.yml 配置文件中找到 spring.cloud.sentinel 节点,在这个节点下添加⼀段Nacos 数据源的配置。

         datasource:
            # 数据源key 可以自由命名
           geekbang-flow:
              # 指定当前数据源是Nacos
             nacos:
                # 设置Nacos的连接地址,命名空间和GroupID
               server-addr: 192.168.66.101:8848
                # Nacos 命名空间
               namespace: a26e7bb2-04df-4574-8313-3d8728ae88ba
               groupId: SENTINEL_GROUP
                # 设置Nacos中配置⽂件的命名规则
               dataId: ${spring.application.name}-flow-rules
                # 必填的重要字段,指定当前规则类型是"限流"
               rule-type: flow

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第15张图片

    重点强调 

    1、我们在微服务端的 sentinal 数据源中配置的 namespace 和 groupID,⼀定要和 Sentinal Dashoboard 二次改造中的中的配置相同,否则将无法正常同步限流规则。

    2、dataId 的文件命名规则,需要和 Sentinel 二次改造中的FlowRuleNacosPublisher 类保持⼀致。

    验证限流规则同步效果

    启动Sentinel-dashboard子项目,找主启动类启动Sentinel控制台。

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第16张图片

     请求http://localhost:8080,你可以登录 Sentinel Dashboard 服务。这时你会看到左侧的导航栏多了⼀个“流控规则”的选项。 你可以点击这个选项,并手动在当前页面右上方点击“新增流控 规 则”,为 requestCoupon 添加⼀条“QPS=1 快速失败”的流控规则。

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第17张图片 

    最后,打开 Nacos Config 的配置列表页,你就可以看到⼀个 cloud-sentinel-payment- flow-rules 的配置文件被创建了出来。

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第18张图片 

    分布式事物处理_认识本地事物 

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第19张图片

    什么是事物 

    事务就是针对数据库的一组操作,它可以由一条或多条SQL语句组 成,同一个事务的操作具备同步的特点,事务中的语句要么都执行,要么都不执行

    举个栗子: 你去小卖铺买东西,一手交钱,一手交货就是一个事务的例 子,交钱和交货必须全部成功,事务才算成功,任一个活动失败,事务将撤销所有已成功的活动。

     什么是本地事物

    在计算机系统中,更多的是通过关系型数据库来控制事务,这是利用数据库本身的事务特性来实现的,因此叫数据库事务,由于应用主要靠关系数据库来控制事务,而数据库通常和应用在同一个服务 器,所以基于关系型数据库的事务又被称为本地事务。

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第20张图片

    解释:

    Business∶我们具体的业务代码

    Storage∶ 库存业务代码;扣库存

    Order∶订单业务代码;保存订单

    Account∶账号业务代码;减账户余额 

    数据库事务的四大特性ACID

    Spring Cloud Alibaba【实时监控数据、Sentinel为什么需要持久化 、Sentinel组件二次开发、认识本地事物 、事务的四大特性ACID】(九)_第21张图片

     总结

    数据库事务在实现时会将一次事务涉及的所有操作全部纳入到一个 不可分割的执行单元,该执行单元中的所有操作要么都成功,要么都失败,只要其中任一操作执行失败,都将导致整个事务的回滚。

    实时效果反馈

    1.基于关系型数据库的事务又被称为_____。

    A 分布式事物

    B 本地事务

    C 关系型事物

    D 以上都错误

    2. 下列不属于数据库事务特性的是____。

    A 一致性

    B 隔离性

    C 原子性

    D 安全性 

    你可能感兴趣的:(Spring全家桶,wpf,Spring,Cloud,java)