1: что такое Hystrix
В распределенной среде некоторые из многих зависимостей обслуживания неизбежно потерпят неудачу. Hystrix - это библиотека, которая помогает вам контролировать взаимодействие между этими распределенными службами, добавив устойчивость к задержке и логику допуска от разлома. Hystrix повышает общую устойчивость системы, изолируя точки доступа между услугами, останавливая каскадные сбои между ними и предоставляя варианты отступления.
Hystrix предназначен для выполнения следующих
1: Предоставьте защиту и задержку управления и сбои для зависимостей, доступных через сторонние клиентские библиотеки (обычно по сети).
2: изолят каскадные сбои в сложных распределенных системах.
3: быстро обнаружите разлову и восстановите как можно скорее.
4: Перемотка и понижение понижения как можно более изящно.
5: Включить мониторинг, оповещения и эксплуатационные средства вблизи в реальном времени.
2: Зачем вам Hystrix?
В крупной распределенной системе клиент или услуга зависит от внешних служб. Если сервис не работает, мы установим время ожидания системы служб, которое неизбежно повлияет на соответствующее время. В случае высокой параллелистики пул ниток большинства серверов будет заблокирован (блок), что влияет на стабильность всего онлайн -сервиса.
(Фото официальные картинки)
Когда все будет здорово, запрос может выглядеть так
Когда одна из многих бэкэнд -систем обслуживания уходит, весь пользователь запрашивает:
Если несколько клиентов называют одну и ту же службу исключений, ситуация возникает:
3: Какие проблемы решают Hystrix?
Приложения в распределенных архитектурах имеют десятки зависимостей, и в какой -то момент каждая зависимость неизбежно будет иметь исключение. Если приложение не изолировано от этих внешних сбоев, может произойти блокировка пула резьбов, что приведет к лавине системы.
Например, для приложений, которые полагаются на 30 услуг, каждая услуга составляет 99,99%, вы можете:
99,99% мощности 30 = 99,7% времени безотказной работы
0,3% от 1 миллиарда запросов = 3 000 000 отказов
2+ часа времени простоя/месяц, даже со всеми временными зависимостью.
При использовании Hystrix для разрыва схемы каждая зависимость выделяется друг от друга, ограничивая блокировку при задержке.
Четыре: Hystrix в сочетании с Feign
Создать проект eureka_feign_hystrix_client
POM.xml файловое содержимое
<dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-feign</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-eureka</artifactId> </dependency> <dependency> <groupId> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-starter-web </artifactid> </dependency> <dependency> <groupid> org.springframework.boot </GroupId> <Artifactid> Spring-boot-actator </artifactid> </reperticence> </зависимость> </зависимость> </зависимость> </reperticency> </artifactidence> </artifactid> </artifactid> </artifactid> </artifactid> </artifactid> </artifactid> <groupId> org.springframework.boot </GroupId> <ArtifactId> Spring-boot-starter-test </artifactid> <crapope> test </scope> </depertive> </redice> <DevendencyManagement> <dependencies> <dependency> <groupid> org.spramework.cloud </GroupD> <artifactidence> <groupd> org.spramework.cloud <sersion> brixton.sr5 </version> <type> pom </type> <cerpope> import </scope> </depervice> </deperiancess> </dependencymanagement>
Создать файл стартапа
FeignHystrixApplication
@SpringbootApplication@enabledIscoveryClient@enableFienClientsPublic Class FeignHystrixApplication {public static void main (string [] args) {SpringApplication.run (feignHystrixApplication.class, args); }}ESerclient класс
@Feignclient (value = "biz-service-0", bandback = userclienthystrix.class) публичный интерфейс userclient {@requestmapping (method = requestmethod.get, value = "/getUser") public retuserinfo (); @Requestmapping (method = requestMethod.get, value = "/getUser") public String getUserInfoStr (); @Requestmapping (method = requestMethod.get, value = "/info") public String info ();}Создайте класс Flash Breaker userclienthystrix
@Servicepublic class userclienthystrix реализует userclient {@override public user user getUserInfo () {бросить новое NullPointerException («Пользователь getUserInfo () служба недоступна ..»); } @Override public String getUserInfoStr () {return "userclientHystrix getUserInfoStr () - это служба запасного. } @Override public String info () {return "userclientHystrix info () - это служба запасного обследования недоступна .."; }}Когда в сети возникает исключение, оно может прыгнуть непосредственно на класс реализации здесь
Создать класс действий
USERCONTROLLER
@Autowired userclient userclient; @Requestmapping (value = "/getUserinfo", method = requestMethod.get) public user getUserinfo () {return userclient.getUserInfo (); } @RequestMapping (value = "/getUserInfoStr", method = requestMethod.get) public String getUserInfoStr () {return userclient.getUserInfoStr (); } @RequestMapping (value = "/info", method = requestMethod.get) public String info () {return userclient.info (); }Начать проект: eureka_register_service (Register)
Затем запустите FeignHystrixApplication, которое мы написали
В настоящее время мы, очевидно, обнаружили, что служба Biz-Service-0 не работает, поэтому мы открываем http://127.0.0.1:8005/getuserinfostr
Появляться
UserclientHystrix getUserinfoStr () - это запасное, сервис недоступен. Полем
Это наш пользовательский результат возврата схемы
Если вам не нужно нарушать страницу, это появится
Приложение WhiteLabel Error Pagethis не имеет явного отображения для /ошибки, поэтому вы видите это как отступление. Wed 22 марта 14:32:21 CST 2017. Была неожиданная ошибка (Type = Ошибка внутреннего сервера, статус = 500) .getUserInfo не удалось, а отступление не удалось.
Кодовый адрес: https://github.com/zhp8341/springclouddemo
Я также прочитал некоторые принципы, связанные с Hystrix. Так как я не закончил читать их все, я еще не написал их. Эта статья основана на использовании и обучении Фейна.
Если вам интересно, вы можете проверить официальные детали Hystrix, но это выглядит немного сложно.
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.