Hystrix降级、熔断、超时配置优化-创新互联

文章目录
    • 1.服务降级
      • 1.1 服务降级的两种方式
      • fallback
      • fallbackFactory
      • 1.2 fallback使用
      • 1.3 fallbackFactory使用
    • 2.hystrix线程池配置和超时机制

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

10年积累的做网站、成都网站建设经验,可以快速应对客户对网站的新想法和需求。提供各种问题对应的解决方案。让选择我们的客户得到更好、更有力的网络服务。我虽然不认识你,你也不认识我。但先网站设计后付款的网站建设流程,更有南平免费网站建设让你可以放心的选择与我们合作。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")
    ResponseMessagegetIpInfo(@RequestParam("host") String host);
 
    @Component
    class HystrixFallback implements GeoIPRemote {
 
        @Override
        public ResponseMessagegetIpInfo(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")
    ResponseMessagegetIpInfo(@RequestParam("host") String host);
 
    @Component
    class HystrixFallbackFactory  implements FallbackFactory{
 
        @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

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


当前名称:Hystrix降级、熔断、超时配置优化-创新互联
文章源于:http://myzitong.com/article/dgsijg.html