<ul><li>ソーシャルアプリにおける KVS の利用事例
株式会社 gumi
堀内康弘 </li></ul>
<ul><li>株式会社 gumi CTO
Twitter: horiuchi
10 年くらいウェブアプリ作ってます。 </li></ul><ul><ul><li>Perl 10 年、 Python 1 年 </li></ul></ul><ul><li>ゲームが好きです。 </li></ul><ul><ul><li>モンハ...
<ul>会社紹介 </ul><ul><li>35 タイトル 以上のアプリを開発・運用
延べユーザ数 10,000,000 人
多プラットフォーム展開 </li></ul><ul><ul><li>mixi 、モバゲ、 GREE </li></ul></ul><ul><li>ソーシャルゲームはもちろん、ソーシャルライフ分野のアプリも作ってます </li></ul>
<ul>ソーシャルゲーム  x  ソーシャルライフ </ul><ul>ソーシャルライフ系 </ul><ul>ソーシャルゲーム 系 </ul><ul>サポートツール系 </ul><ul>・ 空飛ぶ  ->マイミク通信簿  340 万 </ul><...
<ul>ソーシャルライフ </ul><ul>ファンクラブ  220,000 人   </ul><ul>同級生掲示板  520,000 人 </ul><ul>卒業アルバム おとな ver.   300,000 人   </ul><ul>同級生をさ...
<ul>占い、診断系アプリ </ul><ul>SM 診断〜あなたの本性暴きます </ul><ul>浮気性チェック! </ul><ul>その愛本物?ニセモノ? </ul><ul>犬タイプvs猫タイプ </ul><ul>草食系  vs  肉食系 <...
<ul>ソーシャルゲーム </ul><ul><li>2010 年 2 月  幕末英雄伝  670,000 人
2010 年 3 月  キャバウォーズ  1,320,000 人
2010 年 4 月  刑事ハードボイルド  600,000 人
2010 年 5,6,7 月 多プラットフォーム展開
2010 年 8 月 ハッピー☆モデル  70,000 人 </li></ul>
ソーシャルアプリの特徴
従来のウェブアプリとほとんど変わりません
<ul>ソーシャルアプリと従来のウェブアプリとの違い </ul><ul><li>やりとりする相手が違う。
ユーザー認証の方法が違う。
API が用意されている。
アクセス量が半端ない。
データの更新頻度が高い ( ゲーム ) </li></ul>
<ul>やりとりする相手が違う </ul><ul><li>相手はプロバイダ (mixi, モバゲ ,GREE) </li></ul>
<ul>ユーザー認証 </ul><ul><li>Oauth signagure で身元保証
QueryString からユーザー ID 取得 </li><ul><li>opensocial_owner_id </li></ul></ul>
<ul>API が用意されている </ul><ul><li>PeopleAPI </li></ul><ul><ul><li>ユーザー情報、友達情報を取得 </li></ul></ul><ul><li>ActivityAPI </li></ul>...
位置情報を送信する仕組み
Upcoming SlideShare
Loading in …5
×

gumiStudy#1 kvs 発表資料

5,262 views

Published on

Published in: Technology
0 Comments
4 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
5,262
On SlideShare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
31
Comments
0
Likes
4
Embeds 0
No embeds

No notes for slide

gumiStudy#1 kvs 発表資料

  1. 1. <ul><li>ソーシャルアプリにおける KVS の利用事例
  2. 2. 株式会社 gumi
  3. 3. 堀内康弘 </li></ul>
  4. 4. <ul><li>株式会社 gumi CTO
  5. 5. Twitter: horiuchi
  6. 6. 10 年くらいウェブアプリ作ってます。 </li></ul><ul><ul><li>Perl 10 年、 Python 1 年 </li></ul></ul><ul><li>ゲームが好きです。 </li></ul><ul><ul><li>モンハン 3 予約しました ! </li></ul></ul><ul><li>ランニング、筋トレにはまってます。 </li></ul>自己紹介
  7. 7. <ul>会社紹介 </ul><ul><li>35 タイトル 以上のアプリを開発・運用
  8. 8. 延べユーザ数 10,000,000 人
  9. 9. 多プラットフォーム展開 </li></ul><ul><ul><li>mixi 、モバゲ、 GREE </li></ul></ul><ul><li>ソーシャルゲームはもちろん、ソーシャルライフ分野のアプリも作ってます </li></ul>
  10. 10. <ul>ソーシャルゲーム x ソーシャルライフ </ul><ul>ソーシャルライフ系 </ul><ul>ソーシャルゲーム 系 </ul><ul>サポートツール系 </ul><ul>・ 空飛ぶ ->マイミク通信簿 340 万 </ul><ul>Rekoo 650 万 ->サンシャイン牧場 460 万 Rakoo 380 万 ->みんなの農園 160 万 ->みんなの動物広場 140 万 </ul><ul>・ DeNA -> 怪盗ロワイヤル  250 万 ・ ウノウ ->まちつく 270 万 ・ ベクター 190 万 ->恋する私の王子様  150 万 </ul><ul>・ GPS 連動アド ・ リワードプラス(アドウェイズ) ・ poncan (ドリコム) </ul><ul>・ Facebook connect ・ mixi connect ・ connect with twitter ・ gree connect </ul><ul>ファンクラブ 同級生掲示板 卒業アルバム 同級生を探せ </ul><ul>幕末英雄伝 キャバウォーズ 刑事ハードボイルド 現在開発中 × 2 占い診断系 × 40+ </ul>
  11. 11. <ul>ソーシャルライフ </ul><ul>ファンクラブ 220,000 人 </ul><ul>同級生掲示板  520,000 人 </ul><ul>卒業アルバム おとな ver.   300,000 人 </ul><ul>同級生をさがせ!  120,000 人 </ul>
  12. 12. <ul>占い、診断系アプリ </ul><ul>SM 診断〜あなたの本性暴きます </ul><ul>浮気性チェック! </ul><ul>その愛本物?ニセモノ? </ul><ul>犬タイプvs猫タイプ </ul><ul>草食系 vs 肉食系 </ul><ul>ザ★おバカ検定 </ul><ul>むっつり度ちぇ〜っく !! </ul><ul>A型度判定〜本当にA型ですか? </ul><ul>常識・非常識〜あなた常識人? </ul><ul>KY 診断〜空気読めてる? </ul><ul>ナルシスト★診断 </ul><ul>モテ↑非モテ↓診断 </ul><ul>B型度判定〜ジーマーで型B? </ul><ul>じじばば検定〜若さ保ってる? </ul><ul>フリ派?フラれ派? </ul><ul>AB型度判定〜ABですが何か? </ul><ul>O型度判定〜う〜んO型かなぁ? </ul><ul>2人のラブラブ度診断 </ul><ul>恋の成就度診断 </ul><ul>のだめカンタービレ進級試験初級 </ul><ul>戦国雑学王決定戦★立志編 </ul><ul>のだめマエストロコンクール </ul><ul>ノーマル? or アブノーマル? </ul><ul>のだめカンタービレ進級試験中級 </ul><ul>のだめカンタービレ進級試験上級 </ul><ul>戦国クイズ王全国ランキング </ul><ul>合計 約 600 万 ユーザー </ul>
  13. 13. <ul>ソーシャルゲーム </ul><ul><li>2010 年 2 月 幕末英雄伝 670,000 人
  14. 14. 2010 年 3 月 キャバウォーズ 1,320,000 人
  15. 15. 2010 年 4 月 刑事ハードボイルド 600,000 人
  16. 16. 2010 年 5,6,7 月 多プラットフォーム展開
  17. 17. 2010 年 8 月 ハッピー☆モデル 70,000 人 </li></ul>
  18. 18. ソーシャルアプリの特徴
  19. 19. 従来のウェブアプリとほとんど変わりません
  20. 20. <ul>ソーシャルアプリと従来のウェブアプリとの違い </ul><ul><li>やりとりする相手が違う。
  21. 21. ユーザー認証の方法が違う。
  22. 22. API が用意されている。
  23. 23. アクセス量が半端ない。
  24. 24. データの更新頻度が高い ( ゲーム ) </li></ul>
  25. 25. <ul>やりとりする相手が違う </ul><ul><li>相手はプロバイダ (mixi, モバゲ ,GREE) </li></ul>
  26. 26. <ul>ユーザー認証 </ul><ul><li>Oauth signagure で身元保証
  27. 27. QueryString からユーザー ID 取得 </li><ul><li>opensocial_owner_id </li></ul></ul>
  28. 28. <ul>API が用意されている </ul><ul><li>PeopleAPI </li></ul><ul><ul><li>ユーザー情報、友達情報を取得 </li></ul></ul><ul><li>ActivityAPI </li></ul><ul><ul><li>ユーザーの行動履歴を更新 </li></ul></ul><ul><li>PaymentAPI </li></ul><ul><ul><li>課金を行う </li></ul></ul><ul><li>招待を送れる仕組み
  29. 29. 位置情報を送信する仕組み
  30. 30. ひと言を送信する仕組み </li></ul>
  31. 31. <ul>膨大なアクセス量 </ul><ul><li>リリース直後に数万人
  32. 32. 1 ゲームで 3000 万 PV/ 日
  33. 33. 最初から負荷を考慮した設計が必要 </li></ul>
  34. 34. どこがボトルネックになるの?
  35. 35. どこを考慮したらいいの? ずばりDBです。
  36. 36. なぜDBがボトルネックになるの? <ul><li>Writeのスケールが難しい </li><ul><li>テーブル毎にDBを分けたり
  37. 37. テーブル自体を分割したり </li></ul><li>SQLによっては時間がかかる </li><ul><li>たくさんの行を一度に読むようなSQL
  38. 38. 大きいテーブル同士をjoinするようなSQL </li></ul></ul>
  39. 39. 解決策は? <ul><li>遅いクエリの見直し </li><ul><li>主キーによる参照を意識する
  40. 40. ManyToMany は基本使わない
  41. 41. Filter もあまり使わない
  42. 42. Join もほとんど使わない </li></ul><li>テーブル設計の見直し </li><ul><li>更新の多いカラムは別テーブルにする </li></ul></ul>
  43. 43. それでもだめなら DBへのアクセス自体を減らす
  44. 44. どうやってDBへのアクセスを減らすか? そこで登場するのがKVSです
  45. 45. gumiで活用しているKVS <ul><li>Memcached (Read を減らす ) </li><ul><li>オンメモリなハッシュテーブル
  46. 46. スケーラブル
  47. 47. サーバを再起動するとデータは消える
  48. 48. Django 標準機能で簡単に使える </li></ul></ul><ul><li>TokyoTyrant (Read Write を減らす ) </li></ul><ul><ul><li>モダンな DBM でデータの永続性あり
  49. 49. MySQL より高速に読み書きできる </li></ul></ul><ul><ul><ul><li>読み書き 20000qps くらい </li></ul></ul></ul>
  50. 50. memcachedの使いどころ <ul><li>毎回取得するようなモデルをキャッシュ </li><ul><li>Player インスタンスをキャッシュ </li></ul><li>リアルタイム性の低いページをまるごと </li><ul><li>@cache_page デコレータ </li></ul><li>2 度押し対策の軽いセッション管理に </li></ul>
  51. 51. キャッシュ実装例 def get_player(id): &quot;&quot;&quot; id からプレイヤーインスタンスを取得 &quot;&quot;&quot; path = &quot;/player/&quot;+str(id) player = cache.get(path, None ) if player is None : # キャッシュに存在しない try : player = Player.objects.get(id=id) cache.set(path, player) # インスタンスを set できる except Player.DoesNotExist: player = None return player
  52. 52. TokyoTyrantの使いどころ <ul><li>更新頻度の高いデータの管理 </li><ul><li>プレイヤーの現在のパラメータ
  53. 53. 経験値、所持金 </li></ul><li>取得コストの高い SQL を発行するようなデータを管理する </li><ul><li>自分の近況一覧
  54. 54. 全国ランキング
  55. 55. 最大攻撃力
  56. 56. 貢ぎ物総額 </li></ul></ul>
  57. 57. <ul>サーバ構成 </ul>
  58. 58. まとめ <ul><li>memcached + TokyoTyrant
  59. 59. でDBのボトルネックをすっきり解消! </li></ul>
  60. 60. それでもだめなら「okuyama」で
  61. 61. <ul>ご静聴ありがとうございました。 </ul>
  62. 62. <ul>人材絶賛募集してます ! Twitter: horiuchi Mail: horiuchi@gu3.co.jp </ul>

×