はてなのサーバって300台くらいあるとどこかの記事で読んだんですけど、それらをどうやって連携して稼動するようにしているんですか?
たとえば100人が同時にはてなのトップページ「http://www.hatena.ne.jp/」を表示しようとしますよね。最初の50人にはAというサーバで表示させ、残りの50人にはBというサーバで表示させているのでしょうか。その振り分けはどうやっているのでしょうか。
ちょっとちんぷんかんぷんな質問かもしれませんが、解説できる方お願いいたします。
ちょっと情報古いけどこんな感じだと思う。
http://d.hatena.ne.jp/naoya/20051205/1133782641
簡単に言えばWebサーバーの前にロードバランサーを置いている。
http://www.atmarkit.co.jp/fnetwork/rensai/lb01/lb01.html
ロードバランサーは専用の機械の事が多いけど、はてなの場合は Apache 等のソフトウェアでやっている。
ちなみにDBの方はこんな感じらしい。
http://d.hatena.ne.jp/naoya/20060901/1157109663
こちらも基本的な構造は一緒だけど、MySQL のデータはレプリケーションしてあるので、どのDBに接続しても同じ結果が返ってくるようにしてある。
ちょっと情報古いけどこんな感じだと思う。
http://d.hatena.ne.jp/naoya/20051205/1133782641
簡単に言えばWebサーバーの前にロードバランサーを置いている。
http://www.atmarkit.co.jp/fnetwork/rensai/lb01/lb01.html
ロードバランサーは専用の機械の事が多いけど、はてなの場合は Apache 等のソフトウェアでやっている。
ちなみにDBの方はこんな感じらしい。
http://d.hatena.ne.jp/naoya/20060901/1157109663
こちらも基本的な構造は一緒だけど、MySQL のデータはレプリケーションしてあるので、どのDBに接続しても同じ結果が返ってくるようにしてある。
ありがとうございます!
ありがとうございます!
はてなのサーバがそうなのかはわかりませんが、ロードバランサというのを使えば可能で、一つの実装方法です。
例えば、http://www.hatena.ne.jp/へのアクセスの場合、www.hatena.ne.jp(グローバルIPアドレスが何らかの値になる)にポート番号80でリクエストが飛んできます。
これを、一旦ロードバランサが受け、ロードバランサは例えばWebサーバが2台あるとすると、wwwA.hatena.ne.jpのポート80とwwwB.hatena.ne.jpのポート80のリクエストに変換して、AとBに対して順繰りに振り分けるように制御します。
http://www.atmarkit.co.jp/fnetwork/rensai/lb01/lb01.html
単純に順繰りにするだけでなく、10台のサーバがあったとして、どれが1台がダウンしたらそれを検出して、自動的に10台の順繰り→9台の順繰りにするなどの制御もできます。
ありがとうございます!
振り分け用のフロントサーバでアクセスを受け付け、バランサーという振り分けソフトを使って、沢山のサーバにできるだけ均等にリクエストを渡すようにします。
はてなが今現在どのようにしているか、確かな事は外部の人間には分かりませんが、以前はmod_proxy_balancer使ってたけど、今バランサーにLVSを使っているような話を聞いた事があります。
サービス毎に構成は多少違うでしょうから、全部が全部ではないでしょうし、組み合わせなどで色々工夫していると思います。
ありがとうございます!
はてなの実装は分かりませんがWebサーバーの負荷分散はDNSを使ったものや専用の負荷分散装置(ロードバランサ)等色々な方式があります。
http://ja.wikipedia.org/wiki/DNS%E3%83%A9%E3%82%A6%E3%83%B3%E3%8...
ありがとうございます!
負荷分散手法として
ロードバランサー(Load Balancer)
を使っているはずです。
簡単な説明をすると
クライアントからのリクエストを、ユーザー数やデータの転送量などを考慮して各サーバーに効率的に割り振る(ハードやソフトでの)仕組み。
他の方法として
DNSラウンドロビン(DNS round robin)
を利用している可能性もあります。
クラスタリング(clustering)もキーワードとなるでしょう。
ありがとうございます!
ありがとうございます!