Java EARをホットデプロイして、サーバー上のアプリケーションのダウンタイムを最小化または排除しますか?

StackOverflow https://stackoverflow.com/questions/221846

  •  03-07-2019
  •  | 
  •  

質問

これはJavaRebelの機能だと聞いたことがありますが、EARの新しいバージョンをデプロイしながら、ユーザーが以前のバージョンでアクティブなままにする他の良い方法はありますか?アプリケーションサーバーにJBossを使用しています...

役に立ちましたか?

解決

これはJavaRebelが行うことではありません。 JavaRebel(説明による)は、メモリ内のクラスをホット置換します。更新されたクラスはクライアントのロジックを壊す可能性があるため、システムへの既存の接続の場合は受け入れられません。

かつて私が働いていた会社で同様の問題が発生し、次のように解決されました。

  • スマートルーターがロードバランサーとして使用されました
  • (新しい)クラスターのノードの50%に新しいバージョンがデプロイされました
  • 新しい接続はこれらの更新されたノードに厳密に配信され、古い接続は古いノード間でバランスが取られました
  • 古いノードはオフラインになりました(1つずつ、ノードあたりのクライアント数を制限内に保つため)
  • 同時に、新しいバージョンがオフラインの「古い」に展開されました。ノードとそれらは新しいノードとして立ち上げられました
  • EJBクラスタリングにより、セッションとBeanは他の古いノードによって取得されました
  • 最終的に(数時間で)、古いバージョンの単一のインスタンスを持つ古いノードが1つだけ残り、古いバージョンを使用するすべてのクライアントがそれに接続されました
  • 最後の古いクライアントが切断されたときに、そのノードがダウンしすぎた

今、私はネットワーキングの人ではないので、多くの詳細を伝えることはできません(ルーターのハードウェアなど)。これを理解するのは非常に簡単です。ただし、覚えていれば、新しいバージョンのアプリケーションをデプロイするために追加のWeblogicドメインをセットアップする必要がありました(そうしないと、JNDI名の古いバージョンと競合します)。

役立つこと。

PS Ichorusは、アプリがクライアントのサーバーに展開されているというコメントを提供しました。そのため、ルーターのトリックは実行不可能な場合があります。現在、実行可能な解決策は1つしかありません(21:52です。見落とす可能性があります:))-

  • 「バージョン管理」で新しいバージョンを開発するJNDI名;例えばカスタマーBeanがバージョン1でejb / Customerの下にあった場合、バージョン2ではejb / Customer2の下になります
  • 安定した基本インターフェース(ファクトリースタイル)を備えたアプリケーションにビジネスファサードを用意します。これは、Customer Beanを要求されたときに、最高のバージョンのJNDI名を見つけようとします(もちろん、すべての呼び出しでなく、 1時間程度)。そのファサードは、個別のアプリケーションとしてデプロイできます(また、そうする必要があります)。
  • 新しいクライアントはすべて、デプロイされた最新のアプリケーションにアクセスできるようになり、アプリケーションは競合しなくなりました。

このアプローチでは、慎重な計画とテストが必要ですが、私見ではうまくいくはずです。

最近、いくつかのアプリケーションを同じ方法で変更して、同じドメインに共存できるようにしました(異なるデータソースに同じJNDI名を使用する前)。

他のヒント

理解しているように、WebLogicには、EARバージョンのアップグレード中のダウンタイムをなくすための並列デプロイメントと呼ばれる機能があります。既存のアプリケーションを停止せずに新しいバージョンをデプロイできます。新しいバージョンが正常にデプロイされると、古いバージョンから新しいバージョンに透過的に切り替えることができます。

他のアプリケーションサーバーがこれをサポートしているかどうかはわかりません。

参照: http://edocs.bea.com/wls/docs100/deployment/redeploy.html#wp1022490

ロードバランサーの使用に関するウラジミールの提案は、あなたが望むものを達成するかなり確実な方法です。必ずしもハイエンドのハードウェアロードバランサーである必要はありません。むしろ、JBossサーバーをネイティブWebサーバー(ApacheまたはIIS)およびmod_jkまたはmod_proxyで処理する場合、1つの共通Webファサードを維持し、EARアップグレード時に適切なロードおよびルーティングルーチンを実装できます。

// Nicholas

OSGIフレームワークを使用してSpringを調べたいと思うかもしれません。 http://www.springframework.org/osgi

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top