如果想知道Hystrix是如何运行的可以参考github官网源码讲解:https://github.com/Netflix/Hystrix/wiki/How-it-Works
我们可以在本地构建一个微服务提供者,提供8001两个接口,一个直接返回,一个sleep(3)秒后返回,正常访问一个是马上响应,一个是等待3秒响应。上述在非高并发情形下,还能勉强满足,但是在高并发情况下就会量变引起质变。当我们通过Jmeter软件进行压力测试模拟 200次/秒*100次循环的20000次并发访问第二个sleep(3)秒的接口,会直接影响第一个直接返回的接口的响应速度。
导致原因:8001同一层次的其他接口服务被困死,因为tomcat线程里面的工作线程已经被挤占完毕,而此时客户端调用8001,客户端访问响应缓慢,转圈圈,得不到响应;
正因为有上述故障或不佳表现,才有我们的降级/容错/限流等技术诞生。
如何解决及解决的要求:
1、超时导致服务器变慢(转圈):超时不再等待
2、出错(宕机或程序运行出错):要有一个最终处理兜底程序
解决:
- 对方服务(8001)超时了,调用者(80)不能一直卡死等待,必须有服务降级
- 对方服务(8001)down机了,调用者(80)不能一直卡死等待,必须有服务降级
- 对方服务(8001)OK,调用者(80)自己出故障或有自我要求(自己的等待时间小于服务提供者),自己处理降
服务降级---https://blog.youkuaiyun.com/TOP__ONE/article/details/105574438
服务器忙,请稍候再试,不让客户端等待并立刻返回一个友好提示,fallback
哪些情况会触发降级:程序运行异常,超时,服务熔断触发服务降级,线程池/信号量打满也会导致服务降级
服务熔断--https://blog.youkuaiyun.com/TOP__ONE/article/details/105579609
类比保险丝达到最大服务访问后,直接拒绝访问,拉闸限电,然后调用服务降级的方法并返回友好提示。
实现:服务的降级->进而熔断->恢复调用链路
服务限流--因为Hystrix停止维护了,所以后期补上阿里的sentinel讲解配置
秒杀高并发等操作,严禁一窝蜂的过来拥挤,大家排队,一秒钟N个,有序进行