1: Qu'est-ce que Hystrix
Dans un environnement distribué, certaines des nombreuses dépendances de service échoueront inévitablement. Hystrix est une bibliothèque qui vous aide à contrôler l'interaction entre ces services distribués en ajoutant la tolérance à la latence et la logique de tolérance aux défauts. Hystrix améliore la résilience globale du système en isolant les points d'accès entre les services, en arrêtant les défaillances en cascade par conséquent et en fournissant des options de repli.
Hystrix est conçu pour effectuer les éléments suivants
1: Fournir une protection et des échecs de protection et des échecs pour les dépendances accessibles via des bibliothèques clients tierces (généralement sur le réseau).
2: Isoler les échecs en cascade dans des systèmes distribués complexes.
3: détecter rapidement le défaut et récupérer dès que possible.
4: Recherche et rétrogradation le plus gracieusement possible.
5: Activer la surveillance, les alertes et les contrôles opérationnels presque en temps réel.
2: Pourquoi avez-vous besoin d'hystrix?
Dans un grand système distribué, un client ou un service dépend des services externes. Si un service est en baisse, nous définissons le délai d'expiration du système d'appel de service, ce qui affectera inévitablement le temps correspondant. Dans le cas d'une concurrence élevée, le pool de fil de la plupart des serveurs sera bloqué (bloc), affectant la stabilité de l'ensemble du service en ligne.
(Photo photos officielles)
Quand tout est sain, la demande peut ressembler à ceci
Lorsque l'un des nombreux systèmes de service backend baisse, l'intégralité de l'utilisateur demande:
Si plusieurs clients appellent le même service d'exception, la situation se produit:
3: Quels problèmes résolvent Hystrix?
Les applications dans les architectures distribuées ont des dizaines de dépendances, et chaque dépendance aura inévitablement une exception à un moment donné. Si l'application n'est pas isolée de ces défaillances externes, le blocage du pool de threads peut se produire, provoquant une avalanche du système.
Par exemple, pour les applications qui reposent sur 30 services, chaque service a une disponibilité de 99,99%, vous pouvez:
99,99% de la puissance de 30 = 99,7% de disponibilité
0,3% de 1 milliard de demandes = 3 000 000 défaillances
2+ heures d'arrêt / mois, même avec toutes les dépendances de disponibilité.
Lorsque vous utilisez Hystrix pour la rupture de circuit, chaque dépendance est isolée les unes des autres, limitant le blocage lorsque le retard se produit.
Quatre: Hystrix combinée à la feigne
Créez un projet eureka_feign_hystrix_client
contenu de fichier pom.xml
<Dependances> <Dependency> <GroupId> org.springFramework.cloud </rom grouped> <ArtifActid> Spring-Cloud-Starter-Feign </ Artifactid> </Dependency> <Dependency> <ProupID> org.springframework.cloud </proupatid> </ dépendance> Spring-Cloud-starter-eureka <GroupId> org.springframework.boot </proupId> <Ertifactid> printemps-boot-starter-web </lefactive> </dendency> <dependency> <proupId> org.springframework.boot </prouprid> <pritency> Spring-Boot-starter-actuator </tatifactid> </sendency> <dedency> <GroupId> org.springframework.boot </prôdId> <ArtifactId> Spring-Boot-starter-test </ artifactid> <ccope> test </cope> </dependency> </dpendance> <dedentencymanagement> </peedences> <dependency> <proupId> org.springFramework.cloud </proupId> <ArtefactId> Spring-Cloud-Dependces </ Artifactid> <Sease> Brixton.sr5 </DERNIFRIGNE> <TYPE> POM </ TYPE> <COPE> IMPORT </cope> </Dependance> </Dependance> </DependencyManagement>
Créer un fichier de démarrage
Feignhystrixapplication
@ SpringbootApplication @veablediscoveryClient @ activerfeignClientSpublic class feignhystrixApplication {public static void main (String [] args) {springApplication.run (feignHystrixApplication.class, args); }}Classe utilisateur
@FeignClient (value = "biz-service-0", Fallback = userLIentHystrix.class) Interface publique UserCIENT {@RequestMapping (méthode = requestMethod.get, value = "/ getuser") public utilisateur getUserInfo (); @RequestMapping (méthode = requestMethod.get, value = "/ getuser") public string getUserInfostr (); @RequestMapping (méthode = requestMethod.get, value = "/ info") public chaîne info ();}Créer une classe Flash Breaker UserClientHystrix
@ServicePublic class UserClientHystrix implémente userLIENT {@Override public utilisateur utilisateur getUserInfo () {Throw new NullPointerException ("l'utilisateur getUserIrinfo () n'est pas disponible .."); } @Override public String getUserInfoStr () {return "userLIentHystrix getUserIrfostr () est le service de secours n'est pas disponible .."; } @Override public String info () {return "userLIentHystrix info () est le service de secours n'est pas disponible .."; }}Lorsqu'une exception se produit dans le réseau, elle peut passer directement à la classe d'implémentation ici
Créer une classe d'action
UserController
@Autowired Userclient Userclient; @RequestMapping (value = "/ getUserInfo", méthode = requestMethod.get) utilisateur public getUserInfo () {return userLIent.getUserERinfo (); } @RequestMapping (value = "/ getUserInfostr", méthode = requestMethod.get) public String getUserInfostr () {return userLIent.getUserIrfostr (); } @RequestMapping (value = "/ info", méthode = requestMethod.get) public String info () {return userLIent.info (); }Démarrer le projet: eureka_register_service (centre de registre)
Ensuite, exécutez le feignhystrixapplication que nous avons écrit
À l'heure
Apparaître
UserLIentHystrix getUserIrfostr () est le rendement du service n'est pas disponible. .
Ceci est notre résultat de retour sur circuit personnalisé
Si vous n'avez pas besoin de briser la page, cela apparaîtra
Erreur WhiteLabel PageThis l'application n'a pas de mappage explicite pour / erreur, vous voyez donc cela comme une secours.
Adresse du code: https://github.com/zhp8341/springclouddemo
J'ai également lu certains principes liés à l'hystrix. Comme je n'ai pas fini de les lire tous, je ne les ai pas encore écrits. Cet article est basé sur l'utilisation et l'apprentissage de Feign.
Si vous êtes intéressé, vous pouvez consulter les détails officiels de Hystrix, mais cela semble un peu difficile.
Ce qui précède est tout le contenu de cet article. J'espère que cela sera utile à l'apprentissage de tous et j'espère que tout le monde soutiendra davantage Wulin.com.