Javaプログラマーの技術メモ

勉強したことのメモ帳

L4スイッチとL7スイッチ

ロードバランサ(L4スイッチ)

  • L4スイッチは、TCPヘッダなどのプロトコルヘッダの内容を解析して分散先を決定する。

  • L4スイッチでは転送するだけなので、TCPコネクションはクライアントと転送先のサーバのみとなる。

リバースプロキシ(L7スイッチ)

  • L7スイッチは、アプリケーション層の中身まで解析して分散先を決定する。

  • L7スイッチは転送するだけでなく仲介する立場として動作し、TCPコネクションはクライアント・L7スイッチ間とL7スイッチ・転送先サーバ間の2つで張られる。

  • HTTPリクエストに応じた制御

    リバースプロキシは、クライアントからの要求と転送先サーバを仲介するので、その間に様々な前後処理を挟むことができる。 (ex)URLの書き換え。

  • アプリケーションサーバのメモリ使用効率の向上

    URLの書き換えによって、静的コンテンツを返却するWebサーバと動的コンテンツを返却するアプリケーションサーバを分ける。 そうすることで、アプリケーションサーバのメモリ消費量を抑えることができる。

HTTPのKeep-Alive

  • クライアント - リバースプロキシ間のKeep-Alive

    TCPコネクションを新規に作成するには負荷がかかるため、一度作成したら接続を一定時間維持するKeep-Aliveの仕組みが提供されている。

    リバースプロキシをアプリケーションサーバの前に配置する場合には、クライアントとリバースプロキシ間でKeep-Aliveが有効となる。

  • リバースプロキシ - アプリケーションサーバ間のKeep-Alive

    「[24時間365日] サーバ/インフラを支える技術」本によると、リバースプロキシ - アプリケーションサーバではKeep-Aliveはオフにするのを薦めている。アプリケーションサーバの前提がマルチプロセス型だから、プロセスを長時間保持してしまうコストの方がTCPコネクションを新規に張るコストより大きいという前提なのかもしれない。

    Javaの場合は、マルチスレッドのアプリケーションサーバなので、スレッドを専有するのはそれほど高コストではない。 リバースプロキシ - アプリケーションサーバ間のKeep-Aliveの仕組みが用意されているものもある。

    Apache - Tomcat間では、mod_jkというApacheのモジュールが提供されており、こちらではこの2者間のKeep-Aliveをサポートしている。ただ、mod_jkではなく単にmod_proxyでも同じことはできる。

    http://www.ee.siue.edu/manual/ja/mod/mod_proxy.html

参考

d.hatena.ne.jp

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

[24時間365日] サーバ/インフラを支える技術 ?スケーラビリティ、ハイパフォーマンス、省力運用 (WEB+DB PRESS plusシリーズ)

mod_proxy_httpとmod_proxy_ajpとmod_jk