服务熔断与服务降级详解

服务熔断与服务降级详解为深入理解服务雪崩解决方案中服务熔断和服务降级两个方式,在这儿做一个详解服务熔断什么是服务熔断:当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用服务熔断的原理:业内普遍采用断路器模式原理:当远程服务被调用时,断路器将监视这个调用,如调用时间太长,断路器将会介入并中断调用。此外,断路器将监视所有对远程资源的调用,如对某一个远程资源的调用失败次数足够多,那么断路器

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

为深入理解 服务雪崩解决方案服务熔断服务降级 两个方式,在这儿做一个详解

服务熔断


什么是服务熔断:

当下游的服务因为某种原因突然变得不可用或响应过慢,上游服务为了保证自己整体服务的可用性,不再继续调用目标服务,直接返回,快速释放资源。如果目标服务情况好转则恢复调用


服务熔断的原理:

业内普遍采用断路器模式

原理: 当远程服务被调用时,断路器将监视这个调用,如调用时间太长,断路器将会介入并中断调用。此外,断路器将监视所有对远程资源的调用,如对某一个远程资源的调用失败次数足够多,那么断路器会出现并采取快速失败,阻止将来调用此远程资源的请求.

断路器模式的状态图:
在这里插入图片描述
解析:

最开始处于closed状态,一旦检测到错误到达一定阈值,便转为open状态;

这时候会有个 reset timeout,到了这个时间了,会转移到half open状态,尝试放行一部分请求到后端,一旦检测成功便回归到closed状态,即恢复服务;

想不通的朋友可以参考你家的电保险

断路器实现:
阿里公司出的Sentinel
netflix的Hystrix

Hystrix中熔断的常用配置:

circuitBreaker.requestVolumeThreshold
默认值20.意思是至少有20个请求才进行errorThresholdPercentage错误百分比计算。比如一段时间(10s)内有19个请求全部失败了。错误百分比是100%,但熔断器不会打开,因为requestVolumeThreshold的值是20. 这个参数非常重要,

circuitBreaker.sleepWindowInMilliseconds
//过多长时间,熔断器再次检测是否开启,默认为5000,即5s钟

circuitBreaker.errorThresholdPercentage
//设定错误百分比,默认值50%,例如一段时间(10s)内有100个请求,其中有55个超时或者异常返回了,那么这段时间内的错误百分比是55%,大于了默认值50%,这种情况下触发熔断器-打开。

按照以上配置的熔断器如下:
每当20个请求中,有50%失败时,熔断器就会打开,此时再调用此服务,将会直接返回失败,不再调远程服务。直到5s钟之后,重新检测该触发条件,判断是否把熔断器关闭,或者继续打开


服务降级

服务降级主要有两种场景:

一、当下游的服务因为某种原因响应过慢,下游服务主动停掉一些不太重要的业务,释放出服务器资源,增加响应速度!

二、当下游的服务因为某种原因不可用,上游主动调用本地的一些降级逻辑,避免卡顿,迅速返回给用户!

聪明人已经看出来,第一个场景怎么和服务熔断的概念有异曲同工之妙,没错,服务熔断可视为降级方式的一种!

结合上述场景,在实际的项目中,采用以下的方式来完成降级工作

  1. 梳理出核心业务流程和非核心业务流程。然后在非核心业务流程上加上开关,一旦发现系统扛不住,关掉开关,结束这些次要流程。
  2. 一个微服务下肯定有很多功能,那自己区分出主要功能和次要功能。然后次要功能加上开关,需要降级的时候,把次要功能关了吧!
  3. 降低一致性了,即将核心业务流程的同步改异步,将强一致性改最终一致性。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/180044.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • mysql是什么类型数据库_MySQL是一种

    mysql是什么类型数据库_MySQL是一种在学习MySQL之前,首先需要了解数据库和SQL。如果您已经知道数据库和SQL,那么可以直接跳转到下一章节的学习。1.数据库简介当您想收听最喜欢的歌曲时,可以从智能手机上打开播放列表。在这种情

    2022年8月1日
    3
  • 问答:程序员到底是一群怎样的存在?[通俗易懂]

    点击上方☝,轻松关注!及时获取有趣有料的文章话不多说,反正就是很牛逼的存在!可以接受反驳,但就是牛逼~下面来看看我的一些朋友是怎么说的吧~火星????哥就是苦逼的码农加班狗,35岁后面临…

    2022年2月28日
    45
  • 借你一双慧眼,识别代码安全审计工具「建议收藏」

    借你一双慧眼,识别代码安全审计工具「建议收藏」代码安全审计产品、代码缺陷分析产品、代码安全分析等基于源代码静态分析技术的产品市场上越来越多,但是质量却层次不齐,误报率非常高,漏报率也不低,究其原因是为什么呢?因为一款静态分析类产品研发不是轻松的事,往往要经历几年时间,产品才会逐渐成熟,支持的开发语言和安全漏洞类型才能达到企业级应用水平,一般中小企业是很难投入如此长的时间进行研发的,而且静态分析类产品底…

    2022年10月9日
    0
  • autoconf介绍1

    autoconf介绍1这里简单整理下这本书的第三章:configureyourprojectwithautoconf书中介绍,循序渐进。第一步:介绍了autoconf和M4宏,并整体运行了一遍,介绍了相关脚本的调用顺序和文件作用。第二步:通过autoconf将Makefile中定义为@VARIABLE@的变量替换,并通过VPATH进行远程构建。第三步:借助autoscan生成configure.ac,并说明文件中的宏含义。

    2022年6月4日
    25
  • 不联网,ubuntu下安装gcc

    不联网,ubuntu下安装gcc1.下载 在GCC网站上(http://gcc.gnu.org/)或者通过网上搜索可以查找到下载资源。目前GCC的最新版本为3.4.0。可供下载的文件一般有两种形式:gcc-3.4.0.tar.gz和gcc-3.4.0.tar.bz2,只是压缩格式不一样,内容完全一致,下载其中一种即可。 2.解压缩 根据压缩格式,选择下面相应的一种方式解包(以下的“%”表示命令行提示符

    2022年7月24日
    23
  • 大公司里怎样开发和部署前端代码[通俗易懂]

    大公司里怎样开发和部署前端代码[通俗易懂]这是一个非常有趣的非主流前端领域,这个领域要探索的是如何用工程手段解决前端开发和部署优化的综合问题,入行到现在一直在学习和实践中。在我的印象中,facebook是这个领域的鼻祖,有兴趣、有梯子的同学可以去看看facebook的页面源代码,体会一下什么叫工程化。接下来,我想从原理展开讲述,多图,较长,希望能有耐心看完。原文https://github.com/fouber/blog

    2022年8月31日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号