предисловие
20181130, Hystrix больше не поддерживается, вот запись обучения. Он был завершен только 1 декабря, а ноябрьское обещание не выполнено, запись о пожертвовании переместилась выше.no.OSCHINA.net/floor/tweet…
Что такое Хайстрикс
Hystrix — это библиотека классов Java, обеспечивающая отказоустойчивость сервиса.
возникшие проблемы
- Время ответа на запрос слишком велико, в результате чего ресурс не освобождается вовремя. Кратковременные огромные запросы вызывают истощение ресурсов и в конечном итоге приводят к тому, что система не отвечает.
- Сбой одной службы службы в системе влияет на другие системы и вызывает каскадные сбои системы.
- Если запрос не ограничен или не пакетирован, система будет постепенно замедляться и перестанет отвечать на запросы. Примечание (ресурсы могут быть, потоки, сетевые соединения, память и т.д.)
Решения Хайстрикс
- Отменить подключение к внешней службе после тайм-аута; освободить системные ресурсы и заставить систему реагировать Использование потоков и сети ограничено пулами потоков и семафорами.
- Когда ресурсы потребляются в соответствии с их ограничениями, последующие запросы будут завершаться ошибкой, а не ставиться в очередь.
- Когда происходит сбой, при необходимости можно использовать откат;
- Можно использовать пакетные запросы; более эффективное использование локальных и внешних ресурсов службы
процесс работы
Официальная схема работы состоит из 9 следующих шагов, и логика проста.
- Создание объектов HystrixCommand и объектов HystrixObservableCommand
- выполнение команды
- Есть ли результат в кеше
- Автоматический выключатель разомкнут?
- Отклоняет ли семафор/пул потоков
- HystrixObservableCommand.construct() или HystrixCommand.run()
- Рассчитать исправность автоматического выключателя
- резервная обработка
- вернуть успешный ответ
Принцип автоматического выключателя
Принцип объясняется следующим образом:
- Допустим, объем запроса достигает определенного порога (HystrixCommandProperties.circuitBreakerRequestVolumeThreshold())
- Предполагая, что процент ошибок превышает пороговый процент ошибок (HystrixCommandProperties.circuitBreakerErrorThresholdPercentage())
- Удовлетворите одно, разомкните автоматический выключатель.
- При замыкании он открывается, замыкая все запросы, проходящие через это замыкание.
- По истечении периода времени (HystrixCommandProperties.circuitBreakerSleepWindowInMilliseconds()) разрешается прохождение запроса (автоматический выключатель в это время наполовину разомкнут), если запрос выполнен успешно, замкните его накоротко и установите на размыкание, в противном случае установите автоматический выключатель, чтобы замкнуть, начать с 1 и продолжить снова судья.
изоляция зависимостей
Hystrix использует «режим переборки». Пул потоков используется по умолчанию. Создайте независимый пул потоков для каждой зависимой службы, чтобы в случае сбоя зависимой службы затрагивался только вызов зависимой службы, а другие службы не перетаскивались вниз. Как показано ниже:
-
Преимущества изоляции пула потоков
-
Когда служба восстанавливается после сбоя, пул потоков будет очищен, и служба будет немедленно восстановлена, а уровень контейнера будет сильно заполнен.
-
Такие показатели, как количество сбоев, задержек, тайм-аутов и отказов, быстро реагируют на проблемы.В сочетании с Spring Cloud можно добиться динамического обновления.
-
Пулы потоков имеют встроенные реализации параллелизма, которые обеспечивают асинхронный доступ к синхронно зависимым службам.
запрос на вытягивание
Решены проблемы занятости связи и потребления соединения. Объединяйте несколько запросов в течение короткого промежутка времени (по умолчанию 10 мс) и отправляйте запросы пакетами. недостаток:
- Вызывает задержку одного ответа. Если один ответ равен 5 мс, временное окно по умолчанию равно 10 мс, а ответ на этот запрос становится 15 мс.
- Пользователям необходимо реализовать пакетные службы и обработку, что увеличивает некоторые расходы. Схематическая диаграмма слияния запросов выглядит следующим образом: