はてな x DeNA合同企画 Mobage 運用技術勉強会に行ってきた
はてなの方からメールにて招待いただき(ありがとうございます!)、折角だからと体調悪い上に台風近づいてるにも関わらず昨日行って来ました。
口外するな、と書かれていたので、相当やばい情報も話してくれるのか、とか、「活発に」リクルーターが話しかけにきてくれたりするのか、とか、妙な妄想たっぷりで臨んだのですが、その辺は見事に裏切られ、発表内容は「Mobageを支える技術」にほぼ含まれていて、リクルートエージェントについては、基本裏方にいるだけで、最後にアンケート書くだけで終わってしまいました。なんか残念。
以下、発表内容のメモ(他の方の方がより詳しいかも。。。)
Mobage 運用技術 Web編
- speaker: 樋口さん
- Mobageのサーバ群構成について
- Webサーバ機の資源管理について
- FastCGIワーカー数の管理
- デバッガを使った状況モニタリング
- 障害調査の手法
- メモリ利用効率化のための取り組み
- 使用するPerlモジュールがなるべく独立しているようなサーバグループに分ける
- 他に
- Perlモジュールプリロード
- OSページキャッシュ利用の効率化
- 昔: forkされたワーカープロセスがPerlをexecしてモジュールを読む
- 今: アプリのモジュールを読み込んだあとにワーカープロセスをforkしリクエスト処理
- 今の方式へは時間をかけて慎重に移行
- forkのタイミングでsocket等を開いたままだと問題を起こす
- 処理の実行順序が変わることによる影響もあった
- 移行後、メモリ使用量が半分になった
- アプリが吐くログファイルがキャッシュされてしまう
- メモリ足りないと1日1回のログ改修のタイミングでswapする
- posix_fadvise(POSIX_FADV_DONTNEED)
Mobage 運用技術 DB編
- speaker: 岩永さん(りーおさん)
- Many Servers
- スケールアウト:レプリケーション
- スレーブへの情報の遅延が起こりうるので、クリティカルな情報へのselectはmasterへ
- シャーディング
- 1つのデータベースに入りきらないデータを分散して登録
- 負荷分散
- joinするSQLは書けない
- DeNAはjoinなるべくかかない
- レコード単位でのシャーディング
- クライアント側でどのレコードがどこにあるかを保持する必要がある
- 2で割るとか4で割るとかの方法は段々数が増えるからよくない
- memcachedやアプリのメモリに、そのマッピングテーブルを保持する
- 1つのデータベースに入りきらないデータを分散して登録
- auto increment
- レコード単位でのシャーディングとなると問題になる
- ソレ用にMyISAMのDBを用意して、そこから発番
- DeNAレベルで問題になってない
- マルチインスタンス
- mysqldを1マシンに複数上げる
- マシン上に仮想IPを用意して、my.cnfのbind-addressをそれぞれ指定
- バックアップ
- 通常のスレーブではあるが、リクエストは来ない
- アクティブスタンバイ
- バックアップのダンプを流し込めばすぐにslaveができる
- 通常のスレーブではあるが、リクエストは来ない
- MHA
- マスターが落ちた時にバックアップを昇格させる
- Big Data
- Purge
- 古いデータを消す
- データが増えると劣化する
- 性能を維持するには、レコード数をある程度にする
- 5.1時代はDELETEするしかない
- でないと運用に支障がでる
- 5.1移行はすぐできる
- range partition
- Purge
- High Traffic
懇親会(但し酒はない)の時にりーおさんと話す機会があったのですが、特にDB周りについては、あまり独自のことはせずに、MySQL自体のバージョンアップに任せるとか、MySQLの仕様をきっちり理解した上でアプリで本当にやりたいことを曲げずに、基本に忠実なチューニングで対処できるようにするか、という辺りに気を配っている印象でした。また、樋口さんともお話させていただいて、去年のYAPC::Asiaの発表見てました!と伝えられたのがよかった。あの発表はこういうところに使われていたんですね。
にしても、テーブルを囲んで話してる中で、DeNAのT部さんが「Perl使ってる人ー」と言って手を上げたのが自分だけだった。。。