5.Hystrix

发布时间 2023-05-26 10:22:34作者: 22-10-21

6.Hystrix

6.1.服务雪崩

6.1.1.介绍

什么是服务雪崩

image-20230525204105874

image-20230525204125968

服务雪崩的本质:线程没有及时回收。

不管是调用成功还是失败,只要线程可以及时回收,就可以解决服务雪崩

6.1.2.解决

①修改超时时长

将服务间的调用超时时长改小,这样就可以让线程及时回收,保证服务可用

优点:非常简单,也可以有效的解决服务雪崩

缺点:不够灵活,有的服务需要更长的时间去处理(写库,整理数据)

②设置拦截器

image-20230525204254969

6.2.简介

HystrixNetflix公司开源的一个项目,它提供了熔断器功能,能够阻止分布式系统中出现联动故障

Hystrix是通过隔离服务的访问点阻止联动故障的,并提供了故障的解决方案,从而提高了整个分布式系统的弹性。

熔断器,也叫断路器!(默认断路器是关的,只有出了问题才打开)用来保护微服务不雪崩的方法。

6.3.快速入门

当有服务调用的时候,才会出现服务雪崩,所以Hystrix常和 OpenFeignRibbon一起出现

6.3.1.搭建customer-service

①pom.xml

image-20230525221812298

②修改启动类

image-20230525221032343

③修改配置类

image-20230525222619427

④添加feign接口

image-20230525222335665

⑤添加Hystrix类

image-20230525222158926

⑥添加controller类

image-20230525221218021

6.3.2.搭建car-service

①pom.xml

image-20230525220242000

②修改启动类

image-20230525220258366

③修改配置类

image-20230525220311871

④添加controller

image-20230525220326580

6.3.3.搭建eureka-server

这里和上面的一样,不做多重复

6.3.4.访问测试

http://localhost:8002/customer

测试出现滴滴滴滴滴滴后将8001服务停止,如果出现我是备选方法则为开启成功。

6.4.常用配置

hystrix: #hystrix 的全局控制
    command:
        default: #default 是全局控制,也可以换成单个方法控制,把 default 换成方法名即可
            fallback:
                isolation:
                    semaphore:
                        maxConcurrentRequests: 1000 #信号量隔离级别最大并发数
            circuitBreaker:
                enabled: true #开启断路器
                requestVolumeThreshold: 3 #失败次数(阀值)
                sleepWindowInMilliseconds: 20000 #窗口时间
                errorThresholdPercentage: 60 #失败率
                execution:
                isolation:
                    Strategy: thread #隔离方式 thread 线程隔离集合和 SEMAPHORE 信号量隔级别
                    thread:
                        timeoutInMilliseconds: 3000 #调用超时时长
ribbon:
    ReadTimeout: 5000 #要结合 feign 的底层 ribbon 调用的时长
    ConnectTimeout: 5000

两种隔离方式

thread线程池:按照group(10 个线程)划分服务提供者,用户请求的线程 和做远程的线程不一样

  • 优点:当B服务调用失败了或者请求B服务的量太大了,不会对C服务造成影响用户,访问比较大的情况下使用比较好。(异步的方式 )
  • 缺点:线程间切换开销大,对机器性能影响较大
    • 应用场景:调用第三方服务,并发量大的情况。

SEMAPHORE:按照信号量隔离划分服务提供者,每次请进来有一个原子计数器做请求次数的++,当请求完成以后 --

  • 优点:对cpu开销小
  • 缺点:并发请求不易太多,当请求过多,就会拒绝请求做一个保护机制
    • 应用场景:使用内部调用 ,并发小的情况。