最近blogやホムペレンタルとかでも、
http://○○.xxx.com/というサブドメイン系が
主流になっています。
この場合、DNSでワイルドカードを使って
http://xxx.com/○○/へとアクセスしていると思うのですが、
どのように負荷分散しているのでしょうか?
fc2のように○○.blog22.fc2.comと、blog22というのを挟めばサーバーごとにわけていける気がしますが、
○○.seesas.jp系だと、どうなってるのだろう、とよくわかりません。
blogを○○.seesaa.jpというような形でレンタルしているサイトの(ameba.jp/○○ という形のものも含めて)負荷分散について、
仮説などいろいろ知りたいと思っています。
今の自分では、あまりしっくりくる方法が思いつかないです。
http://release.seesaa.net/article/3676368.html
に一台のPCサーバーで運用可能な・・・って書いてあるのから予想するに。
入口サーバー(インターフェースプログラムなど)
↓
基本DBサーバー(ユーザーデータ・記事DBアドレスデータなど)
↓
記事DBサーバー1・記事DBサーバー2・記事DBサーバー3
こんな感じなんじゃないでしょうか。
どこかのサーバー構築BBSにも議題として載っていましたが、
実際には「○○.db1.seesaa.jp」や「○○.db2.seesaa.jp」を
「○○.seesaa.jp」という一つのサーバーに見立てるのは簡単な
ようです。全て中で処理してしまえばですが。
fc2のような形だと、
入口サーバー
↓
記事DBサーバー1・記事DBサーバー2・記事DBサーバー3
と、かなり浅い感じになってるんじゃないかな~と。
fc2もちょっと手を加えれば「○○.fc2.com」で運用可能かと思いますが、
その場合は、○○の部分が同じブログは共存できません。
aa.blog01.fc2.com
aa.blog02.fc2.com
当然ながら、「○○.db1.seesaa.jp」と「○○.db2.seesaa.jp」
とDBサーバー分けた場合でもそれぞれに同じ○○が入ることは無いです。
というのでどうでしょうか?
最初にこういうのは様々な実装方法があるため、この場で全てを説明するのは少し難しいということだけご了承ください。
DNSのワイルドカードは、単に複数のURLパターンに対して同じIPを返すだけだと思いますので、おっしゃるようなディレクトリの振り分けは出来ないと思っています。
サブドメインでアクセスした場合にそのドメイン配下の特定のディレクトリにアクセスするような挙動ですが、DNSでワイルドカードではなく、Webサーバ側で名前ベースのバーチャルホストを行うのが一般的ではないかと思います。
・名前ベースバーチャルホストの場合
- DNSでは下記のどれも同じIPアドレスを返す
aaa.xxx.com - XXX.XXX.XXX.XXX
bbb.xxx.com - XXX.XXX.XXX.XXX
ccc.xxx.com - XXX.XXX.XXX.XXX
- Webサーバ側では問い合わせてきたURLごとにコンテンツ参照ディレクトリを変える
aaa.xxx.com - /xxx.comのドキュメントルート/aaa
bbb.xxx.com - /xxx.comのドキュメントルート/bbb
ccc.xxx.com - /xxx.comのドキュメントルート/ccc
DNSワイルドカードだけでは無理だと思っているのですが、DNSワイルドカードとこれを『組み合わせて』使うことは可能かと思います。(その場合DNS登録や設定変更の手間が省けるというメリットがありますね)
で負荷分散の話ですが、
fc2の例は負荷分散というよりは単に管理的な問題でURLレベルでユーザごとにサーバを分けてるだけ(おそらく1サーバごとに収容できるユーザ数が決まっているのだと思いますが)という気がします。おおざっぱなユーザ数という観点では負荷分散できているのかもしれませんが、例えば、アクセス数が極端に多いブログユーザが一人でもそのサーバに収容されていた場合、そのサーバの負荷はもうどうしようもありません。厳密な意味では負荷分散ではないです。
じゃあfc2は負荷分散できていないのか?ということではなくて、内部で負荷分散の仕組みは存在しているのではないかと思います。例えば以下。
大規模サイトでは珍しいことではと思いますし。seesar.jpも似たようなことをやってるのかもしれないと思います。
質問の内容からすると、URLとDNSの部分から疑問を持たれたようですね。URLとDNSももちろん関係あるのですが、どちらかというとWebサーバやバックエンド技術のウェイトが大きいと思いますのでこっちの点から調べてみると良いと思います。
どうもありがとうございます。
確かにfc2方式だと、1人が膨大なアクセスをたたき出すと負荷分散にならないですね・・・。
ロードバランスについてはお金がかかりそうであまり知ろうとしていませんでしたが、
wikipediaでの実例はとても参考になりました。
これなら、お金をかけずに分散できそうですね。
負荷分散で使われている方法として、ロードバランサーやラウンドロビンというものがあります。
ロードバランサーはアクセスを専用の装置によって複数用意された各サーバーに振り分けます。
http://www.atmarkit.co.jp/fnetwork/rensai/lb01/lb01.html
ラウンドロビンはDNSラウンドロビンと呼ばれるものが有名で、
同一のデータが記録された複数のサーバーを用意し、すべてのサーバーに同じドメインを割り当てます。
SeasaaのとあるブログのドメインのIPを調べてみたところ、
59.106.28.145, 59.106.28.139, 59.106.28.132, 59.106.28.144
.106.28.131, 59.106.28.143, 59.106.28.138, 59.106.28.146
の8つのIPアドレスが割り当てられていましたので、
推測ですが、SeasaaブログはDNSラウンドロビンではないかと思われます。
どうもありがとうございます。
ロードバランサは飛び上がるほど高いですねぇ・・・。
seesaa、8つもIPがあるとは・・・。
seesaaは静的にhtmlを再構築で吐き出すので、
その都度8つのサーバに反映させることで
ラウンドロビンを実現している、ということですね。
seesaaの規模でもDNSラウンドロビンでなんとかしてるとは驚きです。
静的なコンテンツなら、即座に全サーバに反映する仕組みができれば、DNSラウンドロビンでがんばれますね。
勉強になりました。
どうもありがとうございます。
「○○.db1.seesaa.jp」や「○○.db2.seesaa.jp」を
「○○.seesaa.jp」に見立てることができるとは・・・。
この可能性は高いですねぇ。
この手法はロードバランサとかじゃなくて出来るなら、すごく便利そうですね。
ちょっと調べてみますね。