微服务初体验(四):详解阿里Sentinel框架用法(上)

前言

最近笔者在对微服务架构进行学习,参考了各种项目的技术文章、框架文档以及视频网站,最终选择使用Nacos+Dubbo+Gateway+Sentinel来搭建一个项目练手。其中Nacos作为服务的注册发现中心兼配置中心,Dubbo作为RPC通讯框架来实现服务间的接口调用,而Gateway则作为网关,进行客户端请求的转发,熔断服务则使用Sentinel框架。后续会加入ElasticSearch+SpringSession,进行数据的缓存分级,链路追踪则使用Sleuth,其中还会组合分布式事务框架Seata,有兴趣的朋友可以关注一下,项目地址:https://github.com/peachl/cloud-demo/tree/master#readme,长期更新。
由于发现很多读者对Sentinel比较感兴趣,所以这次单独针对Sentinel做个详细的讲解,使用的例子还是之前的Demo

官网文档和资料

Sentinel在github上面有着相当详细的文档,关于Spring-Cloud集成Sentinel的官方文档。点击相关的启动器可查阅详细文档

Sentinel Spring Cloud Starter

初始化项目配置
        
            com.alibaba.cloud
            spring-cloud-starter-alibaba-sentinel
            2.2.1.RELEASE
        

在需要被限流的consumer模块下的yml配置中增加相关Sentinel配置

spring:
  cloud:
    sentinel:
      transport:
        #访问端口
        dashboard: localhost:8080
        #交互端口
        port: 8719

下载对应的SentinelJar包,笔者这里使用的版本号为1.7.1,如果需要测试的话,尽量让Demo和Sentinel的版本保持一致
接下来访问之前项目中consumer模块下的getMsg接口,然后进入控制台,Sentinel默认的项目地址为localhost:8080/sentinel,账号密码默认都是sentinel,Sentinel控制台效果图如下:

点击左侧模块然后选择簇点链路,可以看到刷新getMsg接口后的分钟访问数等数据

Sentinel控制台常用设置
流控

点击流控按钮,资源名为名称,针对来源默认default为不针对任何来源,阈值类型QPS指每秒访问总量,而线程数表示最大同时访问的线程。单机阈值是每秒请求数,是否集群中的单机均摊是指每台机器按照均摊阈值设置,而总体阈值指的是该请求所有服务的请求数量为上方设定的均摊阈值。高级选项中的流控模式分为直接、关联和链路,直接是指单个接口访问;关联指的是将两个互相调用的服务关联在一起,当某一个服务被限流时与之关联的服务也会遭到限制;链路指的是当多个服务分别调用该接口时,设置各种不同的入口限流,只有设置了入口的请求才会进入限流。流控效果也有快速失败、Warm Up和排队等待,快速失败指的是直接抛出异常,Warm Up是预热缓慢的将大流量放行出去,排队等待是等待超时事件进行执行。Sentinel中的配置是存入内存的,如果重启机器之后它的相关流控规则会失效需要重新配置,详细文档说明

笔者为了可以快速看到效果所以这里设置单机阈值为1
当添加完成之后在左侧的流控规则中会自动出现一条记录,当然从流程规则中也可以直接添加规则

然后继续快速连续的访问我们的getMsg接口,效果如下图:


可以明显的看到当访问次数过快时,页面会直接抛出异常信息,当页面请求被Sentinel拦截时,后台业务代码不会被执行

左侧的实时监控也可以看到详细的统计数据
设置自定义回调信息

由于流控中的回调信息太过简陋,所以在项目中需要自定义返回信息,但是Sentinel1.7.1中的升级未向下兼容,所以无法找到之前的WebCallbackManager.setUrlBlockHandler方法,它从com.alibaba.csp.sentinel.adapter.spring.servlet升级成为了com.alibaba.csp.sentinel.adapter.spring.webmvc,查看github上面相关的Issue,说是建议用ControllerAdvice来捕获BlockException并返回自定义信息,在此不做详细操作,如果需要自定义的话建议查一下ControllerAdvice注解的用法,在此引用一下github上的相关解释:https://user-images.githubusercontent.com/40854898/99412494-be6dca00-292f-11eb-8cc1-eb96e2e8f51f.png

你可能感兴趣的:(微服务初体验(四):详解阿里Sentinel框架用法(上))