DBマガジン6月号のDeNAの記事

とにかく安いサーバーをたくさん並べて並べて〜
ってのが、大規模Webサイトのやり方だっていうのは知っていたものの。


んじゃ、それ具体的にどうやってやるんだろう?って。
いつもはなんとなく斜め読みしてしまう雑誌を、
風呂場でちゃんと読んでみた。


モバゲータウンとかモバオクとかを開発・運用してる
DeNAって会社の人(id:tokiharu)が書いている記事。


コレ、すごいガツンときたので、概要とか感想とか。

更新系と参照系でデータベースサーバー(筐体そのもの)を分ける

更新系・・・画面から入力された値などをデータベースにつっこむ
参照系・・・画面から入力された値などでデータベースから情報をとってくる


フツウに考えて(フツウにインターネットを使っていて)、参照系のアクセスが断然多い。


ちゅうことで、MySQLレプリケーション(複製)機能を利用して、
更新系のインスタンス1つに対して、それのコピーとして参照系のインスタンスを複数用意する。


それによって、たくさんの参照系のアクセスがきても、高速にさばく、と。
(完全に更新系と参照系のデータに同期が取れているわけではないのに注意が必要)


でもって、更新系もいずれ1台では負荷が高くなってしまうので、
ゆくゆくは機能とか情報単位(会員情報とか、債権情報とか)で、
マスタを分割できるような設計にしておく(=JOINして一発でとってくるようなSQL書いちゃダメ)


更に、割り算したあまりとかうまく使って、マスターを分割したり。
(XXIDを3で割って余りが0だったら→hoge1サーバー、余りが1だったらhoge2サーバー、、とかそんなノリ)


そうやって細かくわけていくうちに、容量は数ギガっていう小さなものになるので、
そしたら、参照系のテーブルデータ(インデックスとか全部含めて)を全てメモリ上にのっけちまえ!と。
(ディスクI/Oが発生しないので、そりゃ早いわっちゅう話)

負荷分散

んじゃ、どうやって沢山ならべたサーバーにアクセスを振り分けるのよ?っていう話。


これにはDNSラウンドロビンっていうのを使う。
言葉じりは、なんかややこしそうだが、そんなことはなく、
問い合わせのたびに、沢山並んでるサーバーの中から一台を教えてくれるもの。
そんなこんなで均等に沢山並んでるサーバーにリクエストが割り振られる。


でもね、それだと、しょっぱいへっぽこなサーバーと、いかついハイスペックサーバーが
同じ感じに割り振られてしまうので、へっぽこサーバーにきたリクエストに対するレスポンスが
遅くなってしまう可能性があります。


それだけじゃなくって、逝っちゃったサーバー(ping投げても帰ってこないとか)にも
フツウにリクエストが行ってしまいます、と。


それを解決してくれるのが、MyDNSっていうオープンソースのプロダクト。
こいつを使うと、上で書いたDNSラウンドロビンの問題点が解決できる。


MyDNSは、データベースにテーブルを持って、設定値を保持することで、
それを参照しながら動くソフトウエア。
沢山並んだサーバー1台1台に対して1レコードっていう感じ。
SQL文だけでメンテできるのがウリで、サーバー再起動とかいらない。


MyDNS用テーブルのカラムに aux っていうのがあって、その設定によって優先度をわけている。
へっぽこサーバーとハイスペックサーバーの割合が設定できたり、
逝っちゃったサーバーにはリクエストしないようにしたり(auxカラムを0に設定)


だいたい、どこも、ヘルスチェックとかいって、数分に1回くらい
ping投げたり、シェルからSQL叩いてSELECT文発行したりすると思うけど、
そこで帰ってこないサーバーがいたら、auxカラムを0にUPDATEしてあげればいい。


運用的には、MyDNSを使うことで、『SELECT COUNT(*) FROM MyDNSのテーブル WHERE aux = 0』
とかやると何百台とか並んだサーバーの中で落ちてるサーバーがどれか?とか見れちゃったりとか。

その他

MySQL使った全文検索の話とか、リクエストを受け付ける際の考え方とか
非常に参考になることが書いてあります。(詳しくは買って読んで・・・)


アプリ屋として、面白そうだなと思ったのが、
アプリはperlで書いていて、ディスパッチは独自のフレームワークを使っている。
詳しくは書いてないけど、規約通りに動くようなフレームワークっぽい。
URLから、どのクラスのどのメソッドが実行されるか自動的に決まる〜みたいな。


んでもって、逆にSQLはソースにべた書き。
その方が運用的にやりやすい。既存機能の理解も早いし、機動性が上がる。
個人的にも、設定ファイルみてソースみてってあっちゃこっちゃ行くのはしんどいなと。。


つーか、記事自体は図入りでかなりわかりやすので、興味を持った人は、
是非購入することをお奨めします。