Hatena::ブログ(Diary)

naoyaのはてなダイアリー

February 09, 2006

サーバーを増やせばいいんじゃない、サーバーを増やすだけで解決できるように努力するのだ

ライブドアの技術の話について書いた、その記事のコメント欄。最初は感情的な批判などがあって話題とは別の方向で炎上し気味だったんでうーんと思ってたんですが、後半になってきて少し面白い議論が出てきました。

こんな反応があった。

アクセス数が増加している段階で、ApachやAppServerのスレッド数をいじろうが、ヒープサイズを増やそうが、DBのパラメータをいじろうが、はてまたアプリを書き直そうが、性能要求にミートするには相当のワークが発生しますし、どう最適化、チューニングしても追いつきません。そのようなチューニングにお金をかけるならサーバーを追加したほうが安く上がるのではないかと思うのですが、如何でしょう?

naoyaのはてなダイアリー - ライブドアの技術の話

それに対する僕の返信は、

確かに何千万もするファイルサーバーとか、ロードバランサーとかで問題が解決できる機会っていうのは存在すると思います。なので ”負荷が高ければ、結局サーバーを単純に増やすしかないのではないか?” という点がびったりはまる局面も確かにあります。

でも、実際にはサーバーを増やせば解決できる、というケースは希で、むしろそういうケースは幸運な方です。「サーバーを追加すればいいていうのもなんというか幸せな誤解だなあ」というのはそういう局面を経験している人の一言じゃないかなと思います。

サーバーを追加するだけではどうにもならない、ではどうするか、というのを具体的に経験として語っている良い資料に以下の物があります。

LiveJournal という巨大なシステムを運用する中で、サーバー群がどのように成長していって、どういう局面でどういう技術が必要だったかが詳細に記されています。はてなやライブドアなんかはこの LiveJournal がやってる取り組みと非常によく似ていて、そこにはそれなりの技術が必要という風に認識しています。

naoyaのはてなダイアリー - ライブドアの技術の話

という主張なのだけど、「でも、実際にはサーバーを増やせば解決できる、というケースは希で、むしろそういうケースは幸運な方です。」という所をどうしたらうまく説明できるかな、と考えました。

それで思ったのが、実際の運用の中ではサーバーを増やすことで問題を解決するのではなく、"いかに「サーバーを増やすだけで問題を解決できる」状況を作るか" という所に労力を使うのだ、ということを理解してもらえばいいのかなということ。

サーバーを増やすだけで問題が解決できる状況を作ることができたら、安価なハードウェアや優れた無料のオープンソースソフトウェアがあるので、それを追加すればいい。そういう目標で運用するのがチープレボリューションが起こった今、僕らがやっていること。さらに追加するのにもより少ない台数であったほうが、コスト的にも故障発生確率的にも、幸せであると。そのためにマシン一台あたりで処理できる限界を引き上げることにも労力を使う。

実際にはウェブサーバーは比較的楽に水平展開できるのでそれほど問題にはなりません。問題はデータベースで、ここをどうやってマシンの追加だけでリソースを拡大できるか、というところにみんな頭を使っています。Oracle の RAC なんかはマシンを追加するだけでリソースが追加できるということをウリにしていますが、この技術に需要があるのは、そんな背景があるからじゃないかなと思います。

プロジェクトが火の車っていうときに、じゃあ人を足せば問題が解決できるかといったらんなこたない、(むしろ人が少ない方が余計な干渉がなくてやりやすかったりする)、人を増やすだけで問題が解決できるような体制をしくことこそが管理術です。人を増やせば解決する、と思考が止まってしまう、つまりは人が足りないといって言い訳してしまうことを、僕は最近「人が足りない症候群」と呼んでいます。

サーバーの増設の話は、そのプロジェクトが火の車の比喩とよく似ています。悲鳴をあげているサーバーの代理人としてキャッシュの仕組みを導入したりですとか。なので、サーバーを増やせば...というのは「サーバーが足りない症候群」と言うこともできるかなと、そんなことを思いました。

追記

ブックマークのコメント欄でこういうコメントをいただいた。

2006年02月09日 kusigahama 『このことを多くの人が納得する→Googleの株価が上がる?』

これはとても良い指摘だと思います。(株価が上がるかどうかは別として(笑))

Google の技術がなぜすごいか、というのはこの記事の話とすごく関係しています。安価なハードウェアを大量に使って世界中からのアクセスにも動じないシステムが構築できている裏には、サーバーを追加するだけで問題を解決できる技術を確立することができたからで、世界中で Google 以外にそれを成し遂げた企業がほとんどないことから、それがいかに難しいことかがよくわかると思います。

Google のサーバーがどんなものかというのは、拙文ですが、以下の記事を参考にしていただければと思います。

このサーバーはかなり昔のものなので、今は全然違うものになっているでしょう。

この記事のスライドの中で、ちょっとだけその姿を垣間見ることができます。

ダイ@bayashi.netダイ@bayashi.net 2006/02/10 04:07 スポーツで、強いチームを作ろうとして、「良い選手をかき集める」か、誰が入ってきてもそこそこの選手にしてしまう「育てる技術を磨く」か、という話に似ていますね。
中学、高校スポーツで、4連覇がいかに大変なことか。

yukichi99yukichi99 2006/02/10 05:08 > 世界中で Google 以外にそれを成し遂げた企業がほとんどないことから、それがいかに難しいことかがよくわかると思います。

うーん、Googleの話題が表に出ているだけであって、そう断言するのは早いんじゃないのかなぁ。Yahoo!.comやYahoo!J、Amazonのアクセスなんて、実際、はてなやLivedoorの数倍はあると思うけど、それでも、ほとんど落ちないし(正月にJが数時間落ちましたけど)。

このあたりの件、ちょっとなおやさんの勇み足が多い気がします。もう少し、説得できる材料が出来てから論じるべきではないかと。気持ちはわかるんですけど。

TigerTiger 2006/02/10 08:03 PCでもマルチプロセッサという手法は昔っからあったけれど、それを活かせるOSやソフトの目処が付いて、初めて、実用になり始めたのと同じことですね。

ココログなんて、サーバを増やしても、増やしても、追いつかなかったり。ネックは別のところにあるからでしょう A^^;;

技術って、ざくっと分類する方法に、表に出てこない土台を支える裏方のものと、派手にパフォーマンスするスター技術とに分けると云うことが出来ますが、土台を支える技術の方がずっと広くて奥が深くて大変だったり。だから、それをシステム的に網羅できる力を作り上げ維持するというのは、すごく実はコスト(単純な費用ではなく)の掛かることだと思います。

スター技術は、そういう土台に載っているものがほとんどで、スタンドアローンで確立しているものなんて、最近のものではあり得ないと云っても良いですね。だから、人や企業を買い取った方が早かったりするわけで。

楽天などがライブドアの技術者、カモンと云っているのは、それがよく分かっているからでしょう。

むしむし 2006/02/10 09:01 ライブドアは2月9日、ポータルサイトlivedoor内の気象・防災情報サイト「livedoor 天気情報」にて、気象情報や防災情報など、RSS 2.0に対応した約2000種類のRSSフィードの配信と、全国142地点の気象情報をWebサービスで提供する「Weather Hacks」を開始した。


おもしろいのか?これからが注目だな
http://weather.livedoor.com/weather_hacks/

mrmtmrmt 2006/02/10 09:58 つまり、いかにscalableにするか、ってことですよね。
まさにそこがキモで、全く同感です。
このへんは実際にやってる/やった人でないとピンとこないのかも。

YamatoYamato 2006/02/11 03:10 ライブドアの件ではヒートアップしてすいませんでした。
ちょっと論点がずれてしまってました。

サーバーを2台にしたら処理速度が半分になったなんて
冗談も良く聞きます。 現場じゃ冗談どころじゃありませんが

私は自転車に例えることが多いです。
2人乗り自転車だからと言って2倍人を運べる訳じゃないと
バランスが取り辛くなって1人ずつ言った方が逆に早かったりするあたり

更新が多いと辛いです。処理分散より同期のオーバーヘッドばかり増えちゃうので
大量のインデックスを更新し続けるGoogleがあれほど安定運用しているのは流石だと思います。

ところで、インターネット自体が究極の並列処理だと思うのですがいかがでしょう?

OSXOSX 2006/02/11 10:13 Tigerさん
> 楽天などがライブドアの技術者、カモンと云っているのは、それがよく分かっているからでしょう。
という事実はないそうです。ライブドア側からの情報かもしれません。

mochamocha 2006/02/12 10:30 シミュレーション不足と、トータル知識(認識)不足が原因ですよ。
シミュレーションで問題を予見していれば次の手を打ちやすいし、
トータル知識があればボトルネックを改善しやすい。

最近の技術者は上記が欠けているから負荷問題が発生したときに
何も出来ない人ばかり。最新の技術は好むが、原理まで探ろうとする
人はいない。だからサーバー増設に走る。でも根本は解決されない
からまた同じ問題が発生する。

自分の知識の殻にこもっている人も多い。技術交流はあってもそれは
最新技術ばかり。以前XSを使ってなかった某社さんは実感されていると
思いますけど・・・。

JAVAしか出来ない技術者が増えているぐらいですから、ますますその
傾向は強くなるでしょう(単一言語知識のみの問題)。サーバーベンダーは
ますます儲かる事になりそうですね。

YamatoYamato 2006/02/13 13:31 こちらは逆にJAVA(開発)出来る人が居なくてサーバー構築の技術者ばかりです。
どちらも出来ると素敵ですね。