web-dev-qa-db-ja.com

TomcatでのWebアプリケーションの水平方向のスケーリング(負荷分散/クラスタリング)

2つの基本モジュールで構成されるシンプルなRESTスタイルのWebアプリケーションを開発しています。

Module#1:サーバー公開REST Webサービス、ステートレス、Tomcatにデプロイ
Module#2:REST client

Module#1がデプロイされたTomcatインスタンスが1つあります。

水平方向にスケーリングして、2台目のマシンで2台目のTomcatを実行したいと思います。負荷分散/クラスタリングに関しては、私は完全な初心者なので、助けが必要です。セッションの複製やフェイルオーバーは必要ありません。

私はそれにどのように取り組むべきですか?

私は調査を行い、これらは私が見る可能なアプローチです:

1。クラスタなし、サードパーティプロキシなし

2台目のマシンで2台目のTomcatを実行します。クライアントとサーバーの両方を制御できるため、クライアント側で非常に基本的なアルゴリズムを提供し、API呼び出しの前にホストをランダムに選択できます。クラスタを構成したり、サードパーティのプロキシを提供したりする必要はありません。潜在的な落とし穴はありますか?それは正しいアプローチですか?

2。Tomcatクラスター

Tomcatクラスター構成に関して言えば、別のマシンで実行されている2つのTomcatがあり、それらの構成がクラスターであることを示しているということですか?別のライブラリ、そのためのツールが必要ですか? Tomcatで十分ですか?最初のアプローチのように2つのプロセスを実行しますか?

。Tomcatロードバランサー

TomcatクラスターとTomcatロードバランサーの違いは何ですか?繰り返しますが、別のライブラリ、そのためのツールが必要ですか? Tomcatで十分ですか?

4。サードパーティのプロキシ

HAProxyなどに関する情報を見つけました。それは、すべての呼び出しが通過し、プロキシがどのホストを選択するかを決定することを意味しますか? 2つのTomcatプロセスとは別に、3つ目のプロセスが個別に実行されるということですか? 2台の別々のマシンに2つのTomcatがあると仮定して、このプロキシはどのマシンで実行されていますか?

どれを選べばいいですか?私は何かを誤解していますか?記事、回答を歓迎します。

4
BartoszMiller

まず、両方のオプション負荷分散(クラスターなし)とCluster with replicationの違いを確認します。

クラスタリングには正式な意味があります。クラスターとは、共通の目的を達成しようとしているリソースのグループであり、お互いを認識しています。クラスタリングでは通常、リソース(通常はサーバー)をセットアップして特定のチャネル(ポート)の詳細を交換し、その状態を交換し続けるため、リソースの状態が他の場所でも複製されます。通常、ロードバランシングも含まれます。この場合、要求はロードバランシングポリシーに従ってクラスター内のリソースの1つにルーティングされます。

クラスタ化されたアーキテクチャは、次の1つ以上の問題を解決するために使用されます。

  • 単一のサーバーが大量の着信要求を効率的に処理できない
  • ステートフルアプリケーションには、サーバーに障害が発生した場合にセッションデータを保持する方法が必要です。
  • 開発者は、サービスを中断することなく、構成を変更したり、アプリケーションに更新をデプロイしたりする機能を必要とします。

クラスター化されたアーキテクチャは、負荷分散、負荷分散を処理する複数のサーバー、およびセッションレプリケーションの組み合わせを使用して、これらの問題を解決します。
この場合、必要なセッションレプリケーションは必要ありません。このため、クラスター構成は必要なアプローチではないと思います。

ドキュメントApache Tomcat-Clustering/Session Replication HOW-TO

ロードバランシングは、同じ設定で複数の独立したサーバーがあり、それ以外は互いに認識していない場合、クラスタリングなしでも発生する可能性があります。次に、ロードバランサーを使用して、要求を1つのサーバーまたは他のサーバーに転送できますが、1つのサーバーは他のサーバーのリソースを使用しません。また、1つのリソースは他のリソースとその状態を共有しません。

ロードバランサーの基本的な機能は、スケジューリングアルゴリズムに従って、クラスター内の複数のバックエンドサーバーに着信要求を分散できることです。

どちらのアーキテクチャでも、ロードバランサーを実装するものが必要です。このための1つのオプションは、Apache HTTP Serverを使用することです。

Tomcat load balanceer

Apache Httpサーバーにロードバランサーを実装するには、次のようなオプションがあります。

  • JK native connectorの使用
  • Apache HTTPの使用mod_proxy

参考:

5
Federico Sierra