Hystrix ограничения распределенной системы, понижение, сплавление кадра (б)

Три, отказоустойчивость Hystrix

       Hystrix главным образом путем добавления отказоустойчивости разрешены методы задержки и отказоустойчивых к контролю помощи взаимодействию между этими распределенными службами. Через точку службы доступа между изоляцией и предотвратить каскадные сбои между ними и обеспечить резервный варианты для достижения этой цели, тем самым улучшая общую устойчивость системы. Hystrix главным образом обеспечивает следующий метод отказоустойчивой:

  • изоляция ресурсов
  • взрыватель
  • Понизить

1, выделение ресурсов - пул потоков


CMD-уценка-логотип

CMD-уценка-логотип



2, выделение ресурсов - семафор


CMD-уценка-логотип



CMD-уценка-логотип

пул потоков и семафора изоляции сравнить
  переключение потоков Поддержка асинхронных поддержка тайм-аут Поддержка взрыватель ограничения расходование
семафор нет нет нет Здесь Здесь небольшой
пул потоков Здесь Здесь Здесь Здесь Здесь большой

       Когда запрос сеть накладных услуг являются относительно большим, много времени или запросы, наши лучше всего использовать стратегию изоляции потоков, так что вы можете гарантировать большое количество контейнеров (кот) поток доступен, не потому, что по причинам обслуживания, был в блокировании или состояние ожидания, не вернулся быстро. И когда мы спрашиваем кэширование этих услуг, мы можем использовать семафор стратегию изоляции, поскольку такие услуги, как правило, возвращаются очень быстро, не слишком длинный контейнер нити, но и уменьшить количество нити переключения накладных расходов, улучшение эффективность службы кэша.

       бассейн Нити для подавляющего большинства сценариев, звонки в сеть запроса на обслуживание зависимого; семафор для доступа к внешнему доступу не зависит, но доступ к внутренней части некоторых из более сложной бизнес-логики, просто сделать обычный предел семафора течь по нему.

3, предохранитель

Зачем использовать автоматический выключатель ?

       В распределенной архитектуре, приложение использует большее количество услуг очень часто, если один полагается слишком высокий поток заблокирован из-за задержки происходят, называющая зависимые службы будут заблокированы, если более высоким связанным с бизнесом-КПТ, можно производить большое количество обструкции, в результате приложения / службы, так как ресурсы сервера будут исчерпаны, и изношены. Кроме того, отказ будет передаваться между приложениями, в большей степени зависит от входной службы, если неисправность может вызвать службу лавинного эффекта.

CMD-уценка-логотип

Детальный процесс плавит работу следующим образом:

Первый шаг, называя allowRequest (), чтобы определить, следует ли разрешить запрос должен быть представлен в пул потоков

1、如果熔断器强制打开,circuitBreaker.forceOpen为true,不允许放行,返回。

2、如果熔断器强制关闭,circuitBreaker.forceClosed为true,允许放行。此外不必关注熔断器实际状态,也就是说熔断器仍然会维护统计数据和开关状态,只是不生效而已。

第二步,调用isOpen()判断熔断器开关是否打开

1、如果熔断器开关打开,进入第三步,否则继续;

2、如果一个周期内总的请求数小于circuitBreaker.requestVolumeThreshold的值,允许请求放行,否则继续;

3、如果一个周期内错误率小于circuitBreaker.errorThresholdPercentage的值,允许请求放行。否则,打开熔断器开关,进入第三步。

第三步,调用allowSingleTest()判断是否允许单个请求通行,检查依赖服务是否恢复

1、如果熔断器打开,且距离熔断器打开的时间或上一次试探请求放行的时间超过circuitBreaker.sleepWindowInMilliseconds的值时,熔断器器进入半开状态,允许放行一个试探请求;否则,不允许放行。

此外,为了提供决策依据,每个熔断器默认维护了10个bucket,每秒一个bucket,当新的bucket被创建时,最旧的bucket会被抛弃。其中每个blucket维护了请求成功、失败、超时、拒绝的计数器,Hystrix负责收集并统计这些计数器。

CMD-уценка-логотип

执行策略如下:

Hystrix遇到一个超时/失败请求,此时启动一个10s的窗口,后续的请求会进行如下判断:

(1)查看失败次数是否超过最小调用次数

  • 如果没有超过,则放行请求。
  • 如果超过最小请求数,继续下面逻辑

(2)判断失败率是否超过一个阈值,这里错误是指超时和失败两种。

  • 如果没有超过,则放行
  • 如果超过错误阈值,则继续下面逻辑

(3)熔断器断开

  • 请求会直接返回失败。
  • 会开一个5s的窗口,每隔5s调用一次请求,如果成功,表示下游服务恢复,否则继续保持断路器断开状态。

4、降级

       降级,通常指务高峰期,为了保证核心服务正常运行,需要停掉一些不太重要的业务,或者某些服务不可用时,执行备用逻辑从故障服务中快速失败或快速返回,以保障主体业务不受影响。

       要支持回退或降级处理,一般是查询操作,可以重写HystrixCommand的getFallBack方法或HystrixObservableCommand的resumeWithFallback方法,通常不建议在回退逻辑中执行任何可能失败的操作。

Hystrix在以下几种情况下会走降级逻辑:

  • 执行construct()或run()抛出异常
  • 熔断器打开导致命令短路
  • 命令的线程池和队列或信号量的容量超额,命令被拒绝
  • 命令执行超时

       如果降级逻辑中需要发起远程调用,建议重新封装一个HystrixCommand,使用不同的ThreadPoolKey,与主线程池进行隔离。

四、Hystrix配置

       Hystrix默认使用Netflix Archaius进行配置管理,项目中使用zookeeper作为配置源,通过archaius-zookeeper实现hystrix命令、熔断器、线程池、监控等参数的动态配置,根据生产环境需要动态调整hystrix参数,实现了对微服务的治理。

       每个Hystrix参数都有4个地方可以配置,优先级从低到高如下,如果每个地方都配置相同的属性,则优先级高的值会覆盖优先级低的值:

  • 内置全局默认值:写死在Hystrix代码里的默认值,如HystrixCommandProperties.default_executionTimeoutInMilliseconds属性
  • 动态全局默认属性:全局配置文件读到的默认值
  • 内置实例默认值:创建HystrixCommand时,通过注解或者给父类构造器传参的方式设置的默认值
  • Примеры динамических свойств конфигурации: Конкретные примеры конфигурационных файлов по значениям атрибутов

Тайм-аут Hystrix выполнения команды sns.grassSearchIndex предоставляется в качестве примера, приоритет атрибутов от низкого до высокого

default_executionTimeoutInMilliseconds=1000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=500
HystrixCommandProperties.Setter().withExecutionTimeoutInMilliseconds(1000)
hystrix.command.sns.grassSearchIndex.execution.isolation.thread.timeoutInMilliseconds=1500

Конфигурация команд

# 隔离策略: 可选THREAD|SEMAPHORE,默认TREAD
hystrix.command.default.execution.isolation.strategy=TREAD
# 服务超时时间,单位毫秒,默认1000
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=3000 
# 服务sns.grassSearchIndex超时时间
hystrix.command.sns.grassSearchIndex.execution.isolation.thread.timeoutInMilliseconds=2000
# 是否打开超时检测,默认启用true
hystrix.command.default.execution.timeout.enabled=true
# 使用信号量隔离时qps阈值,后续的请求会被拒,默认10
hystrix.command.default.execution.isolation.semaphore.maxConcurrentRequests=10

Предохранитель (автоматический выключатель) Конфигурация

# 是否打开断路器,默认开启true
hystrix.command.default.circuitBreaker.enabled=true
# 断路器检测的基础请求值,只有时间窗口内的请求数达到这个阈值时,才会判定错误率,否则比如只有一两个请求,即便都失败了,也不会打开断路器,因为基数太少了,默认20
hystrix.command.default.circuitBreaker.requestVolumeThreshold=100
# 错误百分比,超过就会短路,默认值50
hystrix.command.default.circuitBreaker.errorThresholdPercentage=75
# 指的是从断路器打开状态到半开半闭状态需要的时间,即断路后,需要等多久才能放一个请求进来,默认值5000
hystrix.command.default.circuitBreaker.sleepWindowInMilliseconds=5000

# Metrics
# 统计的时间窗口大小,默认10000
hystrix.command.default.metrics.rollingStats.timeInMilliseconds=10000
# 时间窗口的桶的数目,必须能被时间窗口大小整除,否则报错,每个bucket包含success,failure,timeout,rejection的次数的统计信息,默认10
hystrix.command.default.metrics.rollingStats.numBuckets=10
# 每一次检测的间隙。因为就算分窗口统计错误率,也会很占cpu,所以每一次统计都会等一个时间间隔再开始,默认500
hystrix.command.default.metrics.healthSnapshot.intervalInMilliseconds=500
# 带rollingPercentile的都表示调用时延的统计,该选项表示是否打开时延统计,比如说95分位99分位等,如果关闭都返回-1,默认true
hystrix.command.default.metrics.rollingPercentile.enabled=true
# 时延统计的时间窗口,默认60000
hystrix.command.default.metrics.rollingPercentile.timeInMilliseconds=60000 
# 时延统计的桶数目
hystrix.command.default.metrics.rollingPercentile.numBuckets=6
# 时延统计的桶大小,时延统计每一个桶只维持最新的该数值的请求的数据,早一些的将会被覆盖。如果bucket size=100,window=10s,若这10s里有500次执行,只有最后100次执行会被统计到bucket里去,增加该值会增加内存开销以及排序的开销,默认100
hystrix.command.default.metrics.rollingPercentile.bucketSize=100 

бассейн Thread (ThreadPool) Конфигурация

# 默认核心线程数,不会变,默认10
hystrix.threadpool.default.coreSize=30
# userLogin隔离线程池核心线程数
hystrix.threadpool.userLogin.coreSize=20
# 等待队列,还超就会被拒,这个数值无法动态修改,默认-1
hystrix.threadpool.default.maxQueueSize=50000
# userLogin隔离线程池等待队列
hystrix.threadpool.userLogin.maxQueueSize=3000
# 进入queue时被拒的概率值,即便是没有达到maxQueueSize。这个为了弥补上面无法动态修改的不足。可以通过这个概率值来控制队列大小
hystrix.threadpool.default.queueSizeRejectionThreshold=45000
#线程池统计指标的时间,默认10000
hystrix.threadpool.default.metrics.rollingStats.timeInMilliseconds=10000
#将rolling window划分为n个buckets,默认10
hystrix.threadpool.default.metrics.rollingStats.numBuckets=10

В-пятых, службы мониторинга

Hystrix Dashboard

       Hystrix Приборная панель в основном используется для мониторинга в режиме реального времени показателей информационной Hystrix. Информация в режиме реального времени через Hystrix Dashboard обратной связи может помочь нам быстро выявить системные проблемы.

       По https://search.maven.org загрузок автономной-Hystrix-приборной панель сайта, посетите сайт баночку после запуска пакета: // локальная: 7979 / hystrix- панели /, вы можете ввести Hystrix панели страница

nohup java -jar -DserverPort=7979 -DbindAddress=localhost standalone-hystrix-dashboard-1.5.3-all.jar &

CMD-уценка-логотип

       Кластерный мониторинг окружающей среды может быть использован для мониторинга турбины Netflix предложения. По Maven государственной службы https://search.maven.org загрузки и развертывания войны пакет турбинного веб, чтобы изменить конфигурацию узла кластера, адрес турбины HTTP: // локальный: $ {порт} /turbine.stream?cluster=default добавить мониторинг на приборную панель

CMD-уценка-логотип

turbine.aggregator.clusterConfig=default
turbine.instanceUrlSuffix=:8080/gateway/hystrix.stream
turbine.ConfigPropertyBasedDiscovery.test.instances=10.66.70.1,10.66.70.2,10.66.70.3

рекомендация

отwww.cnblogs.com/qingfengEthan/p/12113115.html