微服务初体验(四):详解阿里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

初始化项目配置
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
            <version>2.2.1.RELEASE</version>
        </dependency>

在需要被限流的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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,214评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,307评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,543评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,221评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,224评论 5 371
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,007评论 1 284
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,313评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,956评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,441评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,925评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,018评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,685评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,234评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,240评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,464评论 1 261
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,467评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,762评论 2 345