首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

让你的服务更稳定-10分钟学会稳定性神器hystrix

让服务更稳 -熔断器hystrix介绍

一、为何使用熔断器

在大中型分布式和微服务架构的系统中,一个系统通常会依赖很多组件,通过不同方式(HTTP,hession,Netty,Dubbo等)连接,如下图

在高并发访问下,这些依赖的稳定性与否对系统的影响非常大。但是依赖有很多不可控问题:如网络连接缓慢,资源繁忙,暂时不可用,服务宕机等。如下图:QPS为50的依赖I出现不可用,但是其他依赖仍然可用。

当依赖I阻塞时,主服务器的线程池就出现阻塞(BLOCK),影响整个线上服务的稳定性,如下图:

在复杂的分布式架构的应用程序有很多的依赖,都会不可避免地在某些时候失败。高并发的依赖失败时如果没有隔离措施,当前应用服务就有被拖垮的风险。

我们举个例子:

一个依赖有30个服务的系统,每个依赖服务都能保证99.99%的高可用。

99.99%的30次方≈99.7%,意味着这个系统的最高只能有99.7%的可用性,大大降低了服务的可用性。

解决问题方案:对依赖做隔离,Hystrix就是处理依赖隔离的框架,同时也是可以帮我们做依赖服务的治理和监控。

二、Hystrix服务治理

Hystrix是由Netflix开源的一款容错框架,致力于提升在分布式系统架构中的系统稳定性。主要功能:

1、自动熔断,降级处理

如上面图所示,当主服务发现依赖I大量出现超时、错误、异常等情况时,会对依赖I进行开启熔断处理。开启熔断后,接下来一段时间内将不再调用服务I,主服务走相应的降级逻辑。

好处:

a、对主服务性能影响很小,不会出现大规模的阻塞,拖垮主服务的情况。

b、减少对服务I的调用,降低服务I的压力,有利于服务I的恢复。

2、自动恢复

熔断器在熔断期间会不停的尝试少量请求,当依赖服务I手动或自动恢复后,尝试请求成功,一段时间都成功后,会关闭熔断器,恢复正常访问。

整个过程主服务自动熔断,自动恢复,对主服务对外透明无感知。建议更 适合对查询类接口加入熔断处理。

三、Hystrix监控界面

1、监控平台Hystrix-dashboard

Hystrix-dashboard提供了对依赖服务调用的监控,下图为一个依赖服务的调用详情。

左上角图表:服务调用总体情况

圆形大小表示调用量多少;

颜色表示健康情况,绿色正常,红色异常;

折线图表示调用量-时间图。

右上角图标:”socCaptchaStatic”:服务名称

下面6个数字依次为10s种之内的

成功数、超时数、熔断数、拒绝数、接口异常数、失败数,

百分比为10s种之内的错误占比。

中间图表:

Host:10s之内的平均请求数

Cluster:10s之内集群的平均请求数

Circuit:是否开启熔断

下方图标:

Hosts:集群数

Median:耗时中位数

Mean:耗时平均数

90th:耗时90%分位

99th:耗时99%分位

99.5th:耗时99.5%分位

2、集群监控Turbine

上面监控为单机的调用情况,往往我们需要合并集群内多个实例的调用情况,需要使用Turbine组件,来做合并。

四、Hystrix使用实战

1、依赖maven

2、使用命令模式封装依赖逻辑

输出:

可以看到run方法是在不同的线程中执行。

默认使用的是线程池方法实现,使用线程池来隔离(也可以设置成信号量实现)。原理图

3、使用Fallback() 提供降级策略

输出:

设置超时时间500ms,接口sleep 1s,触发超时,走降级逻辑。Run方法中抛出异常,当前熔断开启都会走降级处理的方法。

4、设置参数

可对不同的command设置不同的参数,用于分组,统计和满足不同的业务需求。

5、配置监控

A、主工程配置servlet

B、下载hystrix-dashboard.war,

地址:http://search.maven.org/remotecontent?filepath=com/netflix/hystrix/hystrix-dashboard/1.5.12/hystrix-dashboard-1.5.12.war

C、下载turbine-web.war,

地址:http://search.maven.org/remotecontent?filepath=com/netflix/turbine/turbine-web/1.0.0/turbine-web-1.0.0.war

修改包中配置文件:config.properties

turbine.instanceUrlSuffix=:8080/soc-web-api/hystrix.stream //某个服务的path

turbine.ConfigPropertyBasedDiscovery.soc-web-api.instances=127.0.0.1 //集群地址

D、把turbine-web合并到hystrix-dashboard中,注意web.xml合并。

E、把hystrix-dashboard放到tomcat中启动,访问http://127.0.0.1:8080/hystrix-dashboard/

输入上图中地址,点击“监控”按钮,即可监控服务。

参考资料:

https://github.com/Netflix/Hystrix

https://github.com/Netflix-Skunkworks/hystrix-dashboard

https://github.com/Netflix/Turbine

作者|开鑫金服-邓安明,安全中心-资深开发。

编辑|Andy

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180521G1HEGW00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券