Partage de technologie

Nuage de printemps

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

1. Que sont les microservices ?

1. Notions de base

Les microservices sont unstyle architectural(À la différence de l'architecture monolithique, de l'architecture verticale, de l'architecture distribuée et de l'architecture SOA), les applications sont divisées en services plus petits et axés sur les processus.

2. Caractéristiques des microservices

  1. Léger : divisez verticalement les systèmes ou services complexes et chaque microservice se concentre sur la résolution de problèmes particuliers.
  2. Faible couplage : chaque service divisé est indépendant les uns des autres en termes de code, de ressources et d'environnement, et peut être développé, testé, déployé et maintenu indépendamment, ce qui est bénéfique pour la stabilité du système (l'impact est réduit en cas de problèmes). se produire) et l’expansion (augmentation des ressources) (l’évaluation des ressources est plus pratique et moins risquée).
  3. Multiplateforme : différents microservices peuvent utiliser différents langages de développement et s'exécuter dans différents environnements.

2. Qu'est-ce que SpringCloud ?

1. Notions de base :

Spring Cloud est unCadre de microservices , qui fournit une gamme de solutions de systèmes distribués. Fournit des fonctionnalités telles que le développement et le déploiement de microservices, l'enregistrement et la découverte de services, la gouvernance des services, ainsi que l'exploitation et la maintenance des services via la composantisation.

2. Composants couramment utilisés :

1)Nuage de printemps Netflix :

Eurêka : centre d'inscription

Ruban : équilibrage de charge

Feindre : appel à distance

Hystrix : disjoncteur de service

Zuul/Passerelle:Passerelle

2)Spring Cloud Config : outil de gestion de configuration centralisé, stockage externe de la configuration des applications, peut être utilisé pour les applications Spring ou non Spring.

3)Spring Cloud Bus : bus d'événements et de messages, utilisé pour propager les changements d'état ou les événements de changement de configuration dans le cluster.

4)Spring Cloud Consul : outil de découverte et de configuration de services, parfaitement intégré aux conteneurs Docker.

5)Spring Cloud Security : une boîte à outils de sécurité qui prend en charge la sécurité et l'authentification des applications.

6)Spring Cloud Sleuth : traçage de chaîne d'appels distribué, compatible avec le traçage Zipkin, HTrace et ELK.

7)Spring Cloud Cluster : élection du leader, mise en œuvre via l'abstraction de Zookeeper, Redis et Consul.

8)Spring Cloud Data Flow : orchestration de microservices, facile à utiliser via une interface glisser-déposer ou une API REST.

9)Spring Cloud Stream : un cadre de microservices léger basé sur les événements pour créer rapidement des applications qui se connectent à des systèmes externes.

10)Spring Cloud Task : un cadre de microservices à court terme pour créer rapidement des applications qui effectuent des tâches de traitement de données par lots.

3. Étapes pour utiliser les composants SpringCloud

Tutoriel Springcloud--3. Mécanisme de disjoncteur microservice, explication détaillée de l'utilisation du disjoncteur hystrix_Comment configurer le disjoncteur Java-CSDN Blog

Tutoriel springcloud--4. Explication détaillée de l'utilisation du tutoriel d'utilisation de la passerelle zuul_zuul-Blog CSDN

1. Hystrix (fusible, déclassement, limitation de courant)

1) A quoi ça sert ?

existerdans les systèmes distribués , si un nœud de service tombe en panne ou si une anomalie du réseau se produit, l'appelant peut être bloqué et attendre. Si le délai d'attente est défini sur une longue période, les ressources de l'appelant peuvent être épuisées.Cela conduit à son tour à un épuisement des ressources dans le système en amont de l'appelant, ce qui aboutit finalement àsystème d'avalanche . Les disjoncteurs peuvent prévenir efficacement les avalanches de service.

Si vous constatez une augmentation soudaine du trafic, l'approche générale consiste àFonctions commerciales non essentiellesDes mesures de dégradation des services sont adoptées pour protéger le service normal des fonctions commerciales essentielles, tandis que pour les services fonctionnels essentiels, les mesures de limitation actuelles doivent être adoptées.

2) Cela se produit-il côté client ou côté serveur ?

Disjoncteur de service :en général Cela se produit côté serveur (le but est de permettre à l'appelant d'échouer rapidement). Lorsqu'un service expire ou devient anormal, cela provoque un fusible, similaire à un fusible dans la vraie vie. (Parfois, il peut également être configuré sur le client pour échouer rapidement lorsqu'une exception est trouvée lors de l'appel d'un certain service) ;
Dégradation du service : se produit généralement côté client Compte tenu de la charge globale des requêtes du site Web, lorsqu'un service est déconnecté ou arrêté, le service ne sera plus appelé (parfois il peut également être configuré côté serveur, lorsque le système l'a fait). trafic soudain, les fonctions principales seront déclassées pour protéger les fonctions principales) ;

Limitation de courant : se produit généralement côté serveur ;

3) Comment utiliser

  • Fusion :

@EnableCircuitBreaker : activé sur l'applicationfusible

@HistrixCommand(fallbackMethod="xxxFallback",commandProperties = {
}) : L'annotation de fusion est ajoutée à l'annotation de rétrogradation. Remplissez les conditions de fusion dans commandProperties = {}.Gestionnaire de propriétés HystrixVérifier.

  1. @HystrixCommand(fallbackMethod = "xxxFallback",commandProperties = {
  2. //20秒内出现3个请求,失败率为30%,就会触发熔断,30秒内不再发送调用
  3. // 条件一: 请求数量达到3个
  4. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_REQUEST_VOLUME_THRESHOLD, value = "3"),
  5. // 条件二: 每20秒一个判断单位
  6. @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value = "20000"),
  7. // 条件三: 失败率30%
  8. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_ERROR_THRESHOLD_PERCENTAGE, value = "30"),
  9. // 结果: 熔断后, 30秒内不再请求远程服务
  10. @HystrixProperty(name = HystrixPropertiesManager.CIRCUIT_BREAKER_SLEEP_WINDOW_IN_MILLISECONDS, value = "30000")
  11. })
  • Rétrograder:

Créez une nouvelle classe xxxFallbackFactory pour implémenter FallbackFactory et remplacez la méthode create. La méthode de rétrogradation est définie dans create.

@FeignCliend(fallbackFactory=xxxFallbackFactory.class) : Histrix est intégré à Feign

Ou précisez la méthode de repli directement sur la méthode : @HistrixCommand(fallbackMethod="xxxFallback")

  • Limitant :

        1、Stratégie de limitation actuelle :

1), limite de courant du sémaphore

Le sémaphore est utilisé pour contrôler le nombre de threads simultanés. Précisez le nombre de licences virtuelles internes via le constructeur.

Si la technologie d'isolation des sémaphores est utilisée, chaque fois qu'une requête est reçue, le propre thread du service appelle directement le service dépendant. Le sémaphore équivaut à un point de contrôle. Après que chaque thread passe le point de contrôle, le nombre de sémaphores est réduit de 1. est 0, ce n'est plus le cas. Le thread est autorisé à passer, mais la logique de repli est directement exécutée et renvoyée. Pour le dire franchement, ce n'est qu'une limite actuelle.

Un sémaphore peut être compris comme uncomptoir, le compteur compte le nombre de requêtes en cours de traitement. Lorsque la valeur du compteur atteint la valeur définie, les requêtes suivantes ne seront pas acceptées (ou rétrogradées) et vous devez attendre que la valeur du compteur soit inférieure à la valeur définie avant de pouvoir effectuer des requêtes ultérieures. en traitement.

  1. @HystrixCommand(
  2. commandProperties= {
  3. @HystrixProperty(name="execution.isolation.strategy", value="SEMAPHORE"),
  4. @HystrixProperty(name="execution.isolation.semaphore.maxConcurrentRequests", value="20")
  5. },
  6. fallbackMethod = "errMethod"
  7. )

2), limite actuelle du pool de threads

  1. @HystrixCommand(
  2. commandProperties = {
  3. @HystrixProperty(name = "execution.isolation.strategy", value = "THREAD")
  4. },
  5. threadPoolKey = "createOrderThreadPool",
  6. threadPoolProperties = {
  7. @HystrixProperty(name = "coreSize", value = "20"),
  8. @HystrixProperty(name = "maxQueueSize", value = "100"),
  9. @HystrixProperty(name = "maximumSize", value = "30"),
  10. @HystrixProperty(name = "queueSizeRejectionThreshold", value = "120")
  11. },
  12. fallbackMethod = "errMethod"
  13. )

Notez ici : dansjavaDans le pool de threads, si le nombre de threads dépassecoreSize, les demandes de création de threads entreront en premier dans la file d'attente. Si la file d'attente est pleine, les threads continueront à être créés jusqu'à ce que le nombre de threads atteigne.maximumSize , puis adoptez la stratégie de rejet.Mais il existe un paramètre supplémentaire dans le pool de threads configuré par hystrixqueueSizeRejectionThreshold,siqueueSizeRejectionThreshold < maxQueueSize, le nombre de files d'attente atteintqueueSizeRejectionThresholdadoptera la stratégie de rejet, doncmaximumSize échoué.siqueueSizeRejectionThreshold > maxQueueSize, le nombre de files d'attente atteintmaxQueueSizeheure,maximumSizeest valide, le système continuera à créer des fils de discussion jusqu'à ce que le nombre atteignemaximumSize

      2. La différence entre la limitation du courant du sémaphore et la limitation du courant du pool de threads :

1) Niveau de performance : le sémaphore utilise le thread d'origine et a une faible consommation de performances ;

2) Niveau de stabilité du système : les pools de threads sont isolés et les problèmes en eux-mêmes n'affecteront pas les autres pools de threads ;

3) Synchrone et asynchrone : le sémaphore étant le thread d'origine utilisé, il est synchrone et bloquant.

        3. Scénarios d’utilisation actuels de la stratégie de limitation :

Lorsque le nombre de requêtes est très intensif et que la surcharge d'isolation des threads est relativement élevée, il est recommandé d'utiliser des sémaphores pour réduire la charge. Cette situation est généralement utilisée pour traiter les requêtes hors réseau (sans appeler de services externes). Il est recommandé d'utiliser la méthode du pool de threads dans d'autres scénarios.

4) Quelle est la différence entre les trois ?

La limitation de courant n'est qu'une limitation de courant. Tant que la limite de trafic n'est pas dépassée, le service est toujours disponible (différent du disjoncteur) et n'a pas besoin d'être dégradé (l'exception de dépassement de limite de trafic peut également être levée pour que l'appelant puisse la gérer. seul). Parlons donc simplement de la différence entre un disjoncteur et un déclassement :

  • différentes notions

Le disjoncteur signifie que le service dans son ensemble n'est pas disponible (en se concentrant sur l'autoprotection), le déclassement signifie choisir la meilleure option suivante (en se concentrant sur la protection des résultats) et la limitation de courant fait référence à la quantité de trafic qui ne peut pas être dépassée.

  • Différents mécanismes de déclenchement

Par défaut, si hystrix détecte que le taux d'échec des requêtes dépasse 50 % dans les 10 secondes, il déclenchera le mécanisme du disjoncteur. Après cela, la demande au microservice est réessayée toutes les 5 secondes. Si le microservice ne peut pas répondre, le mécanisme du disjoncteur continue. Si le microservice est accessible, le mécanisme du disjoncteur est désactivé et les demandes normales sont rétablies.

Par défaut, hystrix déclenchera le mécanisme de downgrade dans les 4 conditions suivantes :

  1. La méthode renvoie HystrixBadRequestException
  2. Expiration du délai d'appel de méthode
  3. Allumez le disjoncteur pour intercepter l'appel
  4. Le pool de threads, la file d'attente ou le sémaphore est plein
  • Différentes relations de propriété

Le mécanisme de déclassement peut être appelé lors du déclenchement du disjoncteur, mais le mécanisme du disjoncteur n'est généralement pas appelé lors du déclassement.Parce que le disjoncteur commence dans une perspective globale et désactive les services afin d'assurer la stabilité du système, tandis que le déclassement est la deuxième meilleure chose et fournit une solution garantie, leurs relations de propriété sont donc différentes (disjoncteur &gt; déclassement).

2. Feign et RestModèle

Résumé du contenu du lien :

  1. Ajouter une dépendance de démarrage ;
  2. Ajouter une annotation : @EnableFeignClients ;
  3. Créer une interface Feign :

@FeignClient(nom="eureka-HA",fallbackFactory=DeptClientServiceFallbackFactory.class)

tutoriel springcloud-- 1. Créez rapidement une démo d'entrée de gamme, lisez simplement cet article_Communauté open source Ye Juyan-GitCodeSans plus tarder, suivez-moi et démarrez votre première expérience Spring Cloud. Tout d'abord, passez en revue les composants de base des microservices : [Photo ici] Producteur : Fournir le service Consommateur : Consommer le service Centre d'enregistrement/de découverte du service : Enregistrement, découverte, surveillance du service Alors, d'abord. comprendre la base architecturale des microservices springcloud : producteur (client), consommateur (client), centre d'enregistrement/découverte des services (serveur) Communauté open source Ye Juyan GitCodeicône-par-défaut.png?t=N7T8https://gitcode.csdn.net/65e840841a836825ed78b9d0.html?dp_token=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6MzI1MTQ3NiwiZXhwIjoxNzIxMTM0MjcwLCJpYXQiOjE3MjA1Mjk0NzAsInVzZXJuYW1lIjoicXFfMTk5NTIwMjkifQ.7co5oRDfDrxtdqIsV-9AjJacdbURh-cikj5Rtxt7Z1c

3. Utilisation de Zuul

faire référence à:

Implémentation pratique de l'architecture du projet SpringBoot "Gateway zuul construction"-CSDN Blog

4. Utilisation du centre d'inscription Eureka

faire référence à:

Architecture du projet SpringBoot combat réel "construction du projet parent et construction du centre d'enregistrement"_java construction springboot projet parent startup-CSDN blog

4. Comment fonctionne SpringCloud

1. Principe de fonctionnement d'Eureka :

  1. Enregistrement du service : lorsque le fournisseur de services démarre, il enverra une demande d'enregistrement au serveur Eureka, comprenant l'adresse IP du service, le numéro de port, le nom du service et d'autres informations. Après avoir reçu la demande d'enregistrement, le serveur Eureka enregistrera les informations de service dans la mémoire et fournira une fonction de requête d'informations d'enregistrement de service externe.

  2. Découverte de services : lorsqu'un consommateur de service a besoin d'appeler d'autres services, il enverra une demande de découverte de service au serveur Eureka pour obtenir une liste d'instances des services requis. Après avoir reçu la demande, le serveur Eureka renverra une liste d'instances du service correspondant, comprenant l'adresse IP, le numéro de port et d'autres informations du service. Le consommateur de service sélectionne l'une des instances de service à appeler (équilibrage de charge) en fonction de la liste d'instances renvoyée.

  3. Bilan de santé Heartbeat : le fournisseur de services enverra régulièrement des paquets de battements de cœur au serveur Eureka pour prouver que son service fonctionne normalement. Si le serveur Eureka ne reçoit pas de paquet de pulsation d'une instance de service dans un délai donné, il considérera l'instance de service comme étant en panne et la supprimera de la liste de services.

5. Code source sous-jacent de SpringCloud

1. Code source de la passerelle Zuul

Implémentation pratique de l'architecture du projet SpringBoot "Gateway zuul construction"-CSDN Blog L'article a été consulté et lu 227 fois. Chapitre 3 Construction de la passerelle Zuul Préface : 1. Fonctions principales Zuul fournit principalement un routage dynamique (implémentation du ruban intégré) et un filtrage (peut être utilisé comme filtre d'authentification unifié, filtre de publication en niveaux de gris, filtre IP de liste noire et blanche, filtre de limitation de courant de service) (Peut être implémenté avec Sentinel)) fonction ; 2. La différence avec Spring Cloud GateWay est qu'il s'agit d'une solution de passerelle fournie par deux organisations open source différentes. Spring Cloud GateWay utilise une API non bloquante, un filtre de limitation de courant intégré, prend en charge les connexions longues (telles que les websockets) et est meilleur que Zuul dans les scénarios de concurrence élevée et de réponse lente du service back-end...https://blog.csdn.net/qq_19952029/article/details/124285479

2. Code source Eureka du centre d'enregistrement

3. Code source du disjoncteur Histrix

4. Centre de configuration Code source de configuration

5. Code source du ruban d'équilibrage de charge

6. Le microservice appelle le code source de Feign

6. Comment SpringCloud implémente les transactions distribuées

Pratique du mode Seata TCC (Partie 2) - Communauté de développeurs Alibaba CloudCombat réel en mode Seata TCC (Partie 2)icône-par-défaut.png?t=N7T8https://developer.aliyun.com/article/1053737?spm=5176.26934562.main.1.799c6a03T45SJ9Le billet de blog ci-dessus ne résout pas le problème de suspension, qui peut être jugé par différents indicateurs d'état.

https://www.cnblogs.com/lilpig/p/16613226.htmlicône-par-défaut.png?t=N7T8https://www.cnblogs.com/lilpig/p/16613226.html

1. Rôle du mode TCC

TM : Gestionnaire de transactions, généré avec l'annotation @GlobalTransaction.

TC : Coordinateur

RM : Participant

L'ensemble du processus est :

TM proxy vos transactions globales et s'enregistre auprès de TC avant de commencer l'exécution
TM commence à exécuter chaque transaction de branche dans la transaction globale, et RM enregistre et rapporte les transactions de branche et l'état d'exécution à TC.
Une fois l'exécution de la transaction de branchement terminée, TM lance une demande à TC pour valider ou annuler la transaction globale.

2. La signification de la réservation, de la soumission et de la restauration des ressources TCC.

La réservation signifie verrouiller et mettre à jour la ressource de base de données dans un état intermédiaire, puis la faire passer à l'état effectif lorsque la validation de deuxième étape est effectuée après confirmation.Donc la phase de réservation et la phase de rollback de commitTous impliquent l’exploitation de bases de données, il peut donc également y avoir des échecs de confirmation et d'annulation qui nécessitent un traitement manuel, qui peuvent être résolus en enregistrant des journaux, en compensant les tentatives, etc.

3. Avantages et inconvénients du TCC

Avantages du mode TCC

  1. Soumission directe en une seule étape, pas de verrous de base de données, pas d'autres verrous, bonnes performances
  2. La logique de réservation et de récupération est écrite par vous-même et ne dépend pas de la base de données. Elle peut être utilisée dans des bases de données non transactionnelles.

Inconvénients du mode TCC

  1. Le codage est complexe
  2. Faiblement cohérent
  3. parce queConfirmetCancelCela peut également échouer et vous devez gérer ce processus.
  4. Certaines entreprises ne sont pas adaptées au modèle TCC. Par exemple, passer une commande est un processus d'ajout d'une nouvelle ligne. Il n'est pas possible ni nécessaire d'utiliser TCC.

4. Mode XA

Forte cohérence, en coordonnant le moment où les transactions locales de chaque participant sont validées et annulées.

Avantages du mode XA

  1. Facile à mettre en œuvre, car la plupart des bases de données prennent déjà en charge les transactions XA, Seata n'a qu'à effectuer un simple packaging
  2. forte cohérence

Inconvénients du mode XA

  1. Chaque transaction doit attendre que tout le traitement des transactions soit terminé, occupant des verrous de base de données, ce qui entraîne de mauvaises performances et une faible disponibilité.
  2. Il ne peut pas être utilisé si la base de données ne prend pas en charge les transactions XA

5. Mode AT

consistance faible