服务熔断

雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并导致服务雪崩的过程。

服务熔断:当服务提供者无法调用时,会通过断路器向调用方直接返回一个错误响应,而不是长时间的等待,避免服务雪崩。

实际情景

项目中使用的是服务消费者Feign、熔断器Hystrix。

前端同时发起20次请求,后台的接口被调用了20次。每一次调用接口,都会在内部通过Feign进行服务消费,调用其他的服务提供者。

同时还使用了Feign自带的Hystrix,进行服务熔断。

经过测试,发现每次调用超过10次后,有些请求就被Hystrix瞬间熔断,并不是超时而触发的熔断。

服务隔离

Hystrix使用舱壁模式实现服务的隔离,使得服务之间不会产生影响,就算某个服务出现延迟过高的情况,也不会拖累其他服务。

Hystrix的服务隔离有线程池隔离和信号量隔离。

如果采用线程池隔离,Hystrix为每个依赖提供一个小的线程池(或信号)(默认10个线程),如果线程池已满调用将被立即拒绝。

解决方法

扩大Hystrix线程池的大小。可以通过设置依赖线程池默认大小,提高并发处理能力。

hystrix:
threadpool:
default:
coreSize: 100 #线程池默认的大小
command:
default:
execution:
timeout:
enabled: true #启用超时机制
isolation:
thread:
timeoutInMilliseconds: 20000 #超时时间 feign:
hystrix:
enabled: true #开启feign自带的hystrix

参考资料:

https://www.jianshu.com/p/819e5e574954

https://github.com/Netflix/Hystrix/wiki/How-it-Works#Threads

《SpringCloud微服务实战》

SpringCloud Hystrix熔断之线程池的更多相关文章

  1. hystrix熔断器之线程池

    隔离 Hystrix有两种隔离方式:信号量和线程池. 线程池隔离:对每个command创建一个自己的线程池,执行调用.通过线程池隔离来保证不同调用不会相互干扰和每一个调用的并发限制. 信号量隔热:对每 ...

  2. Hystrix多个线程池切换执行超时带来的问题(图解)

      线程池切换带来的超时问题 ​ 上图有什么问题: Controller的Hystrx线程池已经到了超时时间,而FeignClient的Hystrx线程池还没到超时时间. 场景: Controller ...

  3. spring-cloud:Hystrix熔断的使用示例

    1.运行环境 开发工具:intellij idea JDK版本:1.8 项目管理工具:Maven 4.0.0 2.GITHUB地址 https://github.com/nbfujx/springCl ...

  4. hystrix信号量和线程池的区别

  5. springcloud(六) Hystrix 熔断,限流

    Hystrix 熔断: 首先仍然启动Eureka,这里就不说了. OrderController.java: package com.tuling.cloud.study.user.controlle ...

  6. HIPPO-4J 1.3.0 正式发布:支持 Dubbo、RibbitMQ、RocketMQ 框架线程池

    文章首发在公众号(龙台的技术笔记),之后同步到个人网站:xiaomage.info Hippo-4J 距离上一个版本 1.2.1 已经过去一个月的时间.在此期间,由 8 位贡献者 提交了 170+ c ...

  7. Hippo4J v1.3.1 发布,增加 Netty 监控上报、SpringCloud Hystrix 线程池监控等特性

    文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info Hippo4J v1.3.1 正式发布,本次发布增加了 Netty 上传动态线程池监控数据.适配 Hystr ...

  8. SpringBoot + SpringCloud Hystrix 实现服务熔断

    什么是Hystrix 在分布式系统中,每个服务都可能会调用很多其他服务,被调用的那些服务就是依赖服务,有的时候某些依赖服务出现故障也是很常见的. Hystrix是Netflix公司开源的一个项目,它提 ...

  9. SpringCloud降级熔断 Hystrix

    1.分布式核心知识之熔断.降级讲解 简介:系统负载过高,突发流量或者网络等各种异常情况介绍,常用的解决方案 1.熔断:         保险丝,熔断服务,为了防止整个系统故障,包含子和下游服务 下单服 ...

随机推荐

  1. 在linux上构建gitolite

    每台机器生成密钥前要设置邮箱和用户名: git config --global user.name "admin" git config --global user.email & ...

  2. docker 命令汇集

    1,查看容器 docker ps [-a] #-a表示全全部否者仅显示运行的 2,登录容器 docker exec -it [containerId] /bin/bashdocker exec -it ...

  3. eclipse注解模板,实实在在的

    1.可以引用其他codetemplate.xml 2.可以自己配置,很快,就几个主要的,个人建议这个,配一次妥妥的,以后就会了,也不用搭理模板了 3.按照公司要求 拿去https://www.jian ...

  4. jQuery获取各种位置方法

    一.获取窗口的宽高 1.获取流览器显示区域的高度 : $(window).height(); 2.获取流览器显示区域的宽度 : $(window).width(); 3.获取文档流的高度 : $(do ...

  5. 解决用try except 捕获assert函数产生的AssertionError异常时,导致断言失败的用例在测试报告中通过的问题

    在使用Python3做自动化测试过程中可能会遇到,assert函数不加try  except,就可以正常在报告里体现用例不通过,加上变成通过. 这是因为在使用try except 时,捕获了asser ...

  6. Android 开发 重写定位器类Timer与TimerTask

    class AttendanceTimer extends Timer { private static final int LOCATION = 0x01; private static final ...

  7. Opencv与Qt (一)之运行测试读取图片

    刚刚在vs上装好了QT和Opencv,试一下效果把. 我简单的创建了一个label,然后使用Opencv导入图像,因为Opencv导入图像是MAT格式的,在使用Qt的时候我们要把导入的图像转换成Qim ...

  8. vue文件上传

    今天写一个文件上传的功能,开始想用element-ui的组件写,但是发现不知道怎么把文件标题和内容一起上传,所以用了经典的input框上传. 废话不多说,直接上代码. 这是表单: <el-for ...

  9. 自学web前端能不能找到一份前端的工作吗

    关于自学web前端能不能通过社招找到一份互联网公司web前端开发的工作,有无数的人问出这样的问题,答案没有标准的,只能从概率去考虑.有的人可以,有的人不可以,有的人自学就业的概率就是高,有的概率就是低 ...

  10. Django10-Form组件

    一.Form介绍 我们之前在HTML页面中利用form表单向后端提交数据时,都会写一些获取用户输入的标签并且用form标签把它们包起来.与此同时我们在很多场景下都需要对用户的输入做校验,比如校验用户是 ...