7. ■第1部
ソーシャルアプリの概要
Copyright 2010 KLab Inc. All right reserved.
8. ■ソーシャルアプリの概要
■ソーシャルアプリとは?
・SNSの機能を使う事が出来るアプリケーション。
ex)自分が作ったアプリからSNSの友達情報を取得する。
・SNSの機能を使いたい場合は、各プラットフォームが提供する
JavaScriptAPIやWebAPIを利用する。
■実際、どのような事が出来るの?
・ギルドのような、SNS上の友達と協力して1つの目標を
達成するような協力プレイが出来る。
→SNS上の友達とプレイ出来る事で、気軽に始められる。
(友達がやってるから自分もやってみよう的な意味で。)
お陰で、トラフィックが激しくて負荷に悩まされます(><)
Copyright 2010 KLab Inc. All right reserved.
9. ■ソーシャルアプリの概要
■ソーシャルアプリの特徴
サービスを気軽に立ちあげられる
【ビジネス的観点】
・ユーザの母体がSNSにあるが故の集客コストの削減。
・流行っているからという理由で納得する人が多い(w
※ 半分冗談、半分本気です。
【技術的観点】
・OpenSocialAPIを使う事による、開発コストの削減。
※ PCサービス立ち上げ時には認証系で助けられました。
気軽に立ちあげられる反面、同じようなテーマのアプリが
多いため、他アプリとの差別化が重要です!
Copyright 2010 KLab Inc. All right reserved.
10. ■ソーシャルアプリの概要
■どうやって差別化していくか?
① アプリのテーマの選定
・ 誰も考えていないようなテーマを選定していく事が重要。
※ 最近だと乙女系が流行っているみたいですね。
② 独自機能の提供
・ ソーシャルアプリは数が多く、テーマがかぶる事が多いです。
・ 既にかぶっている場合は、他のアプリを研究して
他アプリには無い機能を作り込むと効果的!
恋愛と同じように、自分をアピールしなきゃダメ!
劣化コピーでは誰もあなたには振りむきませんよ!
Copyright 2010 KLab Inc. All right reserved.
11. ■ソーシャルアプリの概要
■まとめ
・ ソーシャルアプリとはSNSの機能を使えるアプリケーション。
・ SNSの機能による、友達の輪(ソーシャルグラフ)を
使った協力プレイが特徴。
・ 母体がSNSであるため、ヒットするとトラフィックが高く
負荷に悩まされる。
※ 負荷に困ったら DSASに相談だ!(w
・ 気軽に始められる半面、同じようなアプリが乱立するため
他社との差別化をしないと生き残れない。
Copyright 2010 KLab Inc. All right reserved.
32. ■ソーシャルアプリの負荷特性
大量の更新リクエスト
ミニゲーム アプリケーション
結果
アイテム
購入
他ユーザー
を応援
Copyright 2010 KLab Inc. All right reserved.
33. ■ソーシャルアプリの負荷特性
マスターDBへの負荷集中
1台に負荷が
集中! スレーブDB
スレーブDB
スレーブDB
マスターDB
分散可能
Webサーバーebサーバーebサーバー
W W Webサーバー
Copyright 2010 KLab Inc. All right reserved.
34. ■ソーシャルアプリの負荷特性
ソーシャルアプリで重要なリソース
• データベース(特にマスター)
– 最大コネクションは数百程度
– 負荷分散も難しい
大量の更新系リクエストをさばくため、マスターDBの
リソースが枯渇!
Copyright 2010 KLab Inc. All right reserved.
35. ■ソーシャルアプリの負荷特性
モバイルサイトとの比較
モバイルサイト モバイル向けソーシャルア
プリ
情報閲覧 + DL中心 ユーザーのアクション+
ユーザー間アクション
リクエスト数 少 リクエスト数 多
参照(多) > 更新(少) 参照(多) = 更新(多)
Copyright 2010 KLab Inc. All right reserved.
36. ■ソーシャルアプリの負荷特性
まとめ
• ソーシャルアプリ = 大量の更新系リクエスト
• マスターデーターベースに負荷が集中し、ボ
トルネックになりがち
Copyright 2010 KLab Inc. All right reserved.
37. ■KLabのシステム構成
• DSAS
– 高負荷・大規模サイト構築用インフラ統合技術
• オープンソースベース
• 単一故障点が存在しない高信頼構成
• 容易なメンテナンス・柔軟なスケーラビリティ
• 充実した監視機構とモニタリング
http://www.klab.jp/dsas/
Copyright 2010 KLab Inc. All right reserved.
38. ■KLabのシステム構成
システム構成(インフラ)
Webサーバー
マスターDB スレーブDB
Webサーバー
LVS(ロードバランサ)
Webサーバー KVストレージ
(TokyoTyrant)
Webサーバー
Internet キャッシューサーバー
(memcached)
Copyright 2010 KLab Inc. All right reserved.
39. ■KLabのシステム構成
Gangliaによるモニタリング
監視対象も追加
できる
Copyright 2010 KLab Inc. All right reserved.
40. ■KLabのシステム構成
システム構成(アプリケーション)
高速画像合成ライブラリ
アプリ固有コード (KGD)
Flash合成ライブラリ
KLabSocialGamePlatform
Symfony
APC
Copyright 2010 KLab Inc. All right reserved.
41. ■KLabのシステム構成
• Symfonyを大幅に改造した独自フレームワー
クを使用
– 必要ない機能を省いて軽量化
– 開発効率の向上
• Opensocial用の独自ライブラリ
• 画像合成、Flash合成は高速化改造済み
PHPエクステンションを使用
Copyright 2010 KLab Inc. All right reserved.
42. ■KLabのシステム構成
画像合成について
背景画像
ボディ画像
表情画像
ドレス画像
髪型画像
Copyright 2010 KLab Inc. All right reserved.
43. ■KLabのシステム構成
• キャッシュは非効率 + 必要ない
• 1ユーザー(50KB) × 100万
– 合成したアバター画像だけで、50GB
• Memcachedへのキャッシュ: 非現実的
• ローカルファイルへのキャッシュ
– メモリにキャッシュできないためI/Oアクセス増加
– むしろ遅くなる
Copyright 2010 KLab Inc. All right reserved.
44. ■KLabのシステム構成
• 素材ファイル
– 数百から数千程度
– キャッシュ可能!
• 画像ライブラリの高速化 + キャッシュなし
– 高速改造版GDライブラリKGDは、DSAS
Hosting for Socialでも提供中!
– http://www.klab.jp/dsas_host/kgd.html
Copyright 2010 KLab Inc. All right reserved.
45. ■リソース有効活用テクニック
• ハードウェアベース
– CPU かぎりあるリソースを有効
– メモリ 活用する
– HD
• 役割ベース
– DBサーバー(マスター / スレーブ)
– キャッシュサーバー + キーバリューストレージ
– Webサーバー(Apache, PHP)
Copyright 2010 KLab Inc. All right reserved.
46. ■リソース有効活用テクニック
マスターDB有効活用
処理時間
をへらす
コネクション
をへらす
• なるべくデータベースに接続しない
– コネクション数をへらす
• データベースへの接続時間を短かくする
– クエリを最適化
– 接続を切る
Copyright 2010 KLab Inc. All right reserved.
47. ■リソース有効活用テクニック
• SQL最適化、DBサーバーチューニングの話
は、ソーシャルアプリにかぎらないので省略
– ほんとはとても重要
– I/Oアクセスをへらせ!とだけ言っておく
• DBコネクションの節約方法について話します
– キャッシュサーバーの利用
– KVSの利用
– スレーブDBヘの分散
– ソーシャルAPIに関する注意点
Copyright 2010 KLab Inc. All right reserved.
48. ■リソース有効活用テクニック
キャッシュの利用
• 効率的なキャッシュの利用
– Memcachedの最大接続数は数万から数十万
– 秒間数万リクエストを処理
先にキャッシュを検索 DB更新時に
なければDBに問い合わせ キャッシュも更新
Memcached
アプリ(PHP)
MySQL
Copyright 2010 KLab Inc. All right reserved.
49. ■リソース有効活用テクニック
Webサーバー
Webサーバー
APCキャッシュ Memcached
Webサーバー
Webサーバー
Copyright 2010 KLab Inc. All right reserved.
50. ■リソース有効活用テクニック
KVSの利用
• KVS(キーバリューストレージ)の利用
– 更新の一部をKVSに分散する
– KVS: 連想配列のような、キー+値の形式でデー
タを保持するストレージ
• TokyoTyrant
– 平林幹雄さん(mixi)作
– Memcacheに近い高速な処理
– エビクション(データ消滅)の心配がいらない
– http://fallabs.com/tokyotyrant/
Copyright 2010 KLab Inc. All right reserved.
51. ■リソース有効活用テクニック
TokyoTyrantの特性
データ信頼性 高速
MySQL TokyoTyrant Memcached
レプリケーション HDにも書き込む 基本はオンメモリ
a
高度なトランザクション/ レプリケーション トランザクション/ロック
ロック機構 機構なし
エビクションなし
HDへの書き込みが保 エビクションによる
証される データ不整合の危険
データ消滅
Copyright 2010 KLab Inc. All right reserved.
52. ■リソース有効活用テクニック
TokyoTyrantの使い道
• 頻繁に更新されるユーザーステータス
– 体力
– アイテム装備情報
– ログイン情報etc.
• RDBの機能(ロック、トランザクションなど)が
必要ないデータ
Copyright 2010 KLab Inc. All right reserved.
53. ■リソース有効活用テクニック
注意点
• TokyoTyrantとMySQLの間の不整合が起こりうる。
• アトミックな更新処理は困難
• ユーザーが得する方向で処理を行なう
– 順番が重要
– (1)(2)(3)、どのタイミングで例外が起きてもよいようにする
(1)ユーザーの利益になる処理 on TT: 体力回復
(2)MySQLへの更新処理: アイテム消費など
(3)ユーザーの損になる処理 on TT: 体力消費
Copyright 2010 KLab Inc. All right reserved.
54. ■リソース有効活用テクニック
スレーブDBへの分散
スレーブDB
スレーブDB
マスターDB スレーブDB
• スレーブDB: マスターからデータをコピーしたDB(レ
プリケーション)
• DBへの参照をスレーブDBに逃がすことで、マス
ターDBの負荷を減少
Copyright 2010 KLab Inc. All right reserved.
55. ■リソース有効活用テクニック
スレーブDB
スレーブDB
マスターDB スレーブDB
• 注意点: 最新のデータがあるとはかぎらない
• レプリケーション遅延はいつでも起こりうる
• スレーブDBを利用できるデータ:
– ランキングなど、更新が少なく、遅延が致命的でないデー
タ
Copyright 2010 KLab Inc. All right reserved.
56. ■リソース有効活用テクニック
ソーシャルAPIの注意点
• ソーシャルアプリ = SNS APIを使用
– ユーザー情報(ユーザー名、SNSフレンドデータ)
– ユーザー投稿テキストの保存
– アクティビティ送信
• SNSが提供するAPIの使用は避けて通れな
い
Copyright 2010 KLab Inc. All right reserved.
57. ■リソース有効活用テクニック
ガジェットサーバー
ユーザー
SAP
APIサーバー
• ガジェットサーバー経由の認証情報を利用し、API
サーバーに問い合わせる
• APIとの通信はHTTP
– 最短でも数十msのコスト
Copyright 2010 KLab Inc. All right reserved.
58. ■リソース有効活用テクニック
• レスポンスタイムアウトは日常的に起こりえる
• API通信がつねに成功する前提でアプリケーション
を開発してはいけない
タイムアウトの場合、DBコネクションを
危険なコード 数秒間無意味に
数秒間無意味に保持
通信が成功しても、数十 程度のロス
数十ms程度
数十 程度の
- トランザクション開始
- => APIに問い合わせ
- トランザクション終了
Copyright 2010 KLab Inc. All right reserved.
59. ■リソース有効活用テクニック
それでも足りない場合
• 水平分割 / 垂直分割を利用
• データベースを複数に分割
– 機能単位の分割(垂直分割)
– ユーザー単位など、データ単位の分割(水平分
割)
• 注意点は、KVSの利用に似てくる
– データ整合性がネック
Copyright 2010 KLab Inc. All right reserved.
60. ■リソース有効活用テクニック
まとめ
• マスターDBへの接続をへらそう
– キャッシュサーバーを利用
– 一部の更新をKVSなどNoSQLに分散
– 参照系の処理をスレーブDBに分散
– API通信に気をつけよう
– 垂直分割+水平分割の利用
Copyright 2010 KLab Inc. All right reserved.
61. ■最後に・・・
ご静聴ありがとうございました。
不明点はお気軽にお問い合わせください。
Copyright 2010 KLab Inc. All right reserved.