ぢろーらものおもちゃ箱:引っ越し後

写真付きで日記や趣味を書くならgooブログ

データベースの負荷分散

2010-08-12 23:47:31 | IT(Web)

こちらも会社出ていた話題ですが、今日は「大規模なシステムでデータベース(DBサーバ)を負荷分散するにはどうしたいいのか?」という話がでていました。「負荷分散環境でのWebアプリケーション開発」でも触れましたが、Webサーバの負荷分散のほうは負荷分散装置での負荷分散(スケールアウト)が一般的ですが、DBサーバの場合には必ずしもそうではないですしね。特に更新が多い場合には気をつけないといけませんし(参考サイト:http://japan.zdnet.com/sp/feature/06sp0130/story/0,2000066437,20234267-2,00.htm )。

データベースの場合、関連するのはDBそのももの作りやクラスタ用のソフト、ストレージ等であり、主にネットワーク機器を扱っているぢろーらものところにはこれまで話はほとんどありませんでした。まあ、せいぜいあってもL2レベルの話か・・・。

では、こちらも少し調べてみることにするかな・・・。

http://thinkit.co.jp/cert/article/0610/1/6/2.htm などにもあるように、複数のDBサーバでデータの同期がとれるのであれば、参照系に関しては負荷分散装置(ロードバランサ)を使う方法がよいようですね。もちろん、参照系と更新系とで担当するサーバをわける、というのでも負荷分散になるかと思います。

DBサーバそのものを増やさずに、Memcachedというソフトで「DB用のキャッシュサーバ」のようなものを構築する方法もあります。たとえばhttp://www.atmarkit.co.jp/fcoding/articles/rorcgm/04/rorcgm04a.html などに説明ありです。なるほど、これであれば読み出しは速くなりそうですね。http://gihyo.jp/dev/serial/01/various-nosql/0002 にもあるように「揮発性」なので、データが消えても問題ない場面に使用されます。

確かTwitterのような大規模なシステムでも、WebサーバとDBサーバの間にMemcachedをインストールしたサーバを数台置き、DBサーバ自体はSunのおばけサーバー1台(おそらく数千万円)で運用している、という話を聞きます。 

あと、こちらはサーバ内の話ですが、http://thinkit.co.jp/cert/article/0610/1/6/2.htm にはtmpfs(メモリ上のファイルシステム)を使用する方法なども掲載されています。実際にmemcachedとtmpfsとのパフォーマンス比較をされた方もいらっしゃるようです(http://blog.asial.co.jp/220 )。

更新系の場合には負荷分散装置を使って、というのは難しいということは上記のとおりです。やっぱりそうすると、クラスタ用のソフトなどが必要になるのかな・・・。よく聞くのがOracleのRACですね。複数サーバがある場合に更新処理の一貫性を保つための処理を、独自の方法でメモリ上で行なっています。http://www.atmarkit.co.jp/fdb/rensai/basics_rdb/07/basicrdb07_01.html

あとはデータベースのテーブルを分割して、マスターになるサーバをわけるなどの方法があります。http://itpro.nikkeibp.co.jp/article/NEWS/20060330/233820/ ではmixiの例、http://enterprisezine.jp/article/detail/25 ではモバオク/モバゲーの例が取り上げられています。

そのほか、もっとシンプルな方法としては、http://thinkit.co.jp/free/tech/10/4/1.html はハードディスクをわけることによるI/O負荷分散です。管理情報などのテーブルスペース(DBやインデックスなどを置く場所)と、サービスとして使うDBのテーブルスペースを別のディスクに置く、というものです。

なるほど、けっこう工夫されているわけですね。Webサーバの負荷分散よりもいろいろと複雑です。

そういえば、mixiを利用されている方ならご存知かと思いますが、システム障害で2日間ほどつながりにくい状態にありました。http://slashdot.jp/it/10/08/12/0540221.shtml http://www.publickey1.jp/blog/10/miximemcached.htmlなどにもあるとおり、memcachedの問題なのですね。そっか、だから「保存されている日記などのデータには影響がない」というのもそのとおりなのですね。詳細はわかりませんが、ここまでわかっているのであればある程度信憑性はありますね。


この記事が気に入りましたら、また、お役に立ちましたら、以下のアイコンをクリックしていただけると嬉しいです(^^)

ブログランキング・にほんブログ村へ