Hystrix降级、熔断、超时配置优化


降级:在服务器压力剧增的情况下,根据实际业务情况和流量,对一些服务和页面不处理或简单处理,从而释放服务器资源保证核心交易正常运作。
熔断:熔断一般是指软件系统中,由于某些原因使得服务出现了过载现象,为防止造成整个系统故障,从而采用的一种保护措施,所以很多地方把熔断亦称为过载保护。
限流:限制服务/接口访问的流量。可以从总量+速率进行处理
隔离:保证其中某个服务坏掉,不会影响到其他服务。线程池/信号量隔离模式
幂等性验证: 可能因为网络抖动或其他位置原因,服务端在短时间内可能会受到多笔相同的交易
超时机制:一种是请求的等待超时,一种是请求运行超时。
降级、熔断、隔离属于出现问题后的处理机制。限流属于预防。

1.服务降级

1.1 服务降级的两种方式

fallback

fallbackFactory

两者都能实现降级,但fallbackFactory能得到服务降级的原因。

1.2 fallback使用

FeignAPI和Fallback代码如下:

@FeignClient(name = "shared-geoip", fallback = GeoIPRemote.HystrixFallback.class)
public interface GeoIPRemote {
 
    @RequestMapping(method = RequestMethod.GET, value = "/geo/get_ip_info")
    ResponseMessage<CountryCity> getIpInfo(@RequestParam("host") String host);
 
    @Component
    class HystrixFallback implements GeoIPRemote {
 
        @Override
        public ResponseMessage<CountryCity> getIpInfo(String ip) {
            return ResponseMessage.buildFail(ResponseCode.SERVICE_BUSY, "IP分析服务");
        }
    }
 
}

当服务降级的时候,fallback中只能打印此次调用失败的log,而无法打印详细的异常信息,这明显不符合我们的要求。

1.3 fallbackFactory使用


@FeignClient(name = "shared-geoip", fallbackFactory = GeoIPRemote.HystrixFallbackFactory.class)
public interface GeoIPRemote {
 
    @RequestMapping(method = RequestMethod.GET, value = "/geo/get_ip_info")
    ResponseMessage<CountryCity> getIpInfo(@RequestParam("host") String host);
 
    @Component
    class HystrixFallbackFactory  implements FallbackFactory<GeoIPRemote> {
 
        @Override
        public GeoIPRemote create(Throwable throwable) {
            //此处可以得知异常原因,比如远程服务掉线,服务异常等原因
            LogUtils.error(throwable, "errorMsg:{}", throwable.getMessage());
            return host -> ResponseMessage.buildFail(ResponseCode.SERVICE_BUSY, "IP分析服务");
        }
    }
 
}
2021-06-10 11:14:22.832 [INFO BEGIN] [PollingServerListUpdater-0]:com.netflix.config.ChainedDynamicProperty - [checkAndFlip:115] Flipping property: shared-geoip.ribbon.ActiveConnectionsLimit to use NEXT property: niws.loadbalancer.availabilityFilteringRule.activeConnectionsLimit = 2147483647 [INFO END]
2021-06-10 11:14:22.832.912 [ERROR BEGIN] [hystrix-shared-geoip-1]:c.t.t.p.r.h.HystrixFallbackFactory - [create:26] Connection refused: connect executing POST http://shared-geoip/geo/get_ip_info [ERROR END]
2020-10-30 15:14:22.912 [ERROR BEGIN] [hystrix-shared-geoip-1-1]:c.t.t.p.r.h.FallbackFactory- [GeoIPRemote :60] errorMsg:Connection refused [ERROR END]

当服务降级的时候,fallbackFactory中既打印此次调用失败的log,也可以打印详细的异常信息,符合要求。

2.hystrix线程池配置和超时机制

重点关注hystrix的隔离策略有两种:threadpool和semaphore
对比如下:
在这里插入图片描述
应用提供外网访问,对于高并发下、机器性能比较好的情况下推荐使用threadpool隔离方式。

详细配置如下,调用方微服务和网关服务可根据实际情况进行适当修改。

feign:
  hystrix:
    enabled: true   #开启降级
  
ribbon:
  #Ribbon允许最大连接数,即所有后端微服务实例请求并发数之和的最大值。
  MaxTotalConnections: 500
  #单个后端微服务实例能接收的最大请求并发数
  MaxConnectionsPerHost: 500
  #建议设置超时时间,以免因为等待时间过长造成请求处理失败(一)
  #Http请求中的socketTimeout
  ReadTimeout: 5000
  #Http请求中的connectTimeout
  ConnectTimeout: 10000
  
  
hystrix:
  threadpool:
    default:
      coreSize: 20   #核心线程数量
      maximumSize: 100  #最大线程数量
      allowMaximumSizeToDivergeFromCoreSize: true
  command:
    default:
      fallback:
        isolation:
          thread:
            timeoutInMilliseconds: 10000  #命令执行超时时间
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 10000   #请求的超时
        timeout:
          enabled: true   #断路器超时设置
      circuitBreaker:
        requestVolumeThreshold: 1000   #设置熔断器失败的个数

配置解释链接:https://blog.csdn.net/harris135/article/details/77879148?utm_source=debugrun&utm_medium=distribute.pc_relevant.none-task-blog-title-3&spm=1001.2101.3001.4242

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值