Phpconf2010
Upcoming SlideShare
Loading in...5
×
 

Phpconf2010

on

  • 19,973 views

 

Statistics

Views

Total Views
19,973
Views on SlideShare
8,084
Embed Views
11,889

Actions

Likes
15
Downloads
169
Comments
0

20 Embeds 11,889

http://ke-tai.org 9451
http://lab.klab.org 2106
http://young.blog.jp.klab.com 146
https://si0.twimg.com 72
http://webcache.googleusercontent.com 29
http://blog.livedoor.jp 18
https://twimg0-a.akamaihd.net 15
http://klab.ldblog.jp 11
http://s.deeeki.com 11
http://localhost 10
http://slideshare-download.seesaa.net 6
http://yasu-gmor.blogspot.com 4
https://twitter.com 3
http://translate.googleusercontent.com 1
http://www.google.co.jp 1
http://webryreader.sso.biglobe.ne.jp 1
http://static.slidesharecdn.com 1
http://cache.yahoofs.jp 1
file:// 1
http://01neta.tumblr.com 1
More...

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Phpconf2010 Phpconf2010 Presentation Transcript

  • 大ヒット!ソーシャルアプリの裏側 2010/9/24 KLab株式会社 Kラボラトリー 高田敦史 第2開発部 新田 祐介 Copyright 2010 KLab Inc. All right reserved.
  • ■会社紹介 • 2000年8月設立、今年10周年を迎えます • 大規模/高負荷モバイルサイトの構築/運用にて 負荷対策のノウハウを蓄積してきました • ソーシャルアプリ向けホスティングサービス「DSAS Hosting for Social」提供中! http://www.klab.jp/dsas_host/index.html Copyright 2010 KLab Inc. All right reserved.
  • ■会社紹介 • 弊社にてソーシャルアプリを多数展開中! Copyright 2010 KLab Inc. All right reserved.
  • ■スピーカー紹介 ■氏名 ・新田 祐介(twitter:@fushianako) ・KLab 株式会社 第2開発部 グループマネージャー ■略歴 ・2006年にKLabに入社。 ・以降、公式モバイルサイト/自社SNS開発をしてました。 ・最近はソーシャルゲーム開発の駆け出しPMしてます。 ・プロジェクトが佳境になるとうまい棒を持って登場します。 ■趣味・特技 ・毎週日曜の娘とのプリキュア観賞。 ・native japanese(興味のある人はお問い合わせください) Copyright 2010 KLab Inc. All right reserved.
  • ■スピーカー紹介 • 自己紹介 – 高田敦史 – KLab株式会社: Kラボラト リー、第二開発部PMO • 略歴 – 2008年入社 – 研究開発 + ソーシャルアプリ の開発 + アーキテクト – 最近はくまをかかえています • つくったものなど – http://paintica.com/ – PHPは主にソーシャル アプリの開発に使用。 Copyright 2010 KLab Inc. All right reserved.
  • ■発表内容 ■対象者 これからソーシャルアプリを開発する、もしくは 興味のあるエンジニア、開発リーダー、PM。 ■発表内容 第1部: ソーシャルアプリの概要(新田) 第2部: 激戦!ソーシャルアプリ格闘日記(新田) 第3部: ソーシャルアプリ負荷対策(高田) Copyright 2010 KLab Inc. All right reserved.
  • ■第1部 ソーシャルアプリの概要 Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの概要 ■ソーシャルアプリとは? ・SNSの機能を使う事が出来るアプリケーション。 ex)自分が作ったアプリからSNSの友達情報を取得する。 ・SNSの機能を使いたい場合は、各プラットフォームが提供する JavaScriptAPIやWebAPIを利用する。 ■実際、どのような事が出来るの? ・ギルドのような、SNS上の友達と協力して1つの目標を 達成するような協力プレイが出来る。 →SNS上の友達とプレイ出来る事で、気軽に始められる。 (友達がやってるから自分もやってみよう的な意味で。) お陰で、トラフィックが激しくて負荷に悩まされます(><) Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの概要 ■ソーシャルアプリの特徴 サービスを気軽に立ちあげられる 【ビジネス的観点】 ・ユーザの母体がSNSにあるが故の集客コストの削減。 ・流行っているからという理由で納得する人が多い(w ※ 半分冗談、半分本気です。 【技術的観点】 ・OpenSocialAPIを使う事による、開発コストの削減。 ※ PCサービス立ち上げ時には認証系で助けられました。 気軽に立ちあげられる反面、同じようなテーマのアプリが 多いため、他アプリとの差別化が重要です! Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの概要 ■どうやって差別化していくか? ① アプリのテーマの選定 ・ 誰も考えていないようなテーマを選定していく事が重要。 ※ 最近だと乙女系が流行っているみたいですね。 ② 独自機能の提供 ・ ソーシャルアプリは数が多く、テーマがかぶる事が多いです。 ・ 既にかぶっている場合は、他のアプリを研究して 他アプリには無い機能を作り込むと効果的! 恋愛と同じように、自分をアピールしなきゃダメ! 劣化コピーでは誰もあなたには振りむきませんよ! Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの概要 ■まとめ ・ ソーシャルアプリとはSNSの機能を使えるアプリケーション。 ・ SNSの機能による、友達の輪(ソーシャルグラフ)を 使った協力プレイが特徴。 ・ 母体がSNSであるため、ヒットするとトラフィックが高く 負荷に悩まされる。 ※ 負荷に困ったら DSASに相談だ!(w ・ 気軽に始められる半面、同じようなアプリが乱立するため 他社との差別化をしないと生き残れない。 Copyright 2010 KLab Inc. All right reserved.
  • ■第2部 激戦!ソーシャルアプリ開発日記 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ソーシャルアプリの特徴も含めた、私の苦労話を ノンフィクションでお送りいたします。 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 その1 集中砲火 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ソーシャルアプリは他社との差別化が重要と言いましたが… Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 恋してキャバ嬢は見事に差別化に成功しました\(^o^)/ Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 が、しかし、問題が・・・ 「弾幕薄いぞ!何やってんの!」 負荷に耐えきれなくなったのです\(^o^)/ Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 サーバの状態を見ていたら・・・・ 最大秒間PV(※)が・・・ 初日 :380PV/sec(な、なんだってー!!) 翌日 :580PV/sec(ぇぇぇぇぇぇぇぇぇぇぇぇ) 最大 :2000pv/sec以上(\(^o^)/ ) ※最大秒間PV:1秒間のページ閲覧数が一日で最も多いときのページ閲覧数 ※500pv/secになると普通のWebアプリでは考えられない量です。 というわけで、地道に負荷対策をし始めました。 結果、最大秒間PVはさばけるようになりました。 (詳細は高田から説明します。) Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 その2 ハイブリッド化 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 同じテーマのアプリが出てくることはしばしばありますが… Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 キャバをテーマにしたアプリも出てきました… Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ソーシャルアプリ業界ではよくあることです Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 テーマがかぶった場合は… 新規機能を開発して差別化を行わないと死にます。 ここではその時のお話をしようと思います。 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ■新田が開発リーダーしていた頃のよくある光景 企画者 「他社アプリが伸びてきたから、うちも対策しないと」 「新田さん、こんな機能作れる?」 新田 「○○人日くらいあれば作れるので、作りますね。」 開発者 「新田さん、作り終わったので企画チェックしますね。」 企画者 「やっぱり、ここ、こう作りなおしてもらって良い?」 新田 「謀反じゃーーー!!! 」 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 仕様変更による、手戻りが発生し、リリースが遅れます。 他社からも遅れを取ってしまい、機会損失になります。 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ■新田が開発リーダーをしていたころに気をつけた事 企画者 「他社アプリが伸びてきたから、うちも対策しないと」 「新田さん、こんな機能作れる?」 新田 「作れるけど、こういう仕様にした方が面白くないっすか?」 企画者 「そうだね、こうした方が良さそうだね」 開発者 「新田さん、作り終わったので企画チェックしますね。」 企画者 「OK!じゃリリースしましょう。」 Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ソーシャルアプリは、スピードの流れが早いため 自分の担当にとらわれず、担当外の作業を積極的に 行なう事が、ヒットアプリを生み出す要因になります。 エンジニアのみなさん、少しでも良いので 企画のフィールドに首を突っ込むと楽になれますよ! Copyright 2010 KLab Inc. All right reserved.
  • ■激戦!ソーシャルアプリ開発日記 ■まとめ ・ソーシャルアプリはヒットすると、ありえない負荷がかかる。 → 負荷対策をきちんとしないと機会損失になります。 ・ソーシャルアプリは常に追加開発をしないと他アプリに 追いぬかれ埋もれていく。 → 結果として、機会損失に繋がる。 ・開発者が企画者マインドを少し注入しハイブリッドに なることでヒットアプリへの道が広がる。 Copyright 2010 KLab Inc. All right reserved.
  • ■第3部 ソーシャルアプリ負荷対策 Copyright 2010 KLab Inc. All right reserved.
  • アジェンダ 1.ソーシャルアプリの負荷特性 2.KLabのシステム構成 3.リソース有効活用テクニック •Webアプリ負荷対策の基本をおさえる •リソースの特性を意識する •参考: •LAMPで作るソーシャルアプリの負荷対策 http://tinyurl.com/orehamorimoto Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 • ユーザー固有のデータ – 大量 • ゲーム内ステータス(体力、経験値など) • アイテム所持情報 よくある高ARPUな • 課金、購入ログ ソーシャルゲーム – 更新頻度: 高い モデルを想定 • ボタンを押すだけでステータス変化 • 大量のログ • 高頻度 + 大量のHTTPリクエスト(更新系) Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 大量の更新リクエスト ミニゲーム アプリケーション 結果 アイテム 購入 他ユーザー を応援 Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 マスターDBへの負荷集中 1台に負荷が 集中! スレーブDB スレーブDB スレーブDB マスターDB 分散可能 Webサーバーebサーバーebサーバー W W Webサーバー Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 ソーシャルアプリで重要なリソース • データベース(特にマスター) – 最大コネクションは数百程度 – 負荷分散も難しい 大量の更新系リクエストをさばくため、マスターDBの リソースが枯渇! Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 モバイルサイトとの比較 モバイルサイト モバイル向けソーシャルア プリ 情報閲覧 + DL中心 ユーザーのアクション+ ユーザー間アクション リクエスト数 少 リクエスト数 多 参照(多) > 更新(少) 参照(多) = 更新(多) Copyright 2010 KLab Inc. All right reserved.
  • ■ソーシャルアプリの負荷特性 まとめ • ソーシャルアプリ = 大量の更新系リクエスト • マスターデーターベースに負荷が集中し、ボ トルネックになりがち Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 • DSAS – 高負荷・大規模サイト構築用インフラ統合技術 • オープンソースベース • 単一故障点が存在しない高信頼構成 • 容易なメンテナンス・柔軟なスケーラビリティ • 充実した監視機構とモニタリング http://www.klab.jp/dsas/ Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 システム構成(インフラ) Webサーバー マスターDB スレーブDB Webサーバー LVS(ロードバランサ) Webサーバー KVストレージ (TokyoTyrant) Webサーバー Internet キャッシューサーバー (memcached) Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 Gangliaによるモニタリング 監視対象も追加 できる Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 システム構成(アプリケーション) 高速画像合成ライブラリ アプリ固有コード (KGD) Flash合成ライブラリ KLabSocialGamePlatform Symfony APC Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 • Symfonyを大幅に改造した独自フレームワー クを使用 – 必要ない機能を省いて軽量化 – 開発効率の向上 • Opensocial用の独自ライブラリ • 画像合成、Flash合成は高速化改造済み PHPエクステンションを使用 Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 画像合成について 背景画像 ボディ画像 表情画像 ドレス画像 髪型画像 Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 • キャッシュは非効率 + 必要ない • 1ユーザー(50KB) × 100万 – 合成したアバター画像だけで、50GB • Memcachedへのキャッシュ: 非現実的 • ローカルファイルへのキャッシュ – メモリにキャッシュできないためI/Oアクセス増加 – むしろ遅くなる Copyright 2010 KLab Inc. All right reserved.
  • ■KLabのシステム構成 • 素材ファイル – 数百から数千程度 – キャッシュ可能! • 画像ライブラリの高速化 + キャッシュなし – 高速改造版GDライブラリKGDは、DSAS Hosting for Socialでも提供中! – http://www.klab.jp/dsas_host/kgd.html Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック • ハードウェアベース – CPU かぎりあるリソースを有効 – メモリ 活用する – HD • 役割ベース – DBサーバー(マスター / スレーブ) – キャッシュサーバー + キーバリューストレージ – Webサーバー(Apache, PHP) Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック マスターDB有効活用 処理時間 をへらす コネクション をへらす • なるべくデータベースに接続しない – コネクション数をへらす • データベースへの接続時間を短かくする – クエリを最適化 – 接続を切る Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック • SQL最適化、DBサーバーチューニングの話 は、ソーシャルアプリにかぎらないので省略 – ほんとはとても重要 – I/Oアクセスをへらせ!とだけ言っておく • DBコネクションの節約方法について話します – キャッシュサーバーの利用 – KVSの利用 – スレーブDBヘの分散 – ソーシャルAPIに関する注意点 Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック キャッシュの利用 • 効率的なキャッシュの利用 – Memcachedの最大接続数は数万から数十万 – 秒間数万リクエストを処理 先にキャッシュを検索 DB更新時に なければDBに問い合わせ キャッシュも更新 Memcached アプリ(PHP) MySQL Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック Webサーバー Webサーバー APCキャッシュ Memcached Webサーバー Webサーバー Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック KVSの利用 • KVS(キーバリューストレージ)の利用 – 更新の一部をKVSに分散する – KVS: 連想配列のような、キー+値の形式でデー タを保持するストレージ • TokyoTyrant – 平林幹雄さん(mixi)作 – Memcacheに近い高速な処理 – エビクション(データ消滅)の心配がいらない – http://fallabs.com/tokyotyrant/ Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック TokyoTyrantの特性 データ信頼性 高速 MySQL TokyoTyrant Memcached レプリケーション HDにも書き込む 基本はオンメモリ a 高度なトランザクション/ レプリケーション トランザクション/ロック ロック機構 機構なし エビクションなし HDへの書き込みが保 エビクションによる 証される データ不整合の危険 データ消滅 Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック TokyoTyrantの使い道 • 頻繁に更新されるユーザーステータス – 体力 – アイテム装備情報 – ログイン情報etc. • RDBの機能(ロック、トランザクションなど)が 必要ないデータ Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック 注意点 • TokyoTyrantとMySQLの間の不整合が起こりうる。 • アトミックな更新処理は困難 • ユーザーが得する方向で処理を行なう – 順番が重要 – (1)(2)(3)、どのタイミングで例外が起きてもよいようにする (1)ユーザーの利益になる処理 on TT: 体力回復 (2)MySQLへの更新処理: アイテム消費など (3)ユーザーの損になる処理 on TT: 体力消費 Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック スレーブDBへの分散 スレーブDB スレーブDB マスターDB スレーブDB • スレーブDB: マスターからデータをコピーしたDB(レ プリケーション) • DBへの参照をスレーブDBに逃がすことで、マス ターDBの負荷を減少 Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック スレーブDB スレーブDB マスターDB スレーブDB • 注意点: 最新のデータがあるとはかぎらない • レプリケーション遅延はいつでも起こりうる • スレーブDBを利用できるデータ: – ランキングなど、更新が少なく、遅延が致命的でないデー タ Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック ソーシャルAPIの注意点 • ソーシャルアプリ = SNS APIを使用 – ユーザー情報(ユーザー名、SNSフレンドデータ) – ユーザー投稿テキストの保存 – アクティビティ送信 • SNSが提供するAPIの使用は避けて通れな い Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック ガジェットサーバー ユーザー SAP APIサーバー • ガジェットサーバー経由の認証情報を利用し、API サーバーに問い合わせる • APIとの通信はHTTP – 最短でも数十msのコスト Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック • レスポンスタイムアウトは日常的に起こりえる • API通信がつねに成功する前提でアプリケーション を開発してはいけない タイムアウトの場合、DBコネクションを 危険なコード 数秒間無意味に 数秒間無意味に保持 通信が成功しても、数十 程度のロス 数十ms程度 数十 程度の - トランザクション開始 - => APIに問い合わせ - トランザクション終了 Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック それでも足りない場合 • 水平分割 / 垂直分割を利用 • データベースを複数に分割 – 機能単位の分割(垂直分割) – ユーザー単位など、データ単位の分割(水平分 割) • 注意点は、KVSの利用に似てくる – データ整合性がネック Copyright 2010 KLab Inc. All right reserved.
  • ■リソース有効活用テクニック まとめ • マスターDBへの接続をへらそう – キャッシュサーバーを利用 – 一部の更新をKVSなどNoSQLに分散 – 参照系の処理をスレーブDBに分散 – API通信に気をつけよう – 垂直分割+水平分割の利用 Copyright 2010 KLab Inc. All right reserved.
  • ■最後に・・・ ご静聴ありがとうございました。 不明点はお気軽にお問い合わせください。 Copyright 2010 KLab Inc. All right reserved.