Maison >Java >JavaQuestions d'entretien >Retour sur l'interview Série de 25 plans de Spring Cloud
Pour des raisons particulières il y a quelque temps, nos entretiens ont été interrompus d'affilée. Il est arrivé qu'un vieil homme se soit rendu à l'entretien la semaine dernière et ait été interrogé sur Spring Cloud, puis. combiné à ses commentaires, nous continuons aujourd'hui la série d'interviews SpringCloud.
Bienvenue à tous pour me suivre :
Ce qui suit est un diagramme de relation entre les composants principaux de Spring Cloud :
de Sur cette photo, nous pouvons en fait obtenir beaucoup d'informations, et j'espère que vous pourrez les savourer avec soin.
Ce qui suit est un résumé des Spring Cloud Netflix
和Spring Cloud Alibaba
composants principaux :
Sans plus tarder, commençons directement la série Spring Cloud.
Spring cloud streaming application starter est une application intégrée Spring basée sur Spring Boot qui permet l'intégration avec des systèmes externes. Spring Cloud Task, un framework de microservices de courte durée permettant de créer rapidement des applications effectuant un traitement de données limité.
L'architecture des microservices est un modèle architectural ou un style architectural. Elle préconise de diviser une seule application en un ensemble de petits services. Chaque service fonctionne selon son propre processus indépendant. Entre les services, coordonnez et coopérez les uns avec les autres pour offrir aux utilisateurs une solution ultime. valeur. Les services utilisent des mécanismes de communication légers pour communiquer entre eux (généralement une API RESTful basée sur HTTP). Chaque service est construit autour d'une activité spécifique et peut être construit indépendamment dans un environnement de production, un environnement de type production, etc. De plus, un mécanisme de gestion de services unifié et centralisé doit être évité. Pour un service spécifique, des langages et des outils appropriés doivent être sélectionnés en fonction du contexte commercial pour le construire. Il peut y avoir une gestion centralisée très légère pour coordonner ces services. , différents langages peuvent être utilisés pour écrire les services et différents magasins de données peuvent être utilisés.
En termes simples :
Un microservice est une application de service indépendante avec une seule responsabilité. Dans l'outil Intellij Idea, il existe des modules indépendants développés à l'aide de Maven. Plus précisément, il s'agit d'un petit module développé à l'aide de Springboot pour gérer une seule logique métier professionnelle.
Les microservices mettent l'accent sur la taille du service, en se concentrant sur un certain point, résolvant spécifiquement un certain problème/implémentant une application de service correspondante, qui peut être considérée comme un module dans l'idée.
Lorsque nous utilisons Spring Boot pour développer des microservices distribués, nous sommes confrontés aux problèmes suivants
Communication synchrone : dobbo utilise les appels de procédure à distance RPC, springcloud utilise les appels json de l'interface REST, etc.
Asynchrone : file d'attente de messages, telle que : RabbitMq
、ActiveM
、Kafka
et autres files d'attente de messages.
Le mécanisme du disjoncteur est un mécanisme de protection des liaisons microservices pour faire face à l'effet d'avalanche. Lorsqu'un certain microservice est indisponible ou que le temps de réponse est trop long, le service sera dégradé, interrompant ainsi l'appel du microservice sur le nœud et renvoyant rapidement des informations de réponse « d'erreur ». Lorsqu'il est détecté que la réponse à l'appel du microservice du nœud est normale, la liaison d'appel est restaurée. Dans le framework Spring Cloud, le mécanisme de disjoncteur est implémenté via Hystrix. Hystrix surveillera l'état des appels entre les microservices. Lorsque les appels échoués atteignent un certain seuil, la valeur par défaut est de 20 appels dans les 5 secondes. sera activé.
Le déclassement du service est généralement pris en compte à partir de la charge globale. Autrement dit, lorsqu'un service est déconnecté, le serveur ne sera plus appelé. À ce moment, le client peut préparer un rappel de secours local et renvoyer une valeur par défaut. De cette façon, même si le niveau est réduit, il reste utilisable, ce qui est mieux que de mourir directement.
Hystrix
相关注解@EnableHystrix
:开启熔断 @HystrixCommand(fallbackMethod=”XXX”)
,声明一个失败回滚处理函数XXX
,当被注解的方法执行超时(默认是1000毫秒),就会执行fallback
Fonction, renvoie un message d'erreur.
Zookeeper garantit CP et Eureka garantit AP.
A : Haute disponibilité
C : Cohérence
P : Tolérance aux pannes de partition
1. Lorsque nous interrogeons le centre d'enregistrement pour une liste de services, nous pouvons tolérer que le centre d'enregistrement renvoie des informations d'il y a quelques minutes, mais nous ne peut pas tolérer directement vers le bas et indisponible. En d'autres termes, la fonction d'enregistrement du service a des exigences relativement élevées en matière de haute disponibilité, mais il y aura une situation dans ZooKeeper lorsque le nœud maître perdra le contact avec d'autres nœuds en raison d'une défaillance du réseau, les nœuds restants rééliront le leader. Le problème est que le temps de sélection du leader est trop long, 30 ~ 120 s, et que le cluster zk n'est pas disponible pendant la période de sélection, ce qui entraînera la paralysie du service d'enregistrement pendant la période de sélection. Dans un environnement de déploiement cloud, il est fort probable que le cluster zk perde le nœud maître en raison de problèmes de réseau. Bien que le service puisse être restauré, l'indisponibilité à long terme de l'enregistrement causée par le long temps de sélection est intolérable.
2. Eureka garantit la disponibilité. Chaque nœud Eureka est égal. La panne de plusieurs nœuds n'affectera pas le travail des nœuds normaux. Si un échec de connexion se produit lorsque le client Eureka enregistre ou découvre un certain Eureka, il basculera automatiquement vers d'autres nœuds. Tant qu'un Eureka est toujours disponible, la disponibilité du service d'enregistrement peut être garantie, mais les informations trouvées peuvent ne pas l'être. le dernier. De plus, Eureka dispose également d'un mécanisme d'autoprotection. Si plus de 85 % des nœuds n'ont pas de battements de cœur normaux dans les 15 minutes, alors Eureka pensera qu'une panne de réseau s'est produite entre le client et le centre d'enregistrement. , les situations suivantes se produiront :
①. Eureka ne supprimera plus de la liste d'inscription les services qui devraient expirer car ils n'ont pas reçu de battements de cœur depuis longtemps.
②. Eureka peut toujours accepter les demandes d'inscription et de requête pour de nouveaux services, mais il ne sera pas synchronisé avec d'autres nœuds (c'est-à-dire garantir que le nœud actuel est toujours disponible)
.③ Lorsque le réseau est stable, les nouvelles informations d'enregistrement de l'instance actuelle seront synchronisées avec les autres nœuds.
Par conséquent, Eureka peut bien faire face à la situation où certains nœuds perdent le contact en raison d'une panne de réseau et ne paralysera pas l'ensemble du microservice comme Zookeeper
SpringBoot se concentre sur le développement rapide et facile de microservices individuels.
SpringCloud est un cadre de coordination et de gouvernance de microservices qui se concentre sur la situation globale. Il intègre et gère les microservices individuels développés par SpringBoot.
Fournit la gestion de la configuration, la découverte de services, les disjoncteurs et le routage pour chaque microservice, micro-agent. bus d'événements, verrouillage global, élection de décision, session distribuée et autres services intégrés
SpringBoot peut être utilisé indépendamment sans SpringCloud pour des projets de développement, mais SpringCloud ne peut pas être séparé de SpringBoot et constitue une relation de dépendance.
SpringBoot se concentre sur un développement rapide et pratique. microservices individuels, SpringCloud se concentre sur le cadre de gouvernance globale des services.
En informatique, l'équilibrage de charge améliore la répartition de la charge de travail sur plusieurs ressources informatiques telles que les ordinateurs, les clusters d'ordinateurs, les liaisons réseau, les unités centrales de traitement ou les lecteurs de disque. L'équilibrage de charge vise à optimiser l'utilisation des ressources, à maximiser le débit, à minimiser le temps de réponse et à éviter de surcharger une ressource unique. L'utilisation de plusieurs composants pour l'équilibrage de charge plutôt que d'un seul composant peut améliorer la fiabilité et la disponibilité grâce à la redondance. L'équilibrage de charge implique généralement des logiciels ou du matériel spécialisés, tels que des commutateurs multicouches ou des processus de serveur Domain Name System.
Hystrix est une bibliothèque de latence et de tolérance aux pannes conçue pour isoler les points d'accès aux systèmes distants, aux services et aux bibliothèques tierces, arrêter les pannes en cascade lorsque les pannes sont inévitables et mettre en œuvre l'élasticité des systèmes distribués complexes.
Habituellement, pour les systèmes développés à l'aide d'une architecture de microservices, de nombreux microservices sont impliqués. Ces microservices collaborent les uns avec les autres.
Pensez aux microservices suivants
Supposons que si le microservice 9 dans l'image ci-dessus échoue, alors en utilisant les méthodes traditionnelles, nous propagerons une exception. Mais cela entraînera quand même le crash de l’ensemble du système.
À mesure que le nombre de microservices augmente, ce problème devient plus complexe. Le nombre de microservices peut atteindre 1 000. C'est là qu'hystrix entre en jeu. Nous utiliserons la fonctionnalité Méthode de repli d'Hystrix dans ce cas. Nous avons deux services employé-consommateur qui utilisent les services exposés par employé-consommateur.
Le schéma simplifié est présenté ci-dessous
Supposons maintenant que pour une raison quelconque, le service exposé par l'employé-producteur lève une exception. Nous avons défini une méthode de repli utilisant Hystrix dans ce cas. Cette méthode de secours doit avoir le même type de retour que le service public. Si une exception se produit dans le service exposé, la méthode de secours renverra une valeur.
Pour certaines raisons, la fonction publique salariés-consommateurs fait une exception. En utilisant Hystrix dans ce cas, nous définissons une méthode de repli. Si une exception se produit dans le service exposé, la méthode de secours renvoie une valeur par défaut.
Si l'exception dans la méthode firstPage() continue de se produire, le circuit Hystrix se brisera et l'employé consommateur ignorera complètement la méthode firstPage et appellera directement la méthode de secours. L'objectif du disjoncteur est de laisser du temps à la méthode de première page ou à d'autres méthodes que la méthode de première page peut appeler et provoquer une récupération d'exception. Ce qui peut se produire, c'est que sous une charge plus légère, le problème à l'origine de l'exception a de meilleures chances de récupération.
Tout d'abord, il existe un module qui gère la communication de connexion réseau, qui est responsable de l'établissement, de la gestion et du message de la connexion transmission. Deuxièmement, un module de codage et de décodage est nécessaire, car les communications réseau sont toutes des bytecodes transmis et les objets que nous utilisons doivent être sérialisés et désérialisés. Le reste est constitué des parties client et serveur. Le serveur expose l'interface de service à ouvrir. Le client appelle une implémentation proxy de l'interface de service. Cette implémentation proxy est chargée de collecter les données, de les coder et de les transmettre au serveur, puis d'attendre. les résultats à restituer.
Lorsque le nœud du serveur Eureka perd les connexions à trop d'instances en peu de temps (comme une panne de réseau ou des démarrages et arrêts fréquents de clients) le nœud entrera en mode d'autoprotection, protégera les informations d'enregistrement, ne supprimera plus les données d'enregistrement et quittera automatiquement le mode d'autoprotection lorsque la récupération après panne se produit.
ribbon est un client d'équilibrage de charge qui peut bien contrôler certains comportements de http et tcp. feign intègre le ruban
par défaut. feign默认集成了ribbon
。
Feign 是受到 Retrofit,JAXRS-2.0 和 WebSocket 启发的 java 客户端联编程序。
Feign 的第一个目标是将约束分母的复杂性统一到 http apis,而不考虑其稳定性。
特点:
使用方式
@EnableFeignClients
@FeignClient(name=“xxx”)
@EnableFeignClients
🎜🎜@FeignClient(name="xxx")
Spécifiez quel service appeler 🎜🎜🎜🎜🎜🎜15. Quelle est la différence entre Ribbon et Feindre ? 🎜🎜🎜🎜1. Ribbon appelle d'autres services, mais de différentes manières. 2. Les annotations de la classe de démarrage sont différentes. Ribbon est @RibbonClient et feign est @EnableFeignClients.
3. L'emplacement spécifié du service est différent. Ribbon est déclaré sur l'annotation @RibbonClient, tandis que Feign est déclaré à l'aide de @FeignClient dans l'interface qui définit la méthode abstraite. 4. Les méthodes d'appel sont différentes. Ribbon doit construire lui-même la requête http et simuler la requête http. 🎜Spring Boot est une solution basée sur Maven lancée par Spring pour résoudre le problème des fichiers de configuration de framework traditionnels redondants et des composants d'assemblage compliqués, visant pour créer rapidement un microservice unique Spring Cloud se concentre sur la résolution de la coordination et de la configuration entre divers microservices, de la communication entre les services, du disjoncteur, de l'équilibrage de charge, etc. Les dimensions techniques ne sont pas les mêmes et Spring Cloud dépend de Spring Boot, mais Spring Boot ne dépend pas de Spring Cloud et peut même effectuer un excellent développement intégré avec Dubbo
Summary
est ce que nous appelons souvent l'enregistrement et la découverte de services. Vous pouvez accéder à d'autres services directement via des appels de procédure à distance.
Avantages : Simple et courant, car il n'y a pas de proxy middleware, le système est plus simple
Inconvénients : Il ne prend en charge que le mode demande/réponse et ne prend pas en charge les autres, tels que la notification, la demande/réponse asynchrone, publication/abonnement, les réponses de publication/asynchrone réduisent la disponibilité car le client et le serveur doivent être disponibles pendant la demande.
Utilisez des messages asynchrones pour la communication interservices. Les services communiquent en échangeant des messages via des canaux de messages.
Avantages : Découplez le client et le serveur, un couplage plus lâche et améliorez la convivialité, car le middleware de message met en cache le message jusqu'à ce que le consommateur puisse le consommer et prend en charge de nombreux mécanismes de communication tels que les notifications, les demandes/réponses asynchrones, les versions/abonnement. , publication/réponse asynchrone.
Inconvénients : Le middleware de messages présente une complexité supplémentaire.
Lorsque le service est publié, spécifiez le nom du service correspondant et enregistrez le service auprès du centre d'enregistrement (Eureka, Zookeeper)
. Eureka 、Zookeeper)
。
注册中心加@EnableEurekaServer
,服务用@EnableDiscoveryClient
@EnableEurekaServer
, service Utilisez @EnableDiscoveryClient
, puis utilisez le ruban ou feignez Effectuez une découverte directe des appels de service. Cette question est plus pratique. Cela dépend si vous avez mémorisé les questions de l'entretien. Les personnes qui ne l'ont pas pratiquée ne le sauront pas. Lorsque le nœud du serveur Eureka perd les connexions à trop d'instances dans un court laps de temps (comme une panne de réseau ou des démarrages et arrêts fréquents de clients), le nœud entrera en mode d'autoprotection pour protéger les informations d'enregistrement et ne sera plus supprimé. les données d'enregistrement et la récupération après les échecs quittent automatiquement le mode d'autoprotection.
spring cloud bus connecte des nœuds distribués avec un courtier de messages léger. Il peut être utilisé pour diffuser des modifications de fichiers de configuration ou pour une communication directe de service. surveillance. Si le fichier de configuration est modifié et qu'une requête est envoyée, tous les clients relisent le fichier de configuration.
Lorsqu'un service appelle un autre service et qu'il y a un problème dû à des raisons de réseau ou à ses propres raisons, l'appelant attendra la réponse de l'appelé. plus de services La demande de ces ressources entraîne davantage d'attente de requêtes, provoquant un effet de chaîne (effet d'avalanche). S'il ne peut pas être appelé un certain nombre de fois au cours d'une période donnée et qu'il n'y a aucun signe de récupération après plusieurs surveillances, alors le disjoncteur est complètement ouvert et le service ne sera pas demandé la prochaine fois.
Demi-ouverture : il y a des signes de rétablissement dans un court laps de temps. Le disjoncteur enverra des demandes au service. Lorsqu'il est appelé normalement, le disjoncteur est fermé. Fermé : lorsque le service est toujours dans un état normal et peut être appelé normalement.
Dans un système distribué, en raison du grand nombre de services, afin de faciliter la gestion unifiée et la mise à jour en temps réel des fichiers de configuration des services, un centre de configuration distribué composant est nécessaire. Dans Spring Cloud, il existe un composant de centre de configuration distribué Spring Cloud Config
, qui prend en charge le placement du service de configuration dans la mémoire du service de configuration (c'est-à-dire local), et prend également en charge le placement dans le référentiel Git distant. Spring Cloud Config
,它支持配置服务放在配置服务的内存中(即本地),也支持放在远程Git仓库中。
在Spring Cloud Config
Spring Cloud Config
composant, Là Il y a deux rôles, l'un est le serveur de configuration et l'autre est le client de configuration. Comment utiliser : 🎜Référence ; http://1pgqu.cn/M0NZo
RésuméCe qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!