« みんなMySQLとかPerlとかがが好きだなあ | トップページ | 大人になったのか、lispが面白く思えて来た »

2006年9月24日 (日)

 みんな負荷分散が好きだなあ

_1滅多に更新していなくてぜんぜんPVがこないこのへんてこなブログにいきなりポコーンとグラフが上がったので、不思議に思ってみて見ると、瞬間的にはてなブックマークのホットエントリーになったらしいのですが、みんな意外とオープンソースマガジンは読んでないみたいで。僕もそうでしたが。

でもオープンソースマガジンは、なんていうか、名前とは裏腹に(?)、古き良きホビイスト文化が残っているようなゆるいテイストがしてけっこう面白いなと思いました。名前がもっと「オープンソース野郎マガジン」とか「爆速コーディングマガジン」だったらもっと早く読んでたのになと思ったりしました。内容はそんな内容です。

ハード工作の記事もかなり面白くて、ジャイロセンサーを使ってUSB機器を自作するとか、往年の月刊I/Oみたいなホビイストコンピューティングのごった煮っぽいノリがたまりません。

負荷分散といえば、うちのスタッフのkzk君が参加しているsedueという国産検索エンジンでも、負荷分散をどうやっているのかというのがかなりホットな話題になっていました。

sedueではインデックスを圧縮することによってほとんどをヒープに持たせ、高速化するのだそうですが、たとえば単にデータベースを速くしたいだけなら、ヒープに32GBくらい載せたサーバーを用意すればたいていのwebサービスで使うデータはヒープに乗ってしまうのではないかと思います。とはいえ、ヒープに乗っていたとしても、今度はヒープ内を検索するアルゴリズムが問題になるので、データサイズが少ないに越したことはないですね。

仮にヒープを32GBくらい用意するとしても、高々200〜300万くらいのマシンですから、絶望的にトラフィックがやってくるようなシロモノに関しては却って安い買い物になるかもしれません。

たまにスタッフと時間を忘れて朝まで話をするのですが、たいていの場合は負荷分散の話になります。

僕らが負荷分散を考える時は、だいたい以下の戦術を組み合わせます。

 ■Webサーバに逃がす
  データベースアクセスレイヤーにコンテンツ
  寄りのキャッシュ機構を入れて高速化。
  memcachedを使う方法もあるが、僕はJava
  でメモリ空間を単に共有する方が好き。
  Webサーバのヒープに乗らない場合はWebサ
   ーバのディスクにキャッシュし、それでもヒット
   しなかったらデータベースサーバからデータ
   を引き出してくる

■データベースサーバをクラスタ化
  お金さえあればクラスタ化はあんまり手間が
  かからないのでコストバランスを見て利用する

■httpdを直接書く
 今は滅多にしませんが、オンラインゲームな
 ど特殊な処理が要求されるものに関しては
 httpdそのものをC++で書く場合もありまし
 た。一台で瞬間8000人の接続を行うような
 ゲームの場合はhttpではあるけれど単機能
 なリクエストしか捌かないサーバを作ることは
 あります。会社をやめてからはJavaで作るよ
 うになってしまいました。軟弱化したのか?

■データアクセスそのものを減らすようにコンテンツの仕様を変更する
 意外と上記三つの方法よりも最も楽で最も効
 果的なのがこの方法です。たいていの場合は
 コンテンツを変えれば意外とすんなりヒープに
 データが乗って軽々動くようになります。とはい
 っても携帯コンテンツみたいに、全て動的ペー
 ジでクッキーもセッションも使えないと毎回DB
 アクセスは発生してしまいますが、これは特殊
 なキャッシュとして処理してなるべくオンメモり
 で実行します。でも、Webサーバのヒープの検
 索に時間を掛けすぎてWebサーバのCPUを浪
 費したら本末転倒です。バランスが難しいとこ
 ろです。1万人以下ならともかく、100万人以
 上のサイトになるとWebサーバのヒープに全て
 の会員情報を持たせたり検索したりするのは絶
 望的です。ここらへんはノウハウですね。


しかし一番の悩みは、苦労して負荷分散すると、必要なサーバーの台数が減り、お客様からいただける手間賃がトータルでむしろ減ってしまうことです。

昔はステップ数で、今はサーバの台数ということなのかもしれませんが、うまくやればやるほど資源を効率的に使うことになるので、結果的にコストが下がってしまうのですよね。

意外と大企業のクラスタリングが必要以上に大袈裟に見えるのは、そのあたりの事情もほんの少しくらいはあるのかもしれません。

全く関係ない話ですが、とある政府系機関のプログラムを書いていた友人曰く、「あまりにも早く処理が終了すると労働組合に怒られるので、メインフレームのシステムをPCベースのシステムに移植したらパフォーマンスが100倍くらいになってしまって、仕方がないので"処理中"と表示して100倍のウェイトを入れた」という笑えない話があります。

労働効率を上げるためにコンピュータシステムを刷新するのに、効率があがったら怒られるなんて、恐ろしい話ですね。本当かどうかはわかりませんが。

|

« みんなMySQLとかPerlとかがが好きだなあ | トップページ | 大人になったのか、lispが面白く思えて来た »

トラックバック

この記事のトラックバックURL:
http://app.f.cocolog-nifty.com/t/trackback/32098/3557563

この記事へのトラックバック一覧です:  みんな負荷分散が好きだなあ:

« みんなMySQLとかPerlとかがが好きだなあ | トップページ | 大人になったのか、lispが面白く思えて来た »