Hystrix 解决服务雪崩效应

1、服务雪崩效应

默认情况下tomcat只有一个线程池去处理客户端发送的所有服务请求,这样的话在高并发情况下,如果客户端所有的请求堆积到同一个服务接口上,

就会产生tomcat的所有线程去处理该服务接口,可能会导致其他服务接口访问延迟;

2、Hystrix服务保护框架,在微服务中Hystrix为我们解决了哪些事情?

Hystrix 别名“豪猪”

1)断路器

2)服务降级

3)服务熔断

4)服务隔离机制

5)服务雪崩效应

--》连环雪崩效应,如果比较严重的话,可能会导致整个微服务接口无法访问,所有服务都会瘫痪

3、解决服务雪崩效应原理:

1)服务降级

在高并发情况下,防止用户一直等待,使用服务降级方式(返回一个友好的提示直接给客户端,不会去处理请求,调用fallback本地方法),目的是为了用户体验

比如秒杀--当前请求人数过多,请稍后重试。(在tomcat中没有线程进行处理客户端请求的时候,不应该让用户一直转圈等待。)

2)服务熔断

例如保险丝,服务熔断的目的是为了保护服务,在高并发情况下,如果请求达到了一定的极限(可以自己设置阈值),如果流量超出了设置的阈值,会自动开启保护服务功能,使用服务降级方式返回一个友好的提示。

熔断机制和服务降级一起使用。

默认阈值为10个

3)服务隔离

采用线程池隔离,每个服务接口都有自己独立的线程池,每个线程池互不影响;

缺点:CPU占用率非常高。

不是所有的接口都要去采用线程池隔离,只有核心关键接口才需要

4、Hystrix设置禁止超时时间

当一个服务被大量线程数访问时,另外一个服务能访问,但是却跳到了fallback方法中,这是因为Hystrix需要设置禁止超时时间;

@HystrixCommand注解默认开启了线程池隔离,服务降级,服务熔断

feign超时时间需要设置,否则会报错

java.net.SocketTimeoutException: Read timed out

--》我设置这一步时,在yml文件中添加相关配置,idea没有给出相应提示,本来还有点怀疑,但是运行之后竟然成功
了。

5、Hystrix实现方式

Hystrix有两种方式实现:一种是注解,一种是接口

1)Hystrix的注解方式业务代码和return调用的方法是属于同一个线程的

2)而第二种方式,业务代码和return调用的方法是两个线程,并且属于不同线程池

3)第一种方式比较冗余,所以最好采用第二种方式

备注

1)这个Hystrix的超时时间会影响所有的接口,不是只针对@HystrixCommand注解的接口

2)如果调用其他接口超时的时候(默认是1秒时间),默认情况下业务逻辑是可以正常执行的,但是为了避免客户端等待,会直接执行服务降级方法。

常见错误

1)java.util.concurrent.TimeoutException: null
2)java.lang.RuntimeException: Hystrix circuit short-circuited and is OPEN

原文地址:https://www.cnblogs.com/syjp/p/10389867.html

时间: 2024-11-08 22:35:30

Hystrix 解决服务雪崩效应的相关文章

【架构】分布式系统雪崩效应处理方案

分布式系统雪崩效应处理方案 异步 雪崩_百度搜索 如何应对并发(2) - 请求合并及异步处理 防雪崩利器:熔断器 Hystrix 的原理与使用 - 编程随笔 - SegmentFault 两种常见雪崩的原理及其避免方法_公园里de石头_新浪博客 [问底]徐汉彬:Web系统大规模并发--电商秒杀与抢购-CSDN.NET 漫谈雪崩 - mikeszhang的专栏 - 博客频道 - CSDN.NET 漫谈雪崩 - 系统其他栏目 - 红黑联盟 前言 分布式系统中经常会出现某个基础服务不可用造成整个系统不

熔断器Hystrix及服务监控Dashboard

服务雪崩效应 当一个请求依赖多个服务的时候: 正常情况下的访问 : 但是,当请求的服务中出现无法访问.异常.超时等问题时(图中的I),那么用户的请求将会被阻塞. 如果多个用户的请求中,都存在无法访问的服务,那么他们都将陷入阻塞的状态中. Hystrix的引入,可以通过服务熔断和服务降级来解决这个问题. 服务熔断服务降级 Hystrix断路器简介 hystrix对应的中文名字是“豪猪”,豪猪周身长满了刺,能保护自己不受天敌的伤害,代表了一种防御机制,这与hystrix本身的功能不谋而合,因此Net

我所经历的一次Dubbo服务雪崩,这是一个漫长的故事

在一个处理用户点击广告的高并发服务上找到了问题.看到服务打印的日记后我完全蒙了,全是jedis读超时,Read time out!一直用的是亚马逊的Redis服务,很难想象Jedis会读超时. 看了服务的负载均衡统计,发现并发增长了一倍,从每分钟3到4万的请求数,增长到8.6万,很显然,是并发翻倍导致的服务雪崩. 服务的部署: 处理广告点击的服务:2台2核8g的实例,每台部署一个节点(服务).下文统称服务A 规则匹配服务(Rpc远程调用服务提供者):2个节点,2台2核4g实例.下文统称服务B 还

解决或缓解服务雪崩的方案

雪崩效应 3 服务雪崩的原因 (1)某几个机器故障:例如机器的硬驱动引起的错误,或者一些特定的机器上出现一些的bug(如,内存中断或者死锁). (2)服务器负载发生变化:某些时候服务会因为用户行为造成请求无法及时处理从而导致雪崩,例如阿里的双十一活动,若没有提前增加机器预估流量则会造服务器压力会骤然增大二挂掉. (3)人为因素:比如代码中的路径在某个时候出现bug 4  解决或缓解服务雪崩的方案 一般情况对于服务依赖的保护主要有3中解决方案: (1)熔断模式:这种模式主要是参考电路熔断,如果一条

架构设计之防止或缓解雪崩效应

熔断 当某个服务调用慢或者有大量超时现象(过载),系统停止后续针对该服务的调用而直接返回,直至情况好转才恢复调用.这通常是为防止造成整个系统故障而采取的一种保护措施,也称过载保护.很多时候刚开始,可能只是出现了局部小规模系统故障,但后来故障影响的范围越来越大,最终导致了全局性的后果. 限流 对某个服务调用设置最高QPS阈值,高于阈值的请求放弃调用直接返回.这种模式不能解决服务依赖的问题,只能解决系统整体资源分配问题,因为没有被限流的请求依然有可能造成雪崩效应. 限流处理方案: 限制最大并发数:

Spring Cloud实战之初级入门(四)— 利用Hystrix实现服务熔断与服务监控

目录 1.环境介绍 2.服务监控 2.1 加入依赖 2.2 修改配置文件 2.3 修改启动文件 2.4 监控服务 2.5 小结 3. 利用hystrix实现消费服务熔断 3.1 加入服务熔断 3.2 测试服务熔断 4. 利用turbine监控所有应用 4.1 创建工程 4.2 修改配置文件 4.3 修改启动文件 4.4 启动 5.一点点重要的事情 1.环境介绍 本篇文章涉及到前面文章的工程,mirco-service-provider.mirco-service-consumer以及需要另外新建

高并发架构系列:如何解决Redis雪崩、穿透、并发等5大难题

别人用手机刷新闻.刷段子,你用手机刷知识.你会的越多,成功率就越高. 本篇分享大型网站高并发架构设计是如何解决Redis雪崩.穿透.并发等5大难题的,以下,enjoy~ 缓存雪崩 数据未加载到缓存中,或者缓存同一时间大面积的失效,从而导致所有请求都去查数据库,导致数据库CPU和内存负载过高,甚至宕机. 比如一个雪崩的简单过程: 1.redis集群大面积故障 2.缓存失效,但依然大量请求访问缓存服务redis 3.redis大量失效后,大量请求转向到mysql数据库 4.mysql的调用量暴增,很

雪崩效应

微服务化产品线,每一个服务专心于自己的业务逻辑,并对外提供相应的接口,看上去似乎很明了,其实还有很多的东西需要考虑,比如:服务的自动扩充,熔断和限流等,随着业务的扩展,服务的数量也会随之增多,逻辑会更加复杂,一个服务的某个逻辑需要依赖多个其他服务才能完成.一但一个依赖不能提供服务很可能会产生雪崩效应,最后导致整个服务不可访问.微服务之间进行rpc或者http调用时,我们一般都会设置调用超时,失败重试等机制来确保服务的成功执行,看上去很美,如果不考虑服务的熔断和限流,就是雪崩的源头.假设我们有两个

DES的雪崩效应分析

明文固定,密钥改变一个字节 假定明文为11111111(00000001 00000001 00000001 00000001 00000001 00000001 00000001 00000001): 密钥为12345678(00000001 00000010 00000011 00000100 00000101 00000110 00000111 00001000). 密钥变动为10345678(00000001 00000000 00000011 00000100 00000101 000