Hystrix


Hystrix

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

  • Когда возникает нежелательная ситуация, контроль этой ситуации как можно быстрее, прежде чем она вызовет другие ситуации в цепочке, направлен на то, чтобы обнаружить и восстановить ситуацию как можно быстрее, и эта тенденция последовательного контроля обеспечивает возможность мониторинга практически в реальном времени.

  • В распределенной архитектуре существует множество зависимостей, и на каком-то этапе они обязательно дадут сбой. Hystrix стремится к «свободному соединению», создавая изоляцию между этими зависимостями.

https://github.com/Netflix/Hystrix

Например, в приложении, состоящем из 10 сервисов, каждый из которых имеет 99,99% времени безотказной работы,

99.9910 = 99,9% времени безотказной работы

0,3% от 1 миллиарда запросов = 3 000 000 отказов

2+ часа простоя/месяц, даже если все зависимые системы имеют отличное время работы.


  • Задержка любой сторонней зависимости начнет использовать все ресурсы системы с возрастающим спросом, вызывая общесистемный сбой.

Включенные принципы проектирования

  • Чтобы зависимость не доминировала в использовании ресурсов.
  • Как можно быстрее привести систему в состояние отказа, создать ответную реакцию и избавиться от нагрузки.
  • Защита пользователя путем реализации логики отката в наиболее подходящем месте в случае сбоя.
  • Снижение зависимости с помощью различных методов изоляции (переборка, плавательная дорожка и автоматический выключатель).
  • Оптимизация обнаружения и восстановления неисправностей.

Как она реализуется?

  • Обертывание всех вызовов внешних систем (или «зависимостей») в объект HystrixCommand или HystrixObservableCommand, обычно выполняемый в отдельном потоке (в этом отношении он похож на паттерн Command).

  • Когда ответ на запрос задерживается, срабатывает тайм-аут, если задержка превышает определенный порог.

  • Для каждой зависимости создается пул потоков, и если этот пул заполнен входящими запросами, запрос немедленно отклоняется, предотвращая ненужное ожидание и трату ресурсов.

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

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

Переборка

  • Создавая пул потоков для каждого типа запросов, он не позволяет одному типу запросов использовать все ресурсы и задерживать другие запросы.

Автоматический выключатель

  • В пуле потоков, если количество запросов и соотношение размера пула потоков увеличивается выше определенного порога, соединение с сервисом разрывается (circuit-open), чтобы на запросы отвечали немедленно и предотвратить задержку.

  • Та же логика может быть применена к запросам с ошибками, а не к отложенным ответам. При возникновении ошибки выше определенного значения соединение разрывается, предотвращая возникновение большого количества ошибок и создавая возможность предпринять необходимые действия.

    @SyncCallLogger
    @Override
    @HystrixCommand(fallbackMethod = "sorgulaTahakkukFallbackMethod",
            commandProperties = {@HystrixProperty(name = "execution.isolation.strategy", value = "SEMAPHORE")})
    public GumrukEttnSorgulaResponseDTO sorgulaTahakkukGumrukten(GumrukEttnSorgulaRequestDTO gumrukEttnSorgulaRequestDTO) {
        return restTemplate.postForObject(gumrukConfiguration.getMaliyews().getSorgulaTahakkuk(), gumrukEttnSorgulaRequestDTO, GumrukEttnSorgulaResponseDTO.class);
    }
Войдите в полноэкранный режим Выход из полноэкранного режима

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

Оцените статью
devanswers.ru
Добавить комментарий