ちょと前の情報ですが、はてなとmixiの勉強会を聞いてみました。興味を持った話を数点。
- [はてな]本番化のスタイル
- [mixi]mysqlの--skip-grant-tables
- [mixi]squidのsibling
- [mixi]画像の吐き方
- [mixi]テーブルは
MyISAMInnoDBが多い
どうやら管理サーバにこのファイルを本番化しろ!と指定すると、それがキューに入って各アプリケーションサーバが自動でcvs update(?)してapacheの再起動までするとかなんとか。これカッコイイな…。以前ある友人が管理するサービスでDNSの設定とか、サーバの再起動とかをその人が作ったWeb GUIから操作していて、これもカッコイイなーとか見てたんだけど、管理する手間を省くって事に関してなんか興味あるし、腕の見せ所だったりするんじゃないかと思ったりする。前にも書いたけど、ちょっとしたことだけどめんどいからいつもやっちゃってるものを改善していくのは大切ですよね。まぁ必要に迫られてやらざるをえないときもありますが…。
mixiではmysqlへの接続を、ローカルなので--skip-grant-tablesを使ってやっているらしい。どうやら、若干ですが接続が早いのではないかという話。セキュリティ的にどうかというと若干弱いっちゃ弱い(ローカルだからいいっちゃいいけど…)。
※自分はこのsiblingを知らなくて、音で聞いたので探すのに若干時間を要しました(笑)
なるほど、squidに兄弟を作ってキャッシュ効率を高くしているらしい。自分がキャッシュをもっていなかったら兄弟に問い合わせるっぽいです。
ここがよく聞きとれなくて実際にどういう構成かわからないんですが、聞きかじりだと、foo.plからmysqlに画像をどこのサーバに置けばいいか問い合わせてそこに格納し、リクエストが来たらhtmlでうまいこと画像を出すということなのだが、htmlで画像をうまいこと出す部分がよく聞きとれませんでした…。ここ気になる…。画像がどこに格納されているかはmysqlが知っているということなので、mysqlに問い合わせをしないといけないと思うんだけどなー。
Read/Writeが多いので、MyISAMにしているとのこと。ふむ。
上記以外はなんとなく想像できる内容でした。memcachedも使ってるらしいし。
あと聞きたいのは(←ずうずうしい…)、アプリケーションサーバとかリバースプロキシサーバとかのapacheなどのMaxClientsをどのくらいにしているのかですね。カリカリにチューニングしているのか、ハイパフォーマンスMySQLでJeremyさんがYahoo! comのことを書いてた様に1台当り MaxClients 30 ぐらいしか立ち上げてないのか。
悶々。

もごもごよく聞き取れないのは僕が喋ってるところですよね(汗) > 画像の吐きかた
ここは単純に、画像を表示する時URIの画像ファイルを持っているホスト名をMySQLが返してくれるイメージっす。特定のアルゴリズムで格納先・参照先を振り分ける方法の方が配信時のコストは低いんですが、サーバ間の画像移動とかのメンテナンス性を考えてMySQLに場所を管理させる方法をとっています。
ただ汎用性が低いので、次に作るときは増設・移動を考慮したアルゴリズム式(?)で振り分ける格好で作ると思います。
↑いけね、名無しでpostしてもうた。
なるほど。解説ありがとうございます!多謝。
proxyではあるURIを受けとって、内部のmod_perlのサーバにrewriteして、プログラムに渡す
↓
そのプログラム内でURIを元にmysqlに接続してその画像を格納しているサーバを取得する
↓
そのサーバへ画像を問い合わせる
みたいな感じですかね。今mixiの画像URIをみたら
/photo/member/97/84/59784_1627183561.jpg
こんなんになってたので、97とか84とかを元にその画像がどこのサーバにあるかをmysqlに問い合わせてる感じか。