ホームページ >システムチュートリアル >Linux >マイクロサービス アーキテクチャ - 正常なシャットダウン ソリューション

マイクロサービス アーキテクチャ - 正常なシャットダウン ソリューション

王林
王林オリジナル
2024-08-07 18:47:02724ブラウズ
要約: マイクロサービス アーキテクチャにおけるアプリケーションの正常なシャットダウンとは、主にアプリケーション インスタンスの計画的かつスムーズな終了 (つまり、処理する必要のあるインシデントがないこと) を指します。
1 はじめに

マイクロサービス アーキテクチャにおけるアプリケーションの正常なシャットダウンとは、主にアプリケーション インスタンスの計画的かつスムーズな終了 (つまり、処理する必要のあるインシデントがないこと) を指します。アプリケーション サーバーのシャットダウンは主に、アクティブ シャットダウンとパッシブ シャットダウンの 2 つのカテゴリに分類され、そのうちアクティブ シャットダウンとほとんどのパッシブ シャットダウンは正常なシャットダウンを実現できます。アプリケーションが正常にシャットダウンしない場合、次の状況が発生します:

  • データ損失: メモリ内のデータがディスクに保存されていません
  • ファイル破損: 書き込まれているファイルが更新されていないため、ファイルが破損しています
  • リクエストが失われました: キューで待機していたリクエストが失われました
  • 応答が失われました: 成功したトランザクションに応答する時間がありませんでした
  • トランザクション中断: 中間状態に処理中のトランザクションは強制的に中断されます
  • サービスはオフラインではありません: アップストリーム サービスは引き続きダウンストリーム サービスに消費リクエストを送信します

マイクロサービスのエレガントなアップグレードの目標は、上記の状況を回避し、それによって手動介入の作業負荷を回避し、マイクロサービス アーキテクチャのサービスの信頼性を向上させることです。

2 使用シナリオ

正常なシャットダウンは次のシナリオを解決できます:

  • PIDをキル
  • アプリケーションが予期せず自動的に終了しました (System.exit(n))
  • スクリプトコマンドを使用してアプリケーションを停止します

正常なシャットダウンでは次のシナリオを解決できません:

  • 突然の停電
  • 機械の物理的破壊
  • KILL-9 PID または taskkill /f /pid
3 シャットダウンフック

Java の正常なシャットダウンは、通常、JDK の ShutdownHook (フック) を登録することによって実現されます。システムが終了コマンドを受信すると、まずシステムが終了状態にあるとマークされ、新しいメッセージを受信しなくなります。その後、メッセージのバックログが処理されます。そして最後にリソースを呼び出します。リサイクル インターフェイスによってリソースが破棄され、最終的に各スレッドが実行を終了します。簡単なデモケースは次のとおりです (簡易バージョン):

リーリー

タイムアウト制御
通常、正常な終了にはタイムアウト制御メカニズムが必要です。終了前のリソース回復やその他の操作がタイムアウト期間に達する前に完了しない場合、シャットダウン スクリプトは KILL -9 PID を直接呼び出して強制的に終了します。長い間。

4 つのマイクロサービスが正常にシャットダウンします

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 :

  • Toutes les applications de microservices doivent prendre en charge l'arrêt progressif
  • Prioriser la désinscription des instances de service enregistrées dans le centre d'inscription
  • Le point d'accès de l'application de service en panne est marqué comme un déni de service
  • Les services en amont prennent en charge le basculement des services refusés en raison d'une panne progressive
  • Des interfaces d'arrêt appropriées sont également fournies en fonction des métiers spécifiques

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 élégante pour les applications métiers de microservices :

マイクロサービス アーキテクチャ - 正常なシャットダウン ソリューション

    • Conception d'arrêt élégante pour les applications métiers de microservices
    • Conception d'arrêt gracieux de l'application de passerelle de microservice :

マイクロサービス アーキテクチャ - 正常なシャットダウン ソリューション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 :

  • Mettez à niveau toute l'architecture backend, vous pouvez passer directement depuis DNS ou Nginx
  • Mettez à niveau la couche Nginx, vous pouvez passer directement depuis DNS
5 cas d'utilisation

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 :

  • Netty
  • DUBBO

以上がマイクロサービス アーキテクチャ - 正常なシャットダウン ソリューションの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。