矿区网站建设,网站审核时间,网站服务器无法访问,莱芜雪野湖滑雪场#x1f3c6;今日学习目标#xff1a; #x1f340;服务降级和熔断机制 ✅创作者#xff1a;林在闪闪发光 ⏰预计时间#xff1a;30分钟 #x1f389;个人主页#xff1a;林在闪闪发光的个人主页 #x1f341;林在闪闪发光的个人社区#xff0c;欢迎你的加入: 林在闪闪… 今日学习目标 服务降级和熔断机制 ✅创作者林在闪闪发光 ⏰预计时间30分钟 个人主页林在闪闪发光的个人主页 林在闪闪发光的个人社区欢迎你的加入: 林在闪闪发光的社区 目录
一.服务降级 1.什么是降级
2.服务降级的方式
3.服务降级的分类
4.大规模分布式系统如何降级
二.熔断机制
1.什么是熔断
2.降级和熔断的区别
3.常见的熔断器组件 一.服务降级 1.什么是降级
降级是从系统功能优先级的角度考虑如何应对系统故障。
服务降级指的是当服务器压力剧增的情况下根据当前业务情况及流量对一些服务和页面有策略的降级以此释放服务器资源以保证核心任务的正常运行。
降级服务的特征如下:
原因: 整体负荷超出整体负载承受能力。目的: 保证重要或基本服务正常运行非重要服务延迟使用或暂停使用大小: 降低服务粒度要考虑整体模块粒度的大小将粒度控制在合适的范围内可控性: 在服务粒度大小的基础上增加服务的可控性后台服务开关的功能是一项必要配置(单机可配置文件其他可领用数据库和缓存)可分为手动控制和自动控制。次序: 一般从外围延伸服务开始降级需要有一定的配置项重要性低的优先降级比如可以分组设置等级1-10当服务需要降级到某一个级别时进行相关配置
2.服务降级的方式
延迟服务: 比如发表了评论重要服务比如在文章中显示正常但是延迟给用户增加积分只是放到一个缓存中等服务平稳之后再执行。在粒度范围内关闭服务(片段降级或服务功能降级): 比如关闭相关文章的推荐直接关闭推荐区页面异步请求降级: 比如商品详情页上有推荐信息/配送至等异步加载的请求如果这些信息响应慢或者后端服务有问题可以进行降级;页面跳转(页面降级): 比如可以有相关文章推荐但是更多的页面则直接跳转到某一个地址。写降级: 比如秒杀抢购我们可以只进行Cache的更新然后异步同步扣减库存到DB保证最终一致性即可此时可以将DB降级为Cache。读降级: 比如多级缓存模式如果后端服务有问题可以降级为只读缓存这种方式适用于对读一致性要求不高的场景。
3.服务降级的分类
降级按照是否自动化可分为:
自动开关降级(超时、失败次数、故障、限流·人工开关降级(秒杀、电商大促等)自动降级分类又分为:
超时降级:主要配置好超时时间和超时重试次数和机制并使用异步机制探测回复情况失败次数降级:主要是一些不稳定的api当失败调用次数达到一定阀值自动降级同样要使用异步机制探测回复情况故障降级:比如要调用的远程服务挂掉了(网络故障、DNS故障、http服务返回错误的状态码、rpc服务抛出异常)则可以直接降级。降级后的处理方案有:默认值(比如库存服务挂了返回默认现货)、兜底数据(比如广告挂了返回提前准备好的一些静态页面)、缓存(之前暂存的一些缓存数据)限流降级:当我们去秒杀或者抢购一些限购商品时此时可能会因为访问量太大而导致系统崩溃此时开发者会使用限流来进行限制访问量当达到限流阀值后续请求会被降级:降级后的处理方案可以是:排队页面(将用户导流到排队页面等一会重试)无货(直接告知用户没货了)、错误页(如活动太火爆了稍后重试)
4.大规模分布式系统如何降级
在大规模分布式系统中经常会有成百上千的服务。在大促前往往会根据业务的重要程度和业务间的关系批量降级。这就需要技术和产品提前对业务和系统进行梳理根据梳理结果确定哪些服务可以降级哪些服务不可以降级降级策略是什么降级顺序怎么样大型互联网公司基本都会有自己的降级平台大部分降级都在平台上握作比如手动降级开关批量降级顺序管理熔断阈值动态设置限流阈值动态设置等等。
二.熔断机制
1.什么是熔断
熔断是应对微服务雪崩效应的一种链路保护机制类似股市、保险丝
微服务之间的数据交互是通过远程调用来完成的。服务A调用服务服务B调用服务c某一时间链路上对服务 C的调用响应时间过长或者服务C不可用随着时间的增长对服务C的调用也越来越多然后服务C崩溃了但是链路调用还在对服务B的调用也在持续增多然后服务B崩溃随之A也崩溃导致雪崩效应
服务熔断是应对雪崩效应的一种微服务链路保护机制。例如在高压电路中如果某个地方的电压过高熔断器就会熔断对电路进行保护。同样在微服务架构中熔断机制也是起着类似的作用。当调用链路的某个微服务不可用或者响应时间太长时会进行服务熔断不再有该节点微服务的调用快速返回错误的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。
服务熔断的作用类似于我们家用的保险丝当某服务出现不可用或响应超时的情况时为了防止整个系统出现雪崩暂时停止对该服务的调用。
2.降级和熔断的区别
熔断和降级是两个比较容易混淆的概念两者的含义并不相同。
降级的目的在于应对系统自身的故障而熔断的目的在于应对当前系统依赖的外部系统或者第三方系统的故障。
3.常见的熔断器组件
SpringCloud官方目前推荐的熔断器组件如下:
·Hystrix·Resilience4J·Sentinel·SpringRetry
我们单独拎出Sentinel和Hystrix来说一下(没记错的话Hystrix目前已经没有维护了。)。
Hystrix是Netflix开源的熔断降级组件Sentinel是阿里中间件团队开源的一款不光具有熔断降级功能同时还支持系统负载保护的组件。
简单来说两者都是主要做熔断降级的两者的差异如下