エンジニアブログ 【初心者必見】ロードバランサを使うメリット

ロードバランサで使われる負荷分散の方式や、 同一のサーバーに振り分けを行うパーシステンス機能をピックアップし、ロードバランサを使うメリットをご紹介いたします!

木村 詩織

入社2年目のNWエンジニア
自分自身も日々技術の勉強中。。。初心者向けの記事を中心に書いていきます!

1. 負荷分散方式

負荷分散方式の中から、一般的に使用されているラウンドロビン/リーストコネクション方式をご紹介いたします。

ラウンドロビン

ラウンドロビン方式とは、クライアントから来たリクエストを、複数サーバーへ順番に振り分ける古くからある方式であり、多くのロードバランサ製品に対応しております。

merit_load-balancer_01.png


ラウンドロビン方式は、リクエストのコネクション時間が一定の場合、均等に負荷分散することが可能です。
しかし、コネクション時間に差がある場合はどうでしょうか?
例えば、クライアントからきたリクエストを、サーバーA,B,Cに順番に振り分けている際、サーバーAに対するリクエストのコネクション時間が、サーバーB,Cより短い場合を考えてみましょう。

merit_load-balancer_02.png


図1-2では、サーバーAは、1⃣、4⃣のコネクションが終了し、7⃣のリクエストのみ処理をしている状態になったとします。
ラウンドロビン方式では現在のコネクション数を加味しないため、変わらずサーバーB,C,A...の順番に振り分けてしまいます。

merit_load-balancer_03.png


その結果、図1-3のような状態となり、リクエストのコネクション時間に差がある場合は、均等な負荷分散とはいえないでしょう。
そこで、次にご紹介するリーストコネクション方式であれば、解決できます!



リーストコネクション


リーストコネクション方式は、現在のコネクション数が最も少ないサーバーへ振り分ける方式です。
例えば、現在のコネクション数がサーバーA:1、サーバーB:4、サーバーC:5の場合、
次のリクエストは、最もコネクション数が少ないサーバーAに振り分けることになります。

merit_load-balancer_04.png


このように、リーストコネクション方式を使うことによってコネクション時間が一定ではない場合も、均等な負荷分散を行うことが可能になります。

ラウンドロビンとリーストコネクションの2つの方式をご紹介しましたが、システムに合わせて負荷分散の方式を選択することができることが、ロードバランスを使う大きなメリットといえるでしょう。

しかし、昨今のWebシステムでは単純に負荷分散するだけでは、対応できないこともあります。
例えば、同一のクライアントのリクエストを常に同一のサーバーへ振り分けるときです。
図2-2のように、1回目のクライアントからのリクエストを、現在のコネクション数からサーバーAに振り分けたとします。

merit_load-balancer_05.png


その後、コネクションは一度切断され、同じクライアントから2回目のリクエストが来たとします。
リーストコネクション方式では、コネクションが来たタイミングの各サーバーへのコネクション数をトリガーに振り分け先を決定するため、
1回目と2回目で、振り分けられるサーバーが、変わってしまう場合があります。

merit_load-balancer_06.png


1回目と2回目のリクエストが別のサーバーに振り分けられてしまうと、困ったことが起きます。
例えば、オンラインショッピングを利用するときです。
1回目のリクエストの際、オンラインショッピングのサイト上で欲しいものをカートに登録したとします。
その後、2回目のアクセスした際に、その商品を購入しようとしても、別のサーバーに問い合わせをしているため、先ほどカートに登録した情報はありません。

merit_load-balancer_07.png

2. パーシステンス

日本語では永続性や持続性という意味を持つパーシステンスですが、
ロードバランサでは同一クライアントからのリクエストを、一定期間同一サーバーに振り分けを行う機能のことを指します。
パーシステンスで同一クライアントと判定するために使用される代表的な方式は、"cookie情報"と"送信元のIPアドレス"による方式の2つです。

Cookie

皆さんがWebサイトを閲覧中、「Cookieを有効にする」というバナーを目にしたことがあるのではないでしょうか。
Cookieとは、Webサイト等にアクセスしたクライアントの情報を、クライアントのデバイスに一時的に保存するための仕組みです。
Cookieを有効にすることで、2回目のアクセスの際にCookieの情報を参照し、前回の続きとなるコンテンツを表示できるため、上記オンラインショッピングの問題を解決することや、ID/パスワードを入力せずログインすることができます。

merit_load-balancer_08.png


初めに、クライアントからCookieの情報を含まないリクエストを送信します。
リクエストを受け取ったロードバランサは、設定している負荷分散方式で振り分けられます。今回はサーバーBに振り分けられたとしましょう。
そして、サーバーからクライアントに対し、Cookieの情報が含まれたレスポンスを返します。
ロードバランサがレスポンスのパケットを受け取った際、「サーバーBにアクセスしました」という宛先情報をCookieに挿入します。
2回目以降のリクエストをロードバランサが受け取った際は、Cookieに追加した宛先情報を確認し、同一のサーバーへ振り分けることができます!


"cookie情報"により振り分ける方式は、Web通信におけるクライアントの情報によって振り分けるため、IPアドレスが変わったとしても、同一のサーバーへ振り分けることができます。



送信元IPアドレス


送信元IPアドレスが同じ場合、ロードバランサは同一のクライアントと判断し、転送先のサーバーを固定できます。
Cookieによる方式では、Web通信が対象でしたが、送信元IPアドレスによる方式では、Web通信(HTTP/HTTPS)に加え、TCP/UDPのプロトコルにも対応しています。
しかし、Wi-Fiから社内LANへ切り替え等を行った場合、送信元のIPアドレスが変わってしまうので注意が必要です。

merit_load-balancer_09.png

3. 最後に

ロードバランサを導入することによって、システムに合わせた方式を用いて均等に負荷を分散することや、
パーシステンス機能でクライアントの情報を保持するなど、メリットがあることをご紹介いたしました。
日商エレクトロニクスでは ロードバランスのアプライアンスである、Citrix ADCを取り扱っておりますので、気になった点、詳しく聞きたい!などございましたら、お気軽にお問い合わせください!

  • #ネットワーク・セキュリティ

エンジニアブログ

NELabに関するお問い合わせは、
こちらのフォームからご連絡ください。