LET LIFE LOOSE

読書・サーバ・プログラミング・その他興味の赴くままに徒然と。

サーバ負荷分散まとめ3

TCPのようなコネクション型通信における原則として、
ある通信パケットが送信された時、送り返されるパケットは
最初に定義した始点・終点IPアドレスのみを用い、
それ以外のIPアドレスからのパケットは破棄するというものがある。
ゆえに、負荷分散装置は始点・終点IPアドレスを適切に書き換える必要がある。
上のことを踏まえた上でサーバ負荷分散のパケットの流れを見る。

サーバ負荷分散におけるパケットの流れは、
1. ユーザーから負荷分散装置のVIP宛てにパケットが送信される
2. 負荷分散装置がパケットを受け取り、終点IPアドレスを実サーバのものに書き換えられる
3. 実サーバがパケットを受け、処理する
4. 応答パケットを負荷分散装置に返す
5. 負荷分散装置が始点IPアドレスを負荷分散装置のVIPに書き換え
  ユーザーにパケットを送る
といったものである。

このパケットの流れの負荷分散は負荷分散装置の負荷が大きい。
何故なら、実サーバが処理した後のパケットも
負荷分散装置を通らないといけないためである。
そこで、負荷分散装置の負荷をより軽減できる方法として、
DSR(Dynamic Source Routing)がある。
これは上の処理手順における4〜5の処理を省くというものである。
これにより返答パケットを負荷分散装置を経由することなく
直接ユーザーに返すことが可能となる。

DSRではMAT(MAC Address Translation)を行い、
レイヤ2でのパケット操作を行う。
始点IPアドレスを書き換える必要をなくすために、
VIPを実サーバのネットワークインターフェースにも持たせる必要がある。
しかし、ネットワーク上において二つのMACアドレスに対して
同じIPアドレスを割りあてることはできない。
そのため、VIPはループバックインターフェースに割りあてる。
ループバックインターフェースはサーバ内部の通信に用いられ、
そのIPアドレス127.0.0.1である。
しかし、ネットワークインターフェースに複数のIPアドレスを付与できるのと同様に
(IPエイリアス)、ループバックインターフェースにもIPエイリアスを付与できる。
これにより、複数のMACアドレスに対して同じIPを割りあてることができないという
問題に対処する。

DSRでの負荷分散は次のような手順でパケットが操作される。
1. ユーザーから負荷分散装置のVIP宛てにパケットが送信される
2. 負荷分散装置がパケットを受け取り、MATを用いて終点MACアドレス
  実サーバのネットワークインターフェースのものに書き換える
3. パケットが実サーバのループバックインターフェース宛てに届く
4. 実サーバがユーザーに返答パケットを返す

Webトラフィックは約1:8の割合という特徴を持つ。
パケット1を受け取り、その返答パケットを8返す。
(これは処理すべきトラフィックの量であって、パケット数自体はほぼ同一である)
そのため、DSRを用いることにより負荷分散装置の負荷を大幅に削減できることになる。

ただし、DSRは設定の複雑化や、
レイヤ5-7のURL解析やハッシングが動作しない他、
通常はクッキーを使う維持機能が動作しないなどの欠点がある。


他のサーバ負荷分散方式としては、
始点・終点IPアドレスどちらかのみを書き換えるハーフNATや
両方を書き換えるフルNATなどがある。
フルNATはプロキシやキャッシュのサービスにおいて有効な場合がある。


負荷分散装置は通常サーバベース負荷分散装置と
スイッチングベース負荷分散装置の二つに分けられる。
以下それぞれのメリット・デメリットである。
ただし、これらのメリットなどは常にあてはまるものではなく、
ベンダや機種により大きく異なる場合がある。

サーバベース負荷分散装置
ネットワークスタック上のソフトウェアコードによりパケット書き換えを行う。
メリット
・使用するOSの開発者が雇いやすいため、開発が容易
 →コード変更や新機能の追加を迅速に行える
デメリット
・コードのサイクルが短いため、バグが出やすい

スイッチングベース負荷分散
ASIC(Application Specific Integrated Circuit)チップを使いパケット書き換えを行う。
メリット
・ASICチップは専門化されたプロセッサで汎用プロセッサより高速である
・安定している
デメリット
・ASICチップの柔軟性に欠け、
 新たな機能の追加の際にはASICを設計しなおす必要がある
 (IP自体は変化しないためそれらの機能をASICに埋め込み、
 再設計を避けられる場合もある)
・コード開発が難しくリリースが遅い(だがそのため安定性が高い)