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 :
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 :
Un arrêt progressif ne peut pas résoudre les scénarios suivants :
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.
마이크로서비스의 우아한 종료를 위한 통합 솔루션은 없습니다. 핵심 아이디어와 디자인만 파악하세요.
배수 → 배플 → 정지 대기
그러나 마이크로서비스 아키텍처에서는 다음 권장 규칙에 따라 마이크로서비스에 대한 정상적인 종료 메커니즘을 설계할 수 있습니다.
마이크로서비스 애플리케이션의 우아한 가동 중지 시간은 다양한 사용자 역할에 따라 주로 두 가지 유형으로 나뉩니다.
마이크로서비스 게이트웨이 애플리케이션의 우아한 종료 설계
다른 장비 계층의 우아한 종료는 다음과 같은 두 가지 유형의 솔루션에서 파생될 수 있습니다.
업계의 오픈 소스 제품 중에서 다음 제품과 같은 많은 제품이 JDK 후크를 사용하여 우아한 종료를 달성합니다.
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!