RDBの負荷対策について聞いてみた
某iDCのNOCで働いている友人に聞いてみた
勝手に要約しているので、オレフィルターで話がずれているかも(笑)
会話
オレ「MySQLのマスター/スレーブ方法のレプリケーションって、負荷対策の目的ではなくて、可用性高める目的で使うのが普通みたいだな…。参照系の負荷分散はできるかもしれないけど、更新系の処理は、マスターにしか投げれないから」
オレ「mixiとか、ログイン処理に限っての話かもしれないけどMySQL一台+レプリケーションで一秒間に10000の更新クエリをさばいているらしいぞ…いちょ、tokyo tyrantとかゆー高速KVSをキャッシュとしてワンクッションはさんでいるらしいけど….RDBMSって技術的に見てそんなにスケールアウト難しいの?」
相手「更新系の負荷分散はクラスタリング組むしかないかもしれないなー。DBは基本的に参照系の負荷分散が主なイメージだ。でも、方法がないわけではない.
監視している環境見たが、更新系の負荷分散はされていなかった.50ずつ、50ずつでテーブルを分けておいているんだはず」
オレ「50ずつ50ずつって…
アプリケーションサーバーが、マスターのDBを指定して、更新系の処理は投げているってこと?
(更新系はサーバー層ではなにもしない、プログラマが判断)」
相手「更新系をAPサーバーが指定して投げてる。」
オレ「(あっているってことかな?テーブルの結合とかどうやるんだろ?やっぱ有力なのはクラスタか…)そっか、テーブル分ければいけるね.てかパーティションっていう技術もあるのか!じゃあ、全然負荷対策できるな.KVSとかがやたらと注目されていから、RDBMSって大規模の更新系に限界があるのかなーとかふと思ってしまったw」
相手「Oracleがいるのにそんなイメージをもっちゃいかんぞwww」