質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

Q&A

1回答

1618閲覧

ロードバランサ

退会済みユーザー

退会済みユーザー

総合スコア0

TCP

TCP(Transmission Control Protocol)とは、トランスポート層のプロトコルで、コネクション型のデータサービスです。

ロードバランサー

ロードバランサー【負荷分散装置】は、複数のサーバへアクセス要求を分散する装置です。 要求を分散することで各サーバが快適な応答速度を保つことを目的としており、 アクセスの多い大規模サイト等は、この装置により 複数のサーバに負荷を分散する事で安定な運用が可能です。

サーバ

サーバは、 クライアントサーバモデルにおいてクライアントからの要求に対し 何らかのサービスを提供するプログラムを指す言葉です。 また、サーバーソフトウェアを稼動させているコンピュータ機器そのもののことも、 サーバーと呼ぶ場合もあります。

負荷分散

負荷分散とは、並列に運用されている機器間でできる限り負担が均等になるように、処理を分散し割り当てることです。 負荷分散は専用機器の使用、DNSサーバの設定、サーバに負荷分散ソフトウェアを導入することで実現できます。

0グッド

1クリップ

投稿2015/11/10 17:06

負荷分散を実際にしてみたいのですが、仮想的なサーバをプログラムで書いてそこに負荷をかけて行くことって可能でしょうか?

負荷をかけたり特定のアクセスの場合他の仮想サーバへの誘導を行いたいのですが、どのようにすればいいのか良くわかりません。

抽象的な方法でいいので教えていただけると幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

負荷分散を自分で実装したいのか、
負荷分散システムを構築したいのかで随分変わるかと思いますが、

仮想分散システムの構築だと
LVSの場合
nginx
等のロードバランサーとして動くアプリケーションをインストールして設定するというのが手軽ですね。
この場合、仮想環境で必要な台数のサーバとネットワークを用意すればよりわかりやすいと思います。

もっと簡単なのは、
AWSでのELBやその他クラウド環境でサービスとして提供されているロードバランサー使用してクラウド上で構築するという手段があります。

実装してみたいということだと、
何らかの方法で分散先を決定して、分散先から結果を取得して、クライアントに返すというだけなので
phpであれば極端な話、
以下の様な実装で「このスクリプトと同じパスを持つバランシング先のHTMLに関しては」バランシング出来ます。

PHP

1//単純な負荷分散の場合 2//転送先のホストのリスト 3$host_list = array("http://host-a","http://host-b"); 4 5//ランダムに負荷分散 6$transfer_key = rand(0,1); 7$transfer_host = $host_list[$transfer_key]; 8 9//バランサーが受け取ったリクエストパスと分散先ホストを結合してリクエスト先URLを取得 10$transfer_url = $transfer_host.$_SERVER['REQUEST_URI'] 11 12//転送先の出力をそのまま出力 13echo file_get_contents($transfer_url);

もちろんこれだけだと使い物にならないので、
・ヘッダも正確に出力する
・mod_rewriteなどを使って全てのリクエストをindex.phpに集め、パスをパラメータとして持たせてそのパラメータを使って分散先からデータを取得する
・分散先の負荷状態や生きているかどうかを別途チェックしておき、その結果で重みづけをする
など、色々工夫出来ます。

が、工夫をすればするほどバランサー側が重くなっていったりバグが出たりするので、
実用レベルに持っていくのは非常に困難だったり、
既存のロードバランサーを使った方が確実/楽という結果になりがちだとは思います。

投稿2015/11/10 17:58

tanat

総合スコア18713

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問