マイクロサービス アーキテクチャにおけるアプリケーションの正常なシャットダウンとは、主にアプリケーション インスタンスの計画的かつスムーズな終了 (つまり、処理する必要のあるインシデントがないこと) を指します。アプリケーション サーバーのシャットダウンは主に、アクティブ シャットダウンとパッシブ シャットダウンの 2 つのカテゴリに分類され、そのうちアクティブ シャットダウンとほとんどのパッシブ シャットダウンは正常なシャットダウンを実現できます。アプリケーションが正常にシャットダウンしない場合、次の状況が発生します:
マイクロサービスのエレガントなアップグレードの目標は、上記の状況を回避し、それによって手動介入の作業負荷を回避し、マイクロサービス アーキテクチャのサービスの信頼性を向上させることです。
正常なシャットダウンは次のシナリオを解決できます:
正常なシャットダウンでは次のシナリオを解決できません:
Java の正常なシャットダウンは、通常、JDK の ShutdownHook (フック) を登録することによって実現されます。システムが終了コマンドを受信すると、まずシステムが終了状態にあるとマークされ、新しいメッセージを受信しなくなります。その後、メッセージのバックログが処理されます。そして最後にリソースを呼び出します。リサイクル インターフェイスによってリソースが破棄され、最終的に各スレッドが実行を終了します。簡単なデモケースは次のとおりです (簡易バージョン):
リーリータイムアウト制御
通常、正常な終了にはタイムアウト制御メカニズムが必要です。終了前のリソース回復やその他の操作がタイムアウト期間に達する前に完了しない場合、シャットダウン スクリプトは KILL -9 PID を直接呼び出して強制的に終了します。長い間。
Il n'existe pas de solution unifiée pour l'arrêt progressif des microservices. Il suffit de comprendre les idées principales et la conception :
Drainage → Baffle → En attente d'arrêt
Mais dans une architecture de microservices, nous pouvons suivre les règles recommandées suivantes pour concevoir un mécanisme d'arrêt progressif pour les microservices :
Les temps d'arrêt progressifs des applications de microservices sont principalement divisés en deux types selon les différents rôles d'utilisateur :
Conception d'arrêt gracieux de l'application de passerelle Microservice
L'arrêt progressif des autres couches d'équipements peut être dérivé des deux types de solutions ci-dessus, telles que :
Parmi les produits open source du secteur, de nombreux produits utilisent des hooks JDK pour obtenir un arrêt progressif, tels que les produits suivants :
以上がマイクロサービス アーキテクチャ - 正常なシャットダウン ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。