DeNAのモバゲータウン勉強会にいってきた (2008/02/13)

MyNAのmlで見つけた勉強会ですが、想定より4倍の応募があり、2日に分けた上に抽選だったそうで。しかもデブサミとも被ってるので、どんなもんだろう? って思ってました。行ってみたらけっこう少人数制(15人くらいで小さい会議室)で、すごい質問しやすい雰囲気だった。総じてけっこうおもしろかったです。抽選とは言え、この参加者(抽選に当たった人)を見るにけっこう作為があったんじゃないかなー、なんて思っちゃいました。

ちなみに場所は笹塚。新宿で京王線に乗り換えるのにそうとう迷った。急行って笹塚とまるんだっけ、みたいな。R20と中野通りのちょっと北、といったほうが通じる人には通じるかな。そのまま駒場によって山手でラーメン食べて帰りたくなりましたよ。

以下、言うまでもないですが「私にはこう聞こえた」であって、内容の信頼性については以下略。

1つめ: モバゲータウンのインフラ

有澤さんのお話。スピーカー童貞卒業、とのこと(笑)

  • サーバ構成
    • 入社当初は32bitサーバでweb 60台、DB 150台くらい、今は64bitでweb 130台、DB 200台
    • HP or Dell のメモリ16GBマシン
      • ニコニコのkoizukaさん曰く「HPのなんとかは1UでHDDが6台乗るのがうれしい」を聞いて。
    • CentOS4.4 (そろそろ5にしたい)
    • DBはmaster/backup: RAID10, slave: RAID0 (読み込み性能重視)
      • こんなサーバをmaster/backup: 6, 7台, slave: 20-30台を取りおきしているとのこと。

メモリは8GBで検証してみたけれど、あんまありがたくなかったそうで。やっぱ16GBだそうです。サーバ監視はMRTG, nagios, 自作のスクリプト。今後もっと整備したいとのこと。

  • Web構成
    • perl, fastcgi, Cで書いたモジュールたくさん (これは2つ目の話のほうで聞いた)
    • DB分割などがあったら設定ファイル1つをデプロイして反映させる
    • これでサービス停止時間がだいたい90sec以内に終わる
  • DB構成
    • MySQL5.0.45
    • senna/tritonnを使っているとかの特に理由がなければInnoDB
    • max_connection=400-600
    • innodb_buffer_pool_size=12GB
    • sort_buffer_size=1M
    • ibdataは60GBとか余裕だそうで
      • innodb_file_per_tableはしてない。
    • binlogは3日くらいで消す。

master/slaveはけっこう別のもの、という感覚を持っているのかな、と思いました。そもそもH/Wもちがうし。backupというのは、集計に使ったりもするけどmasterのbackupの意味で、よくあるslaveがmasterに昇格するのではないのかもしれません。

その一端として、sennaでmasterにはindex貼っていないとか、blackhole storage engineを試している(書き込みをmasterの1台で受け持つ代わりに、I/Oをbinlogを吐き出すだけに抑える)んだそうです。

  • replicationの遅延について
    • すこしくらい遅延しても仕方ないでしょ、的な運用なの??
    • DBの仕組みとしても、アプリケーションとしても、「こういう仕組みで防御している」というのはない
    • 遅延の監視については、repl監視専用のテーブルに常になんか書き込んでいるdaemonがいる
    • (ちょっと話それるけど) InnoDBでいろんなmasterのtrx commitはXAとか使ってるわけじゃなくて、うまくいくようにアプリを作っている

create table hoge (dt datetime, ts timestamp) で insert hoge set dt = now(); とかしてるのかなー。

  • テーブル分割とか
    • mysqldumpはちゃんとmy.cnfに書いて実行(コマンドラインで引数渡さないっぽい)
    • 分割しなきゃいけないくらいの大きさなんだろうけど、dumpは2時間で終わるくらいの感覚
    • mysqldump --no-dataでimportしてalterしてからデータ入れる
    • ユーザIDのアルゴリズムベースな分割が多い? (user_id % 2とか)

dump取ってrestoreする手順を丁寧に説明してくれていました。60GBとかそれくらいのサイズで準備期間1日とか終わるのかな、と思ってましたが、このへんはディスクが(自分が知っているものよりも)ずいぶんと速いからなんでしょうね。

  • クエリキャッシュとか
    • memcached使いたいけど手が回ってない
    • 広告とかニュースはhit rate 80-90%
    • 日記とかだと5%程度
    • 友達が15,000人いる人とかが(ry

メモリがたくさんあるので、OSのディスクキャッシュとMySQLのクエリキャッシュだけでなんとかなっているのかな。innodb_buffer_pool_size=12GBでもあと4GB残ってるしね。

2つめ: HTMLテンプレートと絵文字+alpha

松内さんのお話。松内さんは元Microsoftvistaの開発をされていたそうです。今は海外の子会社立ち上げをされているとのこと。いろんな業務に関わってこられて、それぞれについて少しずついろんなテーマでお話を聞かせていただきました。

絵文字とテンプレートの話

去年9月のモバイル勉強会とかなりかぶるそうです。ちなみにmemokamiさんは来たかったけど来れなかった??

  • 各携帯キャリアの(絵文字含む)レンダリングをするテンプレートエンジンを自作
    • 機能を制限してシンプルに。if, loop, macroくらいしか使えない。
    • CSSは使わずfontタグをデザイナに書かせる。
    • compileしたファイルをmmapしてrenderするイメージ
    • WebはLAMP, apache, fastcgi, perl
    • mod_perlは使わない。Cの拡張モジュールがたくさんあるのでapacheとは切り離したい。
  • 絵文字
    • SJISでDBに保存。SoftBankはUTF8->SJISに変換
    • モバオクがけっこうふるい機種も対応しなきゃいけない

このへんはそこまで目新しい話でもなかった。いや、超すごいと思いますけどね。

  • 端末ごとの違いは?
    • selectタグで変な改行が入っちゃったりする
    • 20機種くらいで目視で(どろくさく)確認。ちゃんと社内で検証端末揃えてる。

あと、障害告知などのお知らせはテンプレートをコンパイルし直すのではなく、専用の管理ツールがあるそうです。

んで、これらまとめて公開したいと考えているそうな。基本Cのコードなので、ぐにゃらくんがphp binding書いてくれるって!!

課金まわり
  • 収益モデルの多様化
    • 月額有料会員サイトからアフィリエイト、純広、直接課金、タイアップ広告(コカコーラとか)
  • キャリア決済
    • ケータイ払い(ドコモ), まとめてau払い(au)
    • 勝手サイトで直接課金はうまくいっているところは少ない
  • ペイジェント (DeNA family, 決済用APIを通じた収納代行)
    • クレジットカード決済、コンビニ決済など
  • web money (プリペイド型決済)
    • 導入が簡単らしい。
    • 高校生などに流通しているらしい。

まあ、このへんもよくある話なのかな。懇親会でアフィリエイト担当の方ともちょっとお話しさせていただいたけれど、ファミリー企業でこういうの持っているのは強いんだろうなぁ。ちなみに0.2secで応答こなかったら即切るそうです(笑)。

なんで公式にならなかったの? って質問が出ていたけれど、アフィリエイト無理とか、DeNAという会社の空気として、そのへん縛られるのはほんといやなんだそうです。auショッピングモールとかauオークションはちゃんとキャリアのルールに従ってるよ、ですって。

それと海外展開についての話もちょっとだけ。松内さんは海外の事情も詳しいようでした。正直こんな場じゃあんま何も言えませんよ的な雰囲気で、そもそも広告モデルも違うし、やっぱり端末の売り方と性能でだいぶ日本と事情変わりますよね、って感じで濁されちゃいました。

ただ、ゲームとかマーケットごとに違うけれど、メール、カレンダー、検索とかはもともとグローバルにいけると思っているそうで、日本のアニメーションが好きなとこならアバターも受けるかも、だそうです。

コミュニティ健全化
  • ユーザ数900万人、1日1000万件以上の書き込み
  • 問い合わせは1分で5, 6件
    • エンジニアは(適切なフィルタを経た上で)問い合わせをみんなtailしている
    • バグを出したら100倍とかに増えるのですぐ気づく
  • 24時間パトロール、監視
    • ペナルティ、強制退会制度
    • 子供たちのいじめとかあったりするって…

このあたりは自分にはそんな目新しいものではなく、よくある監視の体制なのかな、と思いました。

  • NGチェックのやりかた
    • 目視でチェックできるように、書き込みをNG度でランキング(フィルタ)する
      • NGワードリスト、通報された数がおおいもの、成年男性から未成年女子へのメールとか
    • 20-30人のオペレータが目視でチェックして、NG判定したものは学習させる。

ユーザの書き込みのチェックはちゃんと学習させているそうです。というか研究開発としてそういうことをやっている、と。そういう採用を今後増やしていきたいらしい。

具体的には、 chasen で単語に分けて bag-of-words + vector space model で SVM (tinysvmかな?) だそうです。その意味で、いまは「ある書き込み」(テキスト)ベースであって、特定のユーザの属性などは学習には反映できておらず、今後の課題としているそう。強制退会のときは書き込み-ユーザのrelationで履歴を見る。

なぜperl? Javaphpじゃだめ?

ようするに川崎さんが好きだから、ということのようですw たとえばphpでもよかったけれど、当時はphpが3から4になったばかりでまた大きく変わったらやだなー、とは思っていたそうです。開発スピードも大事とのこと。

また、ペイジェントなどのちゃんとしなきゃいけないサービスはfrontendまでJavaで書いてるそうです。

ランキングシステムは?

これは私が懇親会でちょっと聞いてみただけですが、上位1万人くらいは正確な値を保持して、あとは「ようするに線形補間」だそうです。線形でいいのかよ、って言いたかったけど、「ようするに」というところから空気嫁と思いました。それ以上に、そんなところではまらないようなサービス設計が大事だよね、だそうで。

まとめ

だいぶ長くなっちゃいましたけど、ひたすらいろんな話をきけてとても楽しかったです。MyNAのメール見たときはMySQLの話をゴッツリきけるとおもって楽しみにしていたけれど、それ以外の話も興味深かった。

ほかの参加者の方々も言ってたけど、MySQL5.1なんて怖くて使えないんだって。ふーん。