Netflix Hystrix 常用属性

以下是 Hystrix 中常用的属性及详细说明。注意,这些属性可以通过 HystrixPropertiesManager 常量类查看,如下图:

image.png

详细说明如下:

execution.isolation.strategy

该属性用于指定 HystrixCommand.run() 方法的隔离策略。

取值及说明:

  • THREAD:表示使用线程隔离。在这种模式下,Hystrix 会为每个依赖调用分配一个独立的线程池,这样可以将不同依赖的调用隔离开来,避免某个依赖的长时间调用阻塞其他依赖的调用。例如,当一个服务的调用可能会因为网络延迟等原因导致长时间响应时,使用线程隔离可以确保其他服务的调用不受影响。

  • SEMAPHORE:表示使用信号量隔离。信号量隔离是基于计数器的方式来限制对某个资源的并发访问数量。与线程隔离不同,它不会为每个依赖调用创建新的线程,而是在同一个线程中通过信号量来控制并发访问。这种方式适用于那些执行时间较短且不会发生阻塞的依赖调用,能够更高效地利用资源。

execution.isolation.thread.timeoutInMilliseconds

当使用线程隔离策略时,该属性用于设置 HystrixCommand.ru() 方法的超时时间。

如果 HystrixCommand.run() 方法的执行时间超过了此超时时间,Hystrix 将会中断该线程的执行,并执行相应的降级逻辑。例如,假设设置该超时时间为 1000 毫秒,而某个服务的调用在 1500 毫秒时还未返回结果,那么 Hystrix 就会认为该调用超时,进而触发降级操作,返回预设的默认值或执行其他备用逻辑,以避免长时间等待导致系统性能下降。

execution.timeout.enabled

用于控制是否启用超时机制。

取值及说明:

  • true表示启用超时机制,即当 HystrixCommand.run() 方法的执行时间超过 execution.isolation.thread.timeoutInMilliseconds 所设置的超时时间时,会触发超时处理逻辑。

  • false:表示禁用超时机制,此时 HystrixCommand.run() 方法将不会因为执行时间过长而被中断,会一直等待方法执行完成。在某些特殊情况下,可能需要禁用超时机制,但需要谨慎使用,以免出现长时间的阻塞导致系统性能问题。

execution.isolation.thread.interruptOnTimeout

当使用线程隔离策略且启用超时机制时,该属性决定了在超时时是否中断线程。

取值及说明:

  • true:表示在超时时中断线程的执行。这是默认值,通常情况下,中断线程可以及时释放资源,避免线程的长时间占用,但需要注意的是,如果线程中正在执行的操作不支持中断,可能会导致一些意想不到的问题。

  • false:表示在超时时不中断线程的执行,线程会继续执行直到完成。这种情况下,虽然不会因为中断线程而可能引发一些问题,但可能会导致资源的长时间占用,影响系统的性能和响应能力。

execution.isolation.semaphore.maxConcurrentRequests

当使用信号量隔离策略时,该属性用于设置信号量的最大并发请求数。

它限制了同时能够访问某个依赖的并发请求数量。例如,将该值设置为 10,表示最多同时允许 10 个请求访问该依赖。当并发请求数超过此限制时,后续的请求将被拒绝,直接执行降级逻辑,从而保护依赖服务不被过多的请求压垮,确保系统的稳定性和可靠性。

fallback.isolation.semaphore.maxConcurrentRequests

用于设置 Hystrix 在执行降级逻辑时,信号量的最大并发请求数。

当多个请求同时触发降级逻辑时,该属性限制了同时能够执行降级方法的请求数量。例如,将其设置为 5,若有 10 个请求同时因服务故障等原因需要执行降级逻辑,那么只有 5 个请求能够同时进入降级方法执行,其余 5 个请求将被阻塞,直到有可用的信号量为止。这样可以防止因过多的降级请求同时执行而导致系统资源耗尽。

fallback.enabled

用于控制是否启用降级功能。

取值及说明:

  • true:表示启用降级功能。当服务调用出现故障、超时或被熔断等情况时,Hystrix 将执行预先定义的降级逻辑,以提供一个备用的响应,从而保证系统的部分功能可用,提高系统的可用性和稳定性。

  • false:表示禁用降级功能。此时,当服务调用出现问题时,Hystrix 将不会执行降级逻辑,而是直接将异常向上抛出,可能导致调用方接收到错误信息,影响用户体验。

circuitBreaker.enabled

用于控制是否启用断路器功能。

取值及说明:

  • true:表示启用断路器。断路器会监控服务调用的失败率等指标,当失败率超过一定阈值时,断路器将打开,后续的请求将直接被短路,不会再去调用实际的服务,而是直接执行降级逻辑,从而避免故障服务对系统的进一步影响,起到保护系统的作用。

  • false:表示禁用断路器功能。此时,Hystrix 将不会对服务调用的失败情况进行监控和熔断处理,所有请求都会直接调用服务,即使服务出现大量故障,也不会自动进行短路和降级操作。

circuitBreaker.requestVolumeThreshold

用于设置在一个滚动窗口内,断路器判断是否打开的最小请求数量。

例如,将该值设置为 20,表示在一个统计窗口内,至少需要有 20 个请求发生,才会根据错误率等指标来判断是否打开断路器。如果请求数量未达到此阈值,即使有部分请求失败,断路器也不会打开,这样可以避免在请求量较小时,因个别请求的失败而误触发断路器。

circuitBreaker.sleepWindowInMilliseconds

当断路器打开后,经过该时间间隔,Hystrix 会进入半开状态,尝试放行一部分请求到实际服务进行探测。

假设设置该值为 5000 毫秒,即断路器打开 5 秒后,会允许少量请求通过去调用实际服务,以查看服务是否已经恢复正常。如果这些请求能够成功响应,说明服务可能已经恢复,断路器将关闭,恢复正常的服务调用;如果请求仍然失败,则断路器继续保持打开状态,等待下一个探测周期。

circuitBreaker.errorThresholdPercentage

用于设置在一个滚动窗口内,请求失败率的阈值。当失败率超过此阈值时,断路器将打开。

例如,将该值设置为 50%,表示在一个统计窗口内,如果服务调用的失败请求数量占总请求数量的比例超过 50%,断路器就会打开。通过调整该阈值,可以根据服务的实际稳定性和重要性来灵活控制断路器的触发条件,确保系统在面对不同程度的故障时能够做出合理的响应。

circuitBreaker.forceOpen

用于强制打开断路器。

取值及说明:

  • true:表示强制将断路器设置为打开状态,此时所有请求都将直接执行降级逻辑,不会调用实际服务。通常用于在已知服务存在严重问题或进行系统维护等情况下,暂时切断对该服务的调用,以保证系统的稳定性。

  • false:表示不强制打开断路器,断路器的状态将根据实际的请求失败率等指标来自动判断和切换。

circuitBreaker.forceClosed

用于强制关闭断路器。

取值及说明:

  • true:表示强制将断路器设置为关闭状态,此时所有请求都将直接调用实际服务,而不会经过断路器的熔断判断和降级处理。这种情况一般在确定服务已经恢复正常且稳定运行,需要暂时忽略断路器的保护机制时使用,但需要谨慎操作,以免因服务未完全恢复而导致系统出现大量错误。

  • false:表示不强制关闭断路器,断路器的状态将根据配置的规则和实际的服务调用情况自动进行调整。

metrics.rollingPercentile.enabled

用于控制是否启用滚动百分比统计功能。

取值及说明:

  • true:表示启用滚动百分比统计。Hystrix 会收集和统计请求执行时间等指标的百分比分布情况,例如 90%、95%、99% 等百分位的执行时间,以便更全面地了解服务的性能表现。这些统计数据可以帮助开发人员更好地评估服务的响应时间分布,发现潜在的性能瓶颈。

  • false:表示禁用滚动百分比统计功能,此时 Hystrix 将不会收集和计算相关的百分比统计数据,以节省一定的系统资源和性能开销。

metrics.rollingPercentile.timeInMilliseconds

用于设置滚动百分比统计的时间窗口大小。

例如,将该值设置为 60000 毫秒,即表示统计的时间窗口为 60 秒。在这个 60 秒的窗口内,Hystrix 会持续收集和更新请求执行时间等指标的百分比统计数据。随着时间的推移,窗口会向前滚动,旧的数据会逐渐被新的数据所替代,从而始终保持对最近一段时间内服务性能的动态监测。

metrics.rollingPercentile.numBuckets

用于设置在滚动百分比统计的时间窗口内,数据桶的数量。

假设将该值设置为 10,结合 metrics.rollingPercentile.timeInMilliseconds 为 60000 毫秒,那么每个数据桶的时间跨度为 60000 / 10 = 6000 毫秒,即 6 秒。Hystrix 会将时间窗口划分为 10 个等长的数据桶,每个数据桶分别收集和统计在其对应的 6 秒时间段内的请求执行时间等数据,以便更细致地分析不同时间段内的服务性能变化情况。

metrics.rollingPercentile.bucketSize

用于设置每个数据桶中最多存储的请求数量。

当某个数据桶中的请求数量达到该设置值时,新的请求数据将开始覆盖最早的请求数据。例如,设置 bucketSize 为 100,若在某个 6 秒的数据桶内已经收集了 100 个请求的执行时间数据,当第 101 个请求到来时,最早的那个请求数据将被新的请求数据所替换,从而始终保持每个数据桶内存储的是最近的一定数量的请求数据,避免数据无限增长导致内存占用过大等问题。

metrics.healthSnapshot.intervalInMilliseconds

用于设置健康状况快照的时间间隔。

例如,将该值设置为 500 毫秒,表示每隔 500 毫秒,Hystrix 会对服务的健康状况进行一次快照记录。这些健康状况快照数据包括请求成功率、失败率等指标,通过对这些快照数据的分析,可以实时了解服务的健康状态变化趋势,及时发现服务是否出现异常或性能下降等问题,以便采取相应的措施进行调整和优化。

requestCache.enabled

用于控制是否启用请求缓存功能。

取值及说明:

  • true:表示启用请求缓存。Hystrix 会缓存相同请求的结果,当下次有相同请求到来时,直接从缓存中获取结果,而无需再次执行实际的业务逻辑,从而提高系统的性能和响应速度,尤其适用于一些重复查询且数据更新不频繁的场景。

  • false:表示禁用请求缓存功能,每次请求都会执行实际的业务逻辑,不会进行缓存和缓存数据的复用。

requestLog.enabled

用于控制是否启用请求日志记录功能。

取值及说明:

  • true:表示启用请求日志记录。Hystrix 会详细记录每个请求的相关信息,如请求时间、请求参数、响应结果、是否执行降级逻辑等,这些日志信息对于故障排查、性能分析和系统监控非常有帮助,可以帮助开发人员快速定位问题和了解系统的运行情况。

  • false:表示禁用请求日志记录功能,此时将不会记录请求的详细信息,以减少日志输出量和系统性能开销。

maxQueueSize

当使用线程池隔离策略时,该属性用于设置线程池的最大队列长度。

例如,将 maxQueueSize 设置为 100,当线程池中的线程都在忙碌且队列中的请求数量未达到 100 时,新的请求会被放入队列中等待线程处理。一旦队列中的请求数量达到 100,后续的请求将根据配置的拒绝策略进行处理,如直接拒绝或执行降级逻辑等,从而控制线程池的负载,避免过多的请求积压导致系统资源耗尽。

coreSize

当使用线程池隔离策略时,该属性用于设置线程池的核心线程数量。

核心线程数量是线程池在初始化时创建的线程数量,也是线程池在非繁忙时期保持的最小线程数量。例如,设置 coreSize 为 10,表示线程池初始时会创建 10 个线程来处理请求。这些核心线程会一直存在,即使它们处于空闲状态,也不会被销毁,以便在有新的请求到来时能够快速响应,提高系统的性能和响应能力。

keepAliveTimeMinutes

当使用线程池隔离策略时,该属性用于设置线程池中空闲线程的存活时间。

例如,将 keepAliveTimeMinutes 设置为 1,表示线程池中的空闲线程在空闲 1 分钟后将被自动销毁,释放系统资源。这样可以在系统负载较低时,合理地回收空闲线程所占用的资源,提高系统资源的利用率,但需要注意的是,线程的销毁和创建也会带来一定的性能开销,因此需要根据实际情况合理设置该值。

queueSizeRejectionThreshold

当使用线程池隔离策略时,该属性用于设置队列拒绝请求的阈值。

该值通常小于等于 maxQueueSize。例如,设置 queueSizeRejectionThreshold 为 80,当线程池的队列长度达到 80 时,即使未达到 maxQueueSize,后续的请求也会被拒绝或执行降级逻辑,从而提前对请求进行控制,避免队列过长导致请求等待时间过长,影响系统的性能和用户体验。

metrics.rollingStats.numBuckets

用于设置滚动统计数据的桶数量。

与 metrics.rollingPercentile.numBuckets 类似,它将滚动统计的时间窗口划分为多个等长的桶,每个桶用于收集和统计在其对应的时间段内的请求数据。例如,设置 metrics.rollingStats.numBuckets 为 12,结合 metrics.rollingStats.timeInMilliseconds 为 60000 毫秒,那么每个桶的时间跨度为 60000 / 12 = 5000 毫秒,即 5 秒。通过这种方式,可以更细致地分析不同时间段内的请求数据,为系统的性能优化和故障排查提供更详细的依据。

metrics.rollingStats.timeInMilliseconds

用于设置滚动统计的时间窗口大小。

例如,将该值设置为 60000 毫秒,即表示统计的时间窗口为 60 秒。在这个 60 秒的窗口内,Hystrix 会持续收集和更新请求的各种统计数据,如请求次数、成功次数、失败次数、响应时间等,并根据这些数据计算出相应的指标,如成功率、失败率、平均响应时间等,以便实时了解系统的运行状况和性能表现。

maxRequestsInBatch

用于设置批量请求处理的最大请求数量。

在某些场景下,Hystrix 支持将多个请求合并为一个批量请求进行处理,以提高系统的性能和效率。maxRequestsInBatch 属性限制了每次批量请求中最多包含的单个请求数量。例如,设置 maxRequestsInBatch 为 100,表示每次批量请求最多可以包含 100 个单个请求,超过此数量的请求将被分割为多个批量请求进行处理。

timerDelayInMilliseconds

用于设置定时器的延迟时间。

在一些 Hystrix 的内部操作或定时任务中,会使用定时器来触发相应的逻辑。timerDelayInMilliseconds 属性指定了定时器在启动后延迟多长时间才开始执行第一次定时任务。例如,设置 timerDelayInMilliseconds 为 1000 毫秒,即表示定时器在启动 1 秒后才会执行第一次定时任务,之后会按照定时器的周期继续执行相应的任务。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号