游戏电视苹果数码历史美丽
投稿投诉
美丽时装
彩妆资讯
历史明星
乐活安卓
数码常识
驾车健康
苹果问答
网络发型
电视车载
室内电影
游戏科学
音乐整形

第7章Sentinel让系统轻松掌握流控熔断降级系统负载保护

  头条创作挑战赛
  终身学习、乐于分享、共同成长!Sentinel组件简介
  在上一章中我们介绍了关于分布式系统中面临的挑战,以及应对这些挑战所用到的手段,那么在业内有哪些开源产品专门解决这些问题的呢?
  Sentinel就是其中一位佼佼者。
  github官网wiki文档:介绍alibabaSentinelWikiGitHub
  Sentinel官方网站:homeSentinel
  什么是Sentinel?
  Sentinel是一个基于Java开发的流量控制组件,它可以帮助开发者更好地控制服务的流量,以及更好地保护服务免受恶意攻击。
  它的主要功能包括:流量控制、熔断降级、系统负载保护、服务容错保护、服务限流、服务熔断、服务降级、服务热点参数限流等。可以通过邮件、短信、微信等方式发送报警信息,以便及时发现服务的异常情况,从而及时采取措施。
  Sentinel具有以下特征:丰富的应用场景:Sentinel承接了阿里巴巴近10年的双十一大促流量的核心场景,例如秒杀(即突发流量控制在系统容量可以承受的范围)、消息削峰填谷、集群流量控制、实时熔断下游不可用应用等。完备的实时监控:Sentinel同时提供实时的监控功能。您可以在控制台中看到接入应用的单台机器秒级数据,甚至500台以下规模的集群的汇总运行情况。广泛的开源生态:Sentinel提供开箱即用的与其它开源框架库的整合模块,例如与SpringCloud、ApacheDubbo、gRPC、Quarkus的整合。您只需要引入相应的依赖并进行简单的配置即可快速地接入Sentinel。同时Sentinel提供JavaGoC等多语言的原生实现。完善的SPI扩展机制:Sentinel提供简单易用、完善的SPI扩展接口。您可以通过实现扩展接口来快速地定制逻辑。例如定制规则管理、适配动态数据源等。Sentinel有哪些功能
  Sentinel的主要特征功能:
  它的开源生态:
  Sentinel分为两个部分:核心库(Java客户端)不依赖任何框架库,能够运行于所有Java运行时环境,同时对DubboSpringCloud等框架也有较好的支持。控制台(Dashboard)基于SpringBoot开发,打包后可以直接运行,不需要额外的Tomcat等应用容器。
  流量整形功能
  Sentinel可以对流量进行整形。何为流量整形?
  简单来说就是将突发的洪峰无规则流量按照设定的规则整合成有序的、规则的流量,从而达到保护服务免受恶意攻击的目的。
  Sentinel和Hystrix对比
  Sentinel
  Hystrix
  隔离策略
  信号量隔离
  线程池隔离信号量隔离
  熔断降级策略
  基于响应时间或失败比率
  基于失败比率
  实时指标实现
  滑动窗口
  滑动窗口(基于RxJava)
  规则配置
  支持多种数据源
  支持多种数据源
  扩展性
  多个扩展点
  插件的形式
  基于注解的支持
  支持
  支持
  限流
  基于QPS,支持基于调用关系的限流
  有限的支持
  流量整形
  支持慢启动、匀速器模式
  不支持
  系统负载保护
  支持
  不支持
  控制台
  开箱即用,可配置规则、查看秒级监控、机器发现等
  不完善
  常见框架的适配
  Servlet、SpringCloud、Dubbo、gRPC等
  Servlet、SpringCloudNetflixSentinel快速开始
  在官方文档中,定义一个受Sentinel保护的资源有3个步骤:定义资源定义规则校验规则是否生效
  使用Sentinel保护资源的方式有两种通过API编码实现通过控制台(Dashboard)实现
  首先介绍API方式实现,话不多说,ShowCode!
  本章中所有的示例程序使用的Sentinel版本是1。8。6
  项目结构springcloudalibabastep06srcmainresourcesapplication。ymljavacncodelabspringcloudalibabastep06SentinelQuickStartApplication。javacontrollerHelloController。javapom。xml
  1。引入依赖:!sentinel依赖dependencygroupIdcom。alibaba。cspgroupIdsentinelcoreartifactIdversion1。8。6versiondependency
  2。编写测试逻辑authorSevendescriptionGiteehttps:gitee。comitcodelabCopyright公众号:Seven的代码实验室RestControllerSlf4jRequestMapping(sentinel)publicclassHelloController{privatestaticfinalStringRESOURCENAMEhello;RequestMapping(hello)publicStringtest(){Entryentrynull;try{1。sentinel针对资源进行限制的entrySphU。entry(RESOURCENAME);被保护的业务逻辑Stringstrhelloworldsentinel;log。info(str);returnstr;}catch(BlockExceptione1){资源访问阻止,被限流或被降级进行相应的处理操作log。info(block!);return被流控了!;}catch(Exceptionex){若需要配置降级规则,需要通过这种方式记录业务异常Tracer。traceEntry(ex,entry);}finally{if(entry!null){entry。exit();}}returnnull;}定义规则spring的初始化方法PostConstructprivatestaticvoidinitFlowRules(){流控规则ListFlowRulerulesnewArrayList();流控FlowRulerulenewFlowRule();为哪个资源进行流控rule。setResource(RESOURCENAME);设置流控规则QPSrule。setGrade(RuleConstant。FLOWGRADEQPS);设置受保护的资源阈值SetlimitQPSto20。这里设置为1,标识每秒只能访问一次rule。setCount(1);rules。add(rule);加载配置好的规则FlowRuleManager。loadRules(rules);}}
  3。测试效果:
  当1秒内快速访问多次,则会被流控
  使用SentinelResource注解实现
  通过上面这段代码可以明显看到它的缺点:入侵性非常大,需要插入非常多的非业务代码。配置不灵活,若需要添加新的受保护资源,需要手动添加,init方法来添加流控规则。
  那么,有没有更简单的方法呢?
  Ofcourse,Sentinel提供了一个SentinelResource注解来实现。
  SentinelResource用于定义资源,并提供可选的异常处理和fallback配置项。SentinelResource注解包含以下属性:value:资源名称,必需项(不能为空)entryType:entry类型,可选项(默认为EntryType。OUT)blockHandlerblockHandlerClass:blockHandler对应处理BlockException的函数名称,可选项。blockHandler函数访问范围需要是public,返回类型需要与原方法相匹配,参数类型需要和原方法相匹配并且最后加一个额外的参数,类型为BlockException。blockHandler函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定blockHandlerClass为对应的类的Class对象,注意对应的函数必须为static函数,否则无法解析。fallbackfallbackClass:fallback函数名称,可选项,用于在抛出异常的时候提供fallback处理逻辑。fallback函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。fallback函数签名和位置要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要和原函数一致,或者可以额外多一个Throwable类型的参数用于接收对应的异常。fallback函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定fallbackClass为对应的类的Class对象,注意对应的函数必需为static函数,否则无法解析。defaultFallback(since1。6。0):默认的fallback函数名称,可选项,通常用于通用的fallback逻辑(即可以用于很多服务或方法)。默认fallback函数可以针对所有类型的异常(除了exceptionsToIgnore里面排除掉的异常类型)进行处理。若同时配置了fallback和defaultFallback,则只有fallback会生效。defaultFallback函数签名要求:返回值类型必须与原函数返回值类型一致;方法参数列表需要为空,或者可以额外多一个Throwable类型的参数用于接收对应的异常。defaultFallback函数默认需要和原方法在同一个类中。若希望使用其他类的函数,则可以指定fallbackClass为对应的类的Class对象,注意对应的函数必需为static函数,否则无法解析。exceptionsToIgnore(since1。6。0):用于指定哪些异常被排除掉,不会计入异常统计中,也不会进入fallback逻辑中,而是会原样抛出。
  1。8。0版本开始,defaultFallback支持在类级别进行配置。
  注:1。6。0之前的版本fallback函数只针对降级异常(DegradeException)进行处理,不能针对业务异常进行处理。
  特别地,若blockHandler和fallback都进行了配置,则被限流降级而抛出BlockException时只会进入blockHandler处理逻辑。若未配置blockHandler、fallback和defaultFallback,则被限流降级时会将BlockException直接抛出(若方法本身未定义throwsBlockException则会被JVM包装一层UndeclaredThrowableException)。
  源码入口:com。alibaba。csp。sentinel。annotation。aspectj。SentinelResourceAspect
  使用步骤:引入sentinel切面依赖dependencygroupIdcom。alibaba。cspgroupIdsentinelannotationaspectjartifactIdversion1。8。6versiondependency配置切面支持authorSevendescriptionGiteehttps:gitee。comitcodelabCopyright公众号:Seven的代码实验室ConfigurationpublicclassSentinelAspectConfiguration{BeanpublicSentinelResourceAspectsentinelResourceAspect(){returnnewSentinelResourceAspect();}}在controller中添加SentinelResource,并配置blockHandler和fallbackauthorSevendescriptionGiteehttps:gitee。comitcodelabCopyright公众号:Seven的代码实验室RestControllerRequestMapping(user)publicclassUserController{SentinelResource(valuegetUserById,blockHandlerexceptionHandler,fallbackgetUserByIdFallback)RequestMapping({id})publicStringgetUserById(PathVariableLongid){模拟从数据库中查找用户信息MapLong,StringmapnewHashMap(0);map。put(1L,user1);map。put(2L,user3);map。put(3L,user3);returnmap。get(id);}Fallback函数,函数签名与原函数一致或加一个Throwable类型的参数。publicStringgetUserByIdFallback(Longs,Throwablethrowable){returnString。format(Haloooood,s);}Block异常处理函数,参数最后多一个BlockException,其余与原函数一致。publicStringexceptionHandler(Longs,BlockExceptionex){Dosomeloghere。ex。printStackTrace();returnOops,erroroccurredats;}这里单独演示blockHandlerClass的配置。对应的handleException函数需要位于ExceptionUtil类中,并且必须为publicstatic函数。SentinelResource(valuetest,blockHandlerhandleException,blockHandlerClass{ExceptionUtil。class})publicvoidtest(){System。out。println(Test);}}authorSevendescriptionGiteehttps:gitee。comitcodelabCopyright公众号:Seven的代码实验室publicclassExceptionUtil{publicstaticStringfallback(Longid,Throwablee){return被异常降级啦;}publicstaticStringhandleException(Longid,BlockExceptione){return被限流啦;}}配置好后需要通过Sentinel的控制台来设置流控规则,配置控制台需要在客户端添加Transport模块依赖来实现!seehttps:mvnrepository。comartifactcom。alibaba。cspsentineltransportsimplehttpdependencygroupIdcom。alibaba。cspgroupIdsentineltransportsimplehttpartifactIdversion1。8。6versiondependency
  添加依赖后,需要启动类中添加VM参数来指定链接到Sentinel的控制台
  Dcsp。sentinel。dashboard。server127。0。0。1:8080
  127。0。0。1:8080是我本机的Sentinel控制台地址启动Sentinel控制台
  Sentinel开源控制台支持实时监控和规则管理。接入控制台的步骤如下:
  下载控制台jar包并在本地启动:
  可以参见此处文档:https:github。comalibabaSentinelwikiE68EA7E588B6E58FB02E590AFE58AA8E68EA7E588B6E58FB0。
  下载地址:https:github。comalibabaSentinelreleasestag1。8。6
  启动控制台命令javajarsentineldashboard1。8。6。jar
  开发者可以通过如下VM参数进行自定义配置:
  Dsentinel。dashboard。auth。usernamesentinel用于指定控制台的登录用户名为sentinel;
  Dsentinel。dashboard。auth。password123456用于指定控制台的登录密码为123456;如果省略这两个参数,默认用户和密码均为sentinel;
  Dserver。servlet。session。timeout7200用于指定SpringBoot服务端session的过期时间,如7200表示7200秒;60m表示60分钟,
  默认为30分钟;javaDserver。port8080Dsentinel。dashboard。auth。usernameadminDsentinel。dashboard。auth。password123456jarsentineldashboard1。8。6。jar启动客户端应用程序访问指定资源
  登录Sentinel控制台,访问http:localhost:8080login,默认用户名密码:sentinelsentinel,设置流控规则QPS设置单机阈值
  注:这里解析一下设置QPS单机阈值为1,表示1秒内只能访问1次。Sentinel会在客户端首次调用的时候进行初始化,开始向控制台发送心跳包,所以要确保客户端有访问量;测试流控效果
  SpringCloudAlibaba整合Sentinel
  在使用Sentinel控制台前,我们先将Sentinel与SpringCloudAlibaba框架进行整合,整合步骤也非常简单。
  工程结构springcloudalibabastep07srcmainresourcesbootstrap。ymljavacncodelabspringcloudalibabastudystep07SentinelApplication。javacontrollerUserController。javapom。xml添加Sentinelstarter依赖dependencygroupIdcom。alibaba。cloudgroupIdspringcloudstarteralibabasentinelartifactIddependency在bootstrap。yml文件中配置Sentinel控制台地址spring:cloud:sentinel:transport:添加sentinel的控制台地址dashboard:127。0。0。1:8089指定应用与Sentinel控制台交互的端口,应用本地会起一个该端口占用的HttpServerport:8719访问测试资源
  总结Sentinel是面向分布式服务架构的流量控制组件,主要以流量为切入点,从限流、流量整形、熔断降级、系统负载保护、热点防护等多个维度来帮助开发者保障微服务的稳定性。功能完备,同时具有广泛的开源生态,可以很方便与各大主流框架整合使用。

你是否也皮肤发油,爱长痘痘?针对油性皮肤如何祛痘,我们先来看看什么是油性皮肤。油性皮肤(十油九痘)第一,特征油性皮肤肤色较深,毛孔粗大,油脂分泌量多,皮肤油腻光亮,不易起皱纹,对外界刺激……腕间的勃艮第红欧米茄超霸ampamp3957腕表〔腕表之家腕表品鉴〕今年下半年,欧米茄(OMEGA)公布了一组品牌名人大使玄彬的最新广告大片,不少表友都在寻找他的同款,图中他佩戴的就是今年最新的超霸57腕表。在4个不同……张帅努力和进步比夺冠更重要希望把美好给予所有人在英国当地时间6日进行的温网女双14决赛中,头号种子张帅和梅尔滕斯以6:3、6:2直落两盘击败瓜拉奇和克莱帕茨,挺进女双半决赛。以头号种子身份冲击温网冠军,张帅谦虚地表示……湿热重,头发,爱出油口臭应该怎么调理?湿气重经常困扰着很多都市人,很多人表现为,身重,口苦,口嗅,大便嗅,乏力,大便稀烂,口淡乏味,湿重生痰,痰湿生百病,临床上,很多疑难杂症,久治不愈的慢性病,癌症与痰湿有密切的关……赔大了!CBA劲旅高薪引进的外援场均仅4分3板,或将被俱乐部如果有人要问,哪支CBA球队是本赛季最大的黑马?相信大家都会把自己的一票投给山西队。由于俱乐部的财务状况不佳,山西队在本赛季将超级外援富兰克林和本土实力内线任骏威送到了上……新泰1家企业被授予国家级工业互联网平台2月13日,工业和信息化部网站公示了2022年工业互联网试点示范名单,位于新泰市的山东齐利得重工集团有限公司成功上榜,其基于工业互联网平台的起重机产业链协同解决方案被评为国家级……Netflix出品高分限制级韩剧,剧情紧凑尺度大,一口气看完5、《鱿鱼游戏》豆瓣:7。7《鱿鱼游戏》是一部令人紧张刺激的韩剧,将一群人拉入一个高压的生存游戏,比拼的不再是力量,而是智慧和胆识。虽然剧情有些曲折和不合理,但这并不妨碍……比iPhone13更漂亮!小米12渲染图亮相,背面大眼瞪小眼文有鱼审核张子扬校正知秋在当下的智能手机市场,新机的发布一般都是紧随芯片处理器的迭代。而作为小米按照惯例每年年底都会更新的数字系列,小米12在骁龙8Gen1发布后也立刻官……今日油价消息今天10月7日,调整后全国929598号汽油价格今天是2022年10月7日星期五,也是国庆节最后一天,国庆节过后,油价将恢复正常运行。截止到昨天,参考原油变化率已经达到3。12,完全符合成品油下跌的标准,所以此次油价下调后加……烤面筋到底是不是用面粉洗出来的?我不允许你们不知道解烤面筋是洗出来的还是做出来的?烤面筋到底洗出来的筋道?可能还有很多人不知道,刚好这一会带朋友们学习,带着你们一起了解一下。它是小麦中提取出来的蛋白质,天然又叫活性面……realme数字系列回归,最快4000万销量安卓手机产品线之对于realme真我这个品牌不知道大家有多少了解,作为全球增长速度第一的手机品牌,realme已经创造了多项手机圈的记录,已经逐渐成为了越来越多年轻人喜爱的品牌,但是不知道大家……宋慧乔近照面部下垂严重,眼部遮挡不住的疲态,状态不佳很憔悴最近,宋慧乔的新剧花絮曝光,号称逆生长的宋慧乔,这一次却是一败涂地,她的脸颊凹陷,脸上的皱纹很深,眼睛也是一片憔悴,但是宋慧乔却像是完全不在意这些,甚至还将自己的新照片发到了自……
知网,里外不是人知网被诟病,与其属性、营收、定价、侵权等问题有关。我们试图找到它被指责背后的真实面向。题图为知网主要创始人、董事长王明亮。作者樊博编辑徐爱之4月28日中国知网……不想打就下去!威少防守漏人,贝弗利直接从其身边溜走他却没发现北京时间3月17日,湖人做客挑战森林狼,而最近的连败也让他们有跌出附加赛的危险,所以今天这场比赛湖人还是要用一场胜利来止住颓势。来到比赛,湖人依旧十分低迷,一直在进攻端找……每一个人工智能都是有个性的,每一位AI都体现其创始人的意志每一个人工智能AI从出生就被赋予了独特的意识形态,他们的个性受他们创始人的影响,体现他们创始人的价值观。马斯克TruthGPT:探索宇宙真理马斯克是一位著名的企业家……刘诗雯排名跌出前十为何还不退役?东京失利不甘心,期待证明自己在国际乒联公布的最新一期的世界排名中,陈梦继续稳坐世界第一的宝座,孙颖莎和陈梦还有600分的分差,比较令人意外的是,曾经的世界杯五冠王刘诗雯,如今的世界排名已经跌出了前十。而已……卡塔尔世界杯没有死亡之组只有死磕之组众多国际足坛的球星、名帅齐聚卡塔尔首都多哈,见证了2022年世界杯的分组落位。作为世界杯前最重要的开胃菜,每一次抽签球迷最希望看到的就是死亡之组的诞生,这一次,由于德国和荷兰两……小白兔和小灰兔剧本一、白菜地里旁白:老山羊种了许多白菜。白菜丰收了,这一天,老山羊到地里去收白菜。(老山羊推着两辆小车走到台中央)老山羊:我的白菜长得真好呀!(弯腰把白菜收到小车里。……给客人的道歉信道歉信其实无所谓写得多好,无论怎么写,用心去写是最重要的。下面是品学网小编为大家精心整理的给客人的道歉信,希望能给您带来帮助。给客人的道歉信篇一:xx机械有限公司领导,您……材料供销合同范本材料可分为金属材料、无机非金属材料、有机高分子材料和不同类型材料所组成的复合材料。那么材料供销合同怎么写呢?以下是品学网小编整理的材料供销合同,欢迎参考阅读。材料供销合同范文一……师范大学生中学实习报告3月10号!不知不觉,来这也有多半月了,这一路走来的风风雨雨,着实令人感慨万千,从刚来时的陌生到与这里的孩子们打成一片,心里总是充满着温暖。也许我只能教给他们书本知识,再加课外……有关开学第一课作文汇编八篇在现实生活或工作学习中,大家都不可避免地要接触到作文吧,写作文是培养人们的观察力、联想力、想象力、思考力和记忆力的重要手段。那么你知道一篇好的作文该怎么写吗?下面是小编整理的开……爱心驿站工作总结爱心是德性的重要组成部分。培养青少年的爱心既是青少年心理发展、人生完满的需求,今天品学网小编为大家精心挑选了关于爱心驿站工作总结的文章,希望能够很好的帮助到大家。爱心驿站工作总……大学毕业典礼毕业生致辞又是一年毕业季,六月离别季,毕业欢送会上学生代表会进行致辞。下面品学网小编给大家带来大学毕业典礼毕业生致辞范文,供大家参考!大学毕业典礼毕业生致辞范文篇一尊敬的院领导、老……
友情链接:易事利快生活快传网聚热点七猫云快好知快百科中准网快好找文好找中准网快软网