Architecture de microservices : solution d'arrêt gracieuse
L'arrêt progressif des applications dans l'architecture des microservices fait principalement référence à la sortie planifiée et en douceur des instances d'application (c'est-à-dire qu'aucun incident ne doit être géré). Les arrêts des serveurs d'applications sont principalement divisés en deux catégories : les arrêts actifs et les arrêts passifs, parmi lesquels les arrêts actifs et la plupart des arrêts passifs peuvent réaliser des arrêts progressifs. Si l'application ne s'arrête pas correctement, les situations suivantes se produiront :
- Perte de données : les données en mémoire n'ont pas été conservées sur le disque
- Corruption de fichier : le fichier en cours d'écriture n'a pas été mis à jour, ce qui entraîne une corruption de fichier
- Demande perdue : La demande en attente dans la file d'attente est perdue
- Réponse perdue : La transaction réussie n'a pas eu le temps de répondre
- Interruption des transactions : les transactions en cours de traitement vers un état intermédiaire sont interrompues de force
- Le service n'est pas hors ligne : le service amont continuera quand même à envoyer des demandes de consommation au service aval
L'objectif de la mise à niveau élégante de nos microservices est d'éviter les situations ci-dessus, évitant ainsi la charge de travail d'intervention manuelle et améliorant la fiabilité du service de l'architecture des microservices.
Un arrêt progressif peut résoudre les scénarios suivants :
- TUER PID
- L'application s'est fermée automatiquement de manière inattendue (System.exit(n))
- Utilisez la commande de script pour arrêter l'application
Un arrêt progressif ne peut pas résoudre les scénarios suivants :
- Panne de courant soudaine
- Destruction physique des machines
- KILL-9 PID ou taskkill /f /pid
L'arrêt progressif de Java est généralement obtenu en enregistrant le ShutdownHook (hook) du JDK. Lorsque le système reçoit la commande de sortie, il marque d'abord le système comme étant dans l'état de sortie et ne recevra plus de nouveaux messages, puis traite l'arriéré de messages, et enfin appelle les ressources. L'interface de recyclage détruit les ressources, et enfin chaque thread quitte l'exécution. Un cas de démonstration simple est le suivant (version simple) :
<span class="hljs-comment">/** * 优雅停机处理方式 * * <span class="hljs-doctag">@author</span> lry **/</span> <span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-class"><span class="hljs-keyword"><span class="hljs-selector-tag">class</span></span> <span class="hljs-title"><span class="hljs-selector-tag">Main</span></span></span>{ <span class="hljs-comment">/** * 启动应用 **/</span> <span class="hljs-function"><span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-keyword"><span class="hljs-selector-tag">void</span></span> <span class="hljs-title"><span class="hljs-selector-tag">start</span></span><span class="hljs-params">()</span></span>{ <span class="hljs-comment">// 第一步:启动应用服务……</span> <span class="hljs-comment">// 第二步:注册JDK钩子</span> <span class="hljs-selector-tag">Runtime</span><span class="hljs-selector-class">.getRuntime</span>()<span class="hljs-selector-class">.addShutdownHook</span>(<span class="hljs-keyword">new</span> Thread(<span class="hljs-keyword">new</span> Runnable() { <span class="hljs-meta"><span class="hljs-variable">@Override</span></span> <span class="hljs-function"><span class="hljs-keyword">public</span> <span class="hljs-keyword">void</span> <span class="hljs-title">run</span><span class="hljs-params">()</span> </span>{ System.out.println(<span class="hljs-string">"The hook running..."</span>); <span class="hljs-comment">//第三步:调用停机处理</span> stop(); } })); } <span class="hljs-comment">/** * 停止应用 **/</span> <span class="hljs-function"><span class="hljs-keyword"><span class="hljs-selector-tag">public</span></span> <span class="hljs-keyword"><span class="hljs-selector-tag">void</span></span> <span class="hljs-title"><span class="hljs-selector-tag">stop</span></span><span class="hljs-params">()</span></span>{ <span class="hljs-comment">// 停止应用前停机处理(如:注销服务、标记不接受请求等)</span> } }
Contrôle du délai d'attente
Habituellement, une sortie gracieuse nécessite un mécanisme de contrôle du délai d'attente. Si la récupération des ressources et d'autres opérations avant la sortie ne sont pas terminées avant que le délai d'attente ne soit atteint, le script d'arrêt appelle directement KILL -9 PID pour forcer la sortie. Sinon, il peut attendre un délai d'attente. longue durée.
마이크로서비스의 우아한 종료를 위한 통합 솔루션은 없습니다. 핵심 아이디어와 디자인만 파악하세요.
배수 → 배플 → 정지 대기
그러나 마이크로서비스 아키텍처에서는 다음 권장 규칙에 따라 마이크로서비스에 대한 정상적인 종료 메커니즘을 설계할 수 있습니다.
- 모든 마이크로서비스 애플리케이션은 우아한 종료를 지원해야 합니다
- 등록센터에 등록된 서비스 인스턴스의 등록 취소를 우선적으로 처리
- 다운될 서비스 애플리케이션의 액세스 포인트가 서비스 거부로 표시됩니다
- 업스트림 서비스는 정상적인 중단으로 인해 거부된 서비스의 장애 조치를 지원합니다
- 특정 업종에 따른 적절한 종료 인터페이스도 제공
마이크로서비스 애플리케이션의 우아한 가동 중지 시간은 다양한 사용자 역할에 따라 주로 두 가지 유형으로 나뉩니다.
-
- 마이크로서비스 비즈니스 애플리케이션을 위한 우아한 종료 디자인:
-
- 마이크로서비스 비즈니스 애플리케이션을 위한 우아한 종료 디자인
- 마이크로서비스 게이트웨이 애플리케이션의 우아한 종료 설계:
마이크로서비스 게이트웨이 애플리케이션의 우아한 종료 설계
다른 장비 계층의 우아한 종료는 다음과 같은 두 가지 유형의 솔루션에서 파생될 수 있습니다.
- 전체 백엔드 아키텍처를 업그레이드하고 DNS 또는 Nginx에서 직접 전환할 수 있습니다
- Nginx 레이어를 업그레이드하면 DNS에서 직접 전환할 수 있습니다
업계의 오픈 소스 제품 중에서 다음 제품과 같은 많은 제품이 JDK 후크를 사용하여 우아한 종료를 달성합니다.
- 네티
- DUBBO
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!

Outils d'IA chauds

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool
Images de déshabillage gratuites

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Article chaud

Outils chauds

Bloc-notes++7.3.1
Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Sujets chauds











Les cinq composants de base du système Linux sont: 1. Kernel, 2. Bibliothèque système, 3. Utilitaires système, 4. Interface utilisateur graphique, 5. Applications. Le noyau gère les ressources matérielles, la bibliothèque système fournit des fonctions précompilées, les utilitaires système sont utilisés pour la gestion du système, l'interaction GUI fournit une interaction visuelle et les applications utilisent ces composants pour implémenter des fonctions.

Pour afficher l'adresse du référentiel GIT, effectuez les étapes suivantes: 1. Ouvrez la ligne de commande et accédez au répertoire du référentiel; 2. Exécutez la commande "git Remote -v"; 3. Affichez le nom du référentiel dans la sortie et son adresse correspondante.

Bien que le bloc-notes ne puisse pas exécuter directement le code Java, il peut être réalisé en utilisant d'autres outils: à l'aide du compilateur de ligne de commande (Javac) pour générer un fichier bytecode (filename.class). Utilisez l'interpréteur Java (Java) pour interpréter ByteCode, exécuter le code et sortir le résultat.

Il existe six façons d'exécuter du code en sublime: via les raccourcis clavier, les menus, les systèmes de construction, les lignes de commande, définir des systèmes de construction par défaut et les commandes de construction personnalisées et exécuter des fichiers / projets individuels en cliquant avec le bouton droit sur des projets / fichiers. La disponibilité du système de construction dépend de l'installation du texte sublime.

Les principales utilisations de Linux comprennent: 1. Système d'exploitation du serveur, 2. Système intégré, 3. Système d'exploitation de bureau, 4. Environnement de développement et de test. Linux excelle dans ces domaines, offrant des outils de stabilité, de sécurité et de développement efficaces.

Pour installer Laravel, suivez ces étapes dans Séquence: Installer Composer (pour MacOS / Linux et Windows) Installez Laravel Installer Créer une nouvelle application d'accès au service de démarrage du projet (URL: http://127.0.0.1:8000) Configurer la connexion de la base de données (si nécessaire)

L'installation du logiciel GIT comprend les étapes suivantes: Téléchargez le package d'installation et exécutez le package d'installation pour vérifier la configuration d'installation Git Installation Git Bash (Windows uniquement)

Il existe de nombreuses façons de personnaliser un environnement de développement, mais le fichier global de configuration GIT est celui qui est le plus susceptible d'être utilisé pour des paramètres personnalisés tels que les noms d'utilisateur, les e-mails, les éditeurs de texte préférés et les branches distantes. Voici les éléments clés que vous devez savoir sur les fichiers de configuration globale GIT.
