4

当社のプロダクションは LB+TOMCAT で実行されています。独自のカスタム SAFE-DEPLOY ツールを使用して変更をプロダクションにデプロイします。当社のシステムは 24 時間年中無休の可用性を提供することを約束しているため、ツールは次のように変更をデプロイします。

特定のサービスに使用される合計サーバーは、グループに分けられます。2 つのグループに分割され、一方のグループを停止し、変更をデプロイしてグループを開始するとします。最初のグループが完了したら、他のグループに変更を展開します。ほとんどの場合、問題なくうまく機能します。

この問題は特殊なケースによって引き起こされます。1 つのサービスは、クライアントが資格情報として受け取るトークンを生成します。トークンの形式を変更しました。同じデプロイ アプローチを使用する場合、いくつかの潜在的な問題があるはずです。つまり、グループ 1 を停止して新しいコードをデプロイしてから再起動します (問題ありません)、グループ 2 を停止します。 (新しいコードのデプロイの準備)、グループ 2 のデプロイ時にエラーが発生する可能性があります。これは、その間にグループ 1 がグループ 2 によって生成された古い形式のトークンを受け取る可能性があるためです (1.グループ 1 のデプロイ時に、グループ 2 は古いコードを実行し、2.グループ 2 は停止できません)。リクエストを処理する)、クライアントはトークンが間違っていることを示すエラーを受け取りますが、それは本当の間違ったトークンではありません。

解決策は、コードで新しい形式のトークンと古い形式のトークンの両方を処理できるようにすることですが、新しい形式のトークンのみを生成し、1 日実行した後、新しい形式のトークンのみを処理する展開を行うことができます。うまくいくと思いますが、恵みではありません。

私の質問は、コードを変更せずに、サーバーが生成された古い形式のトークンと新しい形式のトークンの両方を処理できるようにするグレース デプロイ アプローチがあるかどうかです。

ところで:Tomcatでのホットデプロイのベストプラクティスであるリファレンスを見つけました.Tomcat 7でのみ機能します.Tomcatは6.0.26です.

4

1 に答える 1

0

はい、別の方法があるかもしれません。最初に、loadbalancern (apache + mod_jk) でスティッキー セッションをアクティブにします。これは、クライアントが常に同じサーバーに接続することを意味します。次に、ワーカー (サーバー) を (停止ではなく) 無効にします。既存のセッションのみが提供され、新しいセッションは提供されません。ワーカーに開いているセッションがなくなった場合は、ワーカーを停止し、ワーカーを更新して、LB でワーカーを有効にします。それだけですが、あなたのやり方を提案します。

于 2012-11-17T17:54:48.040 に答える