サーバーを増やせばいいんじゃない、サーバーを増やすだけで解決できるように努力するのだ
ライブドアの技術の話について書いた、その記事のコメント欄。最初は感情的な批判などがあって話題とは別の方向で炎上し気味だったんでうーんと思ってたんですが、後半になってきて少し面白い議論が出てきました。
こんな反応があった。
アクセス数が増加している段階で、ApachやAppServerのスレッド数をいじろうが、ヒープサイズを増やそうが、DBのパラメータをいじろうが、はてまたアプリを書き直そうが、性能要求にミートするには相当のワークが発生しますし、どう最適化、チューニングしても追いつきません。そのようなチューニングにお金をかけるならサーバーを追加したほうが安く上がるのではないかと思うのですが、如何でしょう?
それに対する僕の返信は、
確かに何千万もするファイルサーバーとか、ロードバランサーとかで問題が解決できる機会っていうのは存在すると思います。なので ”負荷が高ければ、結局サーバーを単純に増やすしかないのではないか?” という点がびったりはまる局面も確かにあります。
でも、実際にはサーバーを増やせば解決できる、というケースは希で、むしろそういうケースは幸運な方です。「サーバーを追加すればいいていうのもなんというか幸せな誤解だなあ」というのはそういう局面を経験している人の一言じゃないかなと思います。
サーバーを追加するだけではどうにもならない、ではどうするか、というのを具体的に経験として語っている良い資料に以下の物があります。
LiveJournal という巨大なシステムを運用する中で、サーバー群がどのように成長していって、どういう局面でどういう技術が必要だったかが詳細に記されています。はてなやライブドアなんかはこの LiveJournal がやってる取り組みと非常によく似ていて、そこにはそれなりの技術が必要という風に認識しています。
という主張なのだけど、「でも、実際にはサーバーを増やせば解決できる、というケースは希で、むしろそういうケースは幸運な方です。」という所をどうしたらうまく説明できるかな、と考えました。
それで思ったのが、実際の運用の中ではサーバーを増やすことで問題を解決するのではなく、"いかに「サーバーを増やすだけで問題を解決できる」状況を作るか" という所に労力を使うのだ、ということを理解してもらえばいいのかなということ。
サーバーを増やすだけで問題が解決できる状況を作ることができたら、安価なハードウェアや優れた無料のオープンソースソフトウェアがあるので、それを追加すればいい。そういう目標で運用するのがチープレボリューションが起こった今、僕らがやっていること。さらに追加するのにもより少ない台数であったほうが、コスト的にも故障発生確率的にも、幸せであると。そのためにマシン一台あたりで処理できる限界を引き上げることにも労力を使う。
実際にはウェブサーバーは比較的楽に水平展開できるのでそれほど問題にはなりません。問題はデータベースで、ここをどうやってマシンの追加だけでリソースを拡大できるか、というところにみんな頭を使っています。Oracle の RAC なんかはマシンを追加するだけでリソースが追加できるということをウリにしていますが、この技術に需要があるのは、そんな背景があるからじゃないかなと思います。
プロジェクトが火の車っていうときに、じゃあ人を足せば問題が解決できるかといったらんなこたない、(むしろ人が少ない方が余計な干渉がなくてやりやすかったりする)、人を増やすだけで問題が解決できるような体制をしくことこそが管理術です。人を増やせば解決する、と思考が止まってしまう、つまりは人が足りないといって言い訳してしまうことを、僕は最近「人が足りない症候群」と呼んでいます。
サーバーの増設の話は、そのプロジェクトが火の車の比喩とよく似ています。悲鳴をあげているサーバーの代理人としてキャッシュの仕組みを導入したりですとか。なので、サーバーを増やせば...というのは「サーバーが足りない症候群」と言うこともできるかなと、そんなことを思いました。
追記
ブックマークのコメント欄でこういうコメントをいただいた。
2006年02月09日 kusigahama 『このことを多くの人が納得する→Googleの株価が上がる?』
これはとても良い指摘だと思います。(株価が上がるかどうかは別として(笑))
Google の技術がなぜすごいか、というのはこの記事の話とすごく関係しています。安価なハードウェアを大量に使って世界中からのアクセスにも動じないシステムが構築できている裏には、サーバーを追加するだけで問題を解決できる技術を確立することができたからで、世界中で Google 以外にそれを成し遂げた企業がほとんどないことから、それがいかに難しいことかがよくわかると思います。
Google のサーバーがどんなものかというのは、拙文ですが、以下の記事を参考にしていただければと思います。
このサーバーはかなり昔のものなので、今は全然違うものになっているでしょう。
この記事のスライドの中で、ちょっとだけその姿を垣間見ることができます。