Spring Cloud for Alibaba 之 Sentinel 集成(4)

一、 Sentinel 相关  

 Sentinel 是什么

  随着微服务的流行,服务和服务之间的稳定性变得越来越重要。

      Sentinel 是面向分布式服务架构的轻量级流量控制产品,以资源为维度,以流量为切入点,从流量控制、熔断降级、系统负载保护等多个维度来帮助您保护服务的稳定性。

  Sentinel 与Hystrix 对比

     详细的对比,可以看这里 (Sentinel 与 Hystrix 的对比https://yq.aliyun.com/articles/623424 ,

    总结一句话:Sentinel 更轻量,性能更强,适用场景、框架更多,更灵活!

 Sentinel 的源码与 原理解读

     可以看看 简书(六道木)的文章: https://www.jianshu.com/nb/34444279 

     理解了 Sentinel 的相关概念,node、调用链,降级等源码,大部分还是比较容易懂的。 带预热功能的滑动窗口代码,本人惭愧,有点不是太明白。

   

二、 Sentinel 控制台启动

 下面,我们开始在原有的工程代码上面,接入Sentinel 控制功能。

  1.  下载 Sentinel dashboard 控制台。

     直接在github 上的Sentinel开源项目 的release 页面 https://github.com/alibaba/Sentinel/releases,下载jar包sentinel-dashboard-1.6.3.jar 

    下载后,进入 jar的目录页面,控制台输入: java -Dserver.port=7070 -Dcsp.sentinel.dashboard.server=localhost:7070 -Dproject.name=sentinel-dashboard -jar sentinel-dashboard-1.6.3.jar  启动

  dashboard 工程,其实内嵌了Sentinel client组件,会定期像控制台发送心跳信息,除了配置控制台的web端口,还有配置控制台的相关信息  

参数说明:
server.port=7070  ## 控制台web端口
csp.sentinel.dashboard.server=localhost:7070  ##控制台访问url
project.name=sentinel-dashboard     ##控制台项目名称

   2. 启动后页面

     启动后,在浏览器输入: http://127.0.0.1:7070 ,默认用户名、密码:sentinel / sentinel  可以进入页面,显示如下:

                       

   可以点击左边相关菜单,查看相关页面进行体验。

三、 项目接入Sentinel组件

   1. 简单接入Sentinel

      简单接入Sentinel ,以dubbo为例, 需要引入 sentinel-core、 sentinel-apache-dubbo-adapter(包含了core包)、sentinel-transport-simple-http,

     实际引入包如下:

    <!-- sentinel.version = 1.6.3 -->
      <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-transport-simple-http</artifactId>
            <version>${sentinel.version}</version>
        </dependency>

        <dependency>
            <groupId>com.alibaba.csp</groupId>
            <artifactId>sentinel-apache-dubbo-adapter</artifactId>
            <version>${sentinel.version}</version>
        </dependency>
sentinel-transport-simple-http 包是客户端向 dashboard 发送心跳、本项目流量统计信息
sentinel-apache-dubbo-adapter 包是对dubbo的适配 ,provider端 主要代码为:SentinelDubboProviderFilter ,在服务提供端的filter, 对入口流量进行控制

2. sentinel 配置

  sentinel 启动的时候,需要配置 几个基础信息:

       1.  project.name : 项目名称

      2. csp.sentinel.api.port: 本地端口,用于接收 dashboard 请求 ,

      3. csp.sentinel.dashboard.server :  控制台dashboard,用于对控制台发送心跳、统计信息

   配置方式:

        1. 可以在启动的时候通过 JVM -D 参数指定, 在IDE 里面,可以配置

        2.  main启动的时候,通过System.setProperty 设置。效果等同1,比较容易复制粘贴。

       3.  除 project.name 以及日志的配置项(如 csp.sentinel.log.dir)之外,其余参数还可通过 properties 文件指定,路径为 ${user_home}/logs/csp/${project.name}.properties

       4. 接入alicloud-sentinel-starter 组件,就可以配置在配置文件了,(实际效果也是读取配置,进行第2步,这个后续讲) 

    第1种配置太复杂,不利于IDE里面批量启动, 第3种,配置分几个地方,改起来不方便 。 目前我在 IDE里面调试,启动应用,用的第2种。

   代码如下:

@EnableDiscoveryClient
@SpringBootApplication
public class ProductDemoApplication {

    static{
        initSentinelProperty();
    }
    private static void initSentinelProperty(){ //启动设置相关配置
        System.setProperty("java.net.preferIPv4Stack","true"); //启动错误时,官方推荐只用ipv4 的ip
        System.setProperty("project.name","product-demo");
        System.setProperty("csp.sentinel.api.port","7081");
        System.setProperty("csp.sentinel.api.port","127.0.0.1:7070");
    }
    public static void main(String[] args) {
        SpringApplication.run(ProductDemoApplication.class, args);
    }
} 

配置后,启动应用。 启动后,一定要对应用访问、调用相关资源,否则sentinel不会启动心跳逻辑,dashboard不会显示。

3. 结合dashboard 进行限流示例

  1. 启动product-demo,order-demo ,访问order-demo,底层调用product-demo 的服务,调用几次后,会再dashboard看到相关数据。

 

  

 访问资源后,在Sentinel 控制台,出现了相关资源、实时监控数据信息。

  2. 对资源 /test/testProductByName/哈哈   设置限流,QPS为2 ,其他拒绝,请求多次后,浏览器显示:  Blocked by Sentinel (flow limiting)

规则设置:

             

 在 Sentinel 里面显示图表如下:

 4. 总结

   Sentinel 基本使用非常简单,AliCloud 对很多框架做了适配,简单引入相应的adapter即可。具体的使用,可以参考 sentinel的wikii :https://github.com/alibaba/Sentinel/wiki/%E4%B8%BB%E9%A1%B5 

    然而,在生产中使用,还需要进行相应的其他配置与改造,这个后续学习。

猜你喜欢

转载自www.cnblogs.com/keep-code/p/11381618.html