1

これが私が達成したいことです:

タイプ A の他の Web サービス (異なるバージョン) と並べてデプロイできるようにしたい Web サービス A があります。今のところ、2 つのインスタンスを並べて想定しています。サービスにはウォームアップ段階があり、DB からのものを構築するのに時間がかかり、準備が整った後にのみリクエストの処理を開始できるため、必要です...

「 /ServiceA-1.0」、「/ServiceA-2.0 などのTomcat6コンテキストパスに展開し、「/ServiceA-」などの目的の物理サービスを指す「 / ServiceA」 などの「仮想」コンテキストを作成することを考えていました1.0" . したがって、外部の世界は ServiceA を認識しますが、内部では、私の ServiceA 関連のスタックはバージョン管理された ServiceA の URL を認識します (関連するコンポーネントは他にもありますが、ServiceA だけが外部の世界にサービスを提供しています)。新しいサービスの準備ができたら、「仮想」コンテキストを再構成して新しいサービスを指すようにします。

これまでのところ、Tomcat でこれを行う方法を見つけることができず、tkink を開始することは不可能です。Apache サーバーを Tomcat の前に配置してルーティングを行うという提案を見つけましたが、必要でない限り別のソフトウェアを登録したくありません。

私の質問は次のとおりです:
- この種の「仮想」コンテキストとルーティングは Tomcat6 で可能ですか?
- この種のサービス スワッピング シナリオを実現するために学んだその他のオプション、知恵、教訓はありますか?

ベスト、
ヨゼフ

4

3 に答える 3

2

あなたが言及したウォームアップ期間を考えると、実装を切り替えるときに多かれ少なかれ中断のないサービスが必要だと思います。これは、前に Apache を使用すると非常に簡単に処理できます。

私は通常、この余分なレイヤーから得られる柔軟性を楽しんでいます。Apache はシステムにあまり侵襲的ではありません。さらに、unix で実行する場合、Apache をポート 80 でリッスンするのは簡単です (読み取り: デフォルト) 。

Apache に触れたことがない場合でも、短時間で簡単に習得できますのでご安心ください。特に、それがもたらすフルパワーを必要としない場合。リバース プロキシ (または mod_jk) の構成は、あらゆる場所で十分に文書化されています。そして、あなたが言及した機能は、リバースプロキシとロードバランサーのハイブリッドです.「間」で負荷を分散するサーバーが1つしかない場合でも、2つの異なるコンテキスト/バージョンがあります.

Apache を恐れないでください。あなたは正しい道を進んでいます :)

于 2012-06-15T07:33:32.327 に答える
0

Tomcatにこれを行うネイティブの機能があるかどうかは覚えていませんが、単純なWebアプリサーブレットを使用して、探していることをかなり簡単に達成できるはずです。基本的に、「/ ServiceA」をリッスンし、すべてを必要なURLにリダイレクトするサーブレットを作成します。単純な管理ページ(バルブを使用してアクセスを制御しますか?)またはJMXサービスを作成して、リダイレクトするエンドポイントを制御できます。

Apache HTTPDLighttpdのようなものを前に使用するほど単純ではありませんが、おそらく同じくらい効果的であり、それが本当に必要な場合は、Tomcat内にすべてを保持できます。

Poundは、サービスの前で実行できる非常に高速で軽量のロードバランサーでもありますが、メモリが機能する場合、その場で構成を変更することはできません。停止して再起動する必要があります。ただし、SIGHUPを停止して開始または送信するのは非常に高速なので、それほど苦痛ではありません。もちろん、これは、Tomcatに加えて実行/構成/サポートする必要がある別個のバイナリを意味します。

私はあなたの元の質問を読み直したところ、スイッチングサービスに関する警告についてのあなたの質問に誰も答えていないことに気づきました。サービスがステートレスであるかどうかを示すことはありませんが、2つのサービスを切り替えるときに、セッション/状態が失われることの影響について心配/考慮する必要があります。それ以外では、影響は最小限になると思います。

于 2012-06-15T15:26:29.577 に答える
0

Tomcat 7 は、すぐに使用できるバージョン管理をサポートしています。たとえば、Service##1.war、Service##2.war などを展開するだけで、それらはすべて /Service として表示され、存在する最新のものがデフォルトになります。または、特定のバージョンと対話することもできます。これを mod_proxy を実行する Apache HTTPD でフロントエンドすれば完了です。mod_proxy_jk よりも mod_proxy_ajp をお勧めします。構成がはるかに簡単で、機能が不足していないように見えるからです。

于 2012-06-18T15:23:34.613 に答える