容错限流框架之Hystrix下

上一篇博客介绍了Hystrix的一些基本概念以及运行官网提供的demo程序来理解Hystrix工作原理,此篇博客将介绍如何使用spring-cloud-hystrix。Demo地址。在spring cloud中使用Hystrix非常简单,首先在pom.xml文件中引入依赖

	<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix</artifactId>
		</dependency>
		<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
		</dependency>
		<dependency>
		    <groupId>org.springframework.boot</groupId>
		    <artifactId>spring-boot-starter-actuator</artifactId>
		</dependency>

接着在程序入口增加注解(@EnableHystrixDashboard,@EnableCircuitBreaker)

在需要引入Hystrix的服务调用地方地方添加@HystrixCommand即可,除了添加注解外,还可以配置Hystrix相关的参数,具体配置如下图所示:

在student服务中,模拟了1/3概率的超时错误,所以在通过school-service调用student-service时会出现一定概率的超时错误,school-service进入降级处理逻辑中,即执行fall-back中封装的逻辑。下面的student服务中封装了超时错误的逻辑。

school-service中封装了fall-back逻辑。

通过postman访问school-service的接口,http://localhost:8088/getSchoolDetails/abcschool ,可以看到失败时打印的是fall-back中封装的信息,说明服务降级处理成功。

Dashboard添加stream: "http://localhost:8088/hystrix.stream",添加后访问school-service的接口,dashboard上会显示收集到的metrics信息。

上面介绍了在spring cloud中如何使用Hystrix进行降级处理,在实际项目中,网关是非常重要的组件之一,往往会在网关上引入Hystrix来做限流降级处理,防止发生雪崩效应。如下图所示在网关上引入hystrix,通过Turbine做数据整合,将收集的多个服务的metrics数据整合显示在Dashboard上。apollo作为配置管理工具,可以把一些关键配置存放在apollo,这样可以做动态切换。另外,引入Eureka做服务注册发现。

接下来看看网关和Hystrix整合的小例子,这个例子中使用的是spring cloud gateway,Demo地址。Demo中包含Hystrix-Dashboard和gateway两部分代码,启动Hystrix-Dashboard,在stream中输入启动的gateway服务的stream(http://localhost:8080/actuator/hystrix.stream),注意,因为这里采用的spring boot版本较老,所以url中有actuator,如果是较新版本的spring boot,那么stream地址就是服务地址+/hystrix.stream.

添加stream后,启动gateway服务,并访问gateway上封装的一些接口,Dashboard上就能看到相关的metrics信息了。

http://localhost:8080/all - Countries Service
http://localhost:8080/v1/joke - Joke Service

上面展示了Hystrix和网关集成的效果,接下来看看网关上是如何集成的。首先在pom.xml中引入Hystrix依赖,接着在application.yaml文件中配置Hystrix的一些参数设置。最后是网关路由配置,在路由配置部分自定义fallback处理逻辑等,具体代码如下所示:

以上就是网关和Hystrix集成的一个简单例子,实际项目中可以在网关集中埋点,覆盖大部分场景。可以对接Appolo,这样可以动态调整关键配置的值。对于采用信号量隔离还是线程池隔离,可以沿用如下原则:

信号量:主要用于网关、缓存类场景。

线程池:主要用户服务见调用,数据库访问,第三方服务访问

另外,线程池大小设置经验值,官网也给出了计算建议。线程数量设置可以根据期望的TPS来计算,例如假设TPS是30,每个请求的响应时间是0.3second,那么再加一些buffer,来得到最终的线程数量值:

30rps * 0.2 sec = 6 + breathing room = 10 threads
Thread-pool Queue size: 5-10

在部署方面,可结合Eureka做服务注册和发现,Turbine做数据整合,统一在Dashboard中显示,如下图所示:

 

以上就是对Hystrix的学习和理解。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

taoli-qiao

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值