SlideShare a Scribd company logo
1 of 83
Download to read offline
Copyright © DRECOM Co., Ltd All Rights
Reserved.
RailsDevCon 2010
2010/11/20
Copyright © DRECOM Co., Ltd All Rights Reserved.
2222
自己
紹介
Copyright © DRECOM Co., Ltd All Rights Reserved.
3333
株式会社ドリコム
ソーシャルゲーム開発デザイン部
大仲 能史
@onk
Copyright © DRECOM Co., Ltd All Rights Reserved.
4444
株式会社ドリコム
ソーシャルゲーム開発デザイン部
大仲 能史
@onk
ソーシャルゲームの企画と開発
Copyright © DRECOM Co., Ltd All Rights Reserved.
5555
ソーシャルゲームとは
Copyright © DRECOM Co., Ltd All Rights Reserved.
6666
ソーシャルゲームとは
SNS上にウェブブラウザ上で動作するAPI
などの動作環境(アプリケーション・プ
ラットフォーム)が提供され、これを基盤
として制作されたアプリケーションソフト
を、ソーシャルアプリケーション(Social
Application)と総称し、その中のゲーム
のことをソーシャルゲームと呼ぶ。
Wikipedia より
Copyright © DRECOM Co., Ltd All Rights Reserved.
7777
大規模SNS上の
ソーシャルアプリ開発
重要なポイントは?
Copyright © DRECOM Co., Ltd All Rights Reserved.
8888
•API利用
•人口爆発
•短納期
Copyright © DRECOM Co., Ltd All Rights Reserved.
9999
API利用
• ユーザはSNSにアクセス
• Gadgetサーバがユーザのリクエストを転送
• アプリケーションはAPIに問い合わせてHTML
を生成
Copyright © DRECOM Co., Ltd All Rights Reserved.
10101010
API利用
• 2-legged OAuth
– GadgetサーバからのRequestを検証
– こちらからのRequestに署名
• SNS内の機能を使うときもAPIを利用
– アプリの招待
– Activityの送信
– アプリからMessage送信
– 位置情報取得
– アプリからフォトアップロード
– SNS内のポイントでの決済サービス
– etc
Copyright © DRECOM Co., Ltd All Rights Reserved.
11111111
人口爆発
• mixi
2,190万人
• mbga
2,167万人
• gree
2,246万人
• hangame
3,432万人
• ixen
175万人
• ybga
100万人
Copyright © DRECOM Co., Ltd All Rights Reserved.
12121212
人口爆発
Copyright © DRECOM Co., Ltd All Rights Reserved.
13131313
短納期
2ヶ月でリリースは想定の範囲内
Copyright © DRECOM Co., Ltd All Rights Reserved.
14141414
短納期
毎月2回リリース必須
Copyright © DRECOM Co., Ltd All Rights Reserved.
15151515
どんな対策が必要?
Copyright © DRECOM Co., Ltd All Rights Reserved.
16161616
agenda
• API利用
– デバッグの勘所
• 人口爆発
– 負荷を想定する
– 正しくwebアプリを作る
• 短納期
– 何を犠牲にして何を得るか
– 超高速でPDCAサイクルを回す
Copyright © DRECOM Co., Ltd All Rights Reserved.
17171717
agenda(gem)
• net-http-spy
• masochism
• data_fabrick
• faker
• resque
• activerecord-import
• scribe
Copyright © DRECOM Co., Ltd All Rights Reserved.
18181818
ミドルウェア環境
• MySQL 5.1
• memcached 1.4.5
• Redis 1.2.6 (近々2.0.4に)
• TokyoTyrant 1.1.40
• Ruby 1.9.2-p0
• Rails 3.0.3
• unicorn 2.0.0
• nginx 0.7.67
Copyright © DRECOM Co., Ltd All Rights Reserved.
19191919
基本サーバ構成図
• 仮想化しています
– CPU Xeon L5520
(2.26GHz 8コア)
– メモリ 32GB
• webにCPUを多く割
り当て
• cacheとdbにメモリ
を多く割り当て
Copyright © DRECOM Co., Ltd All Rights Reserved.
20202020
agenda
• API利用
– デバッグの勘所
• 人口爆発
– 何を想定しなければいけないか
– 正しくwebアプリを作るということ
• 短納期
– 何を犠牲にして何を得るか
– 超高速でPDCAサイクルを回す
Copyright © DRECOM Co., Ltd All Rights Reserved.
21212121
たった一つの
大事なこと
Copyright © DRECOM Co., Ltd All Rights Reserved.
22222222
困ったら
request/response
を確認する
Copyright © DRECOM Co., Ltd All Rights Reserved.
23232323
あくまでフィクションです
• リリース1週間前に「課金APIがどうして
も通らない」とprintデバッグしつつ悩ん
でいる人が居るんですよ。フィクション
ですけど。
• 結論から言うと
request.path
を使っていたためにクエリパラメータが
消えてたんですが。
Copyright © DRECOM Co., Ltd All Rights Reserved.
24242424
request/responseを確認する
• 困ったらTCPレイヤまで降りてパケット
を見よう
• ライブラリのエラーメッセージから追う
よりもHTTPのステータスコードを見る
方が早い
– APIが本文にエラーメッセージを入れて返し
てくれている場合も多い
Copyright © DRECOM Co., Ltd All Rights Reserved.
25252525
位置情報を取得しようとしたら
• 住所を取得したつもりが
「東北自動車道」
というものが取れたりとか
• Placemarkが複数返ってきているので他
のPlacemarkの住所を使えばOK
Copyright © DRECOM Co., Ltd All Rights Reserved.
26262626
oauthのverifyが通らない
• 2-legged OAuth
– requestに署名を付けて送る仕組み
• 署名の検証が通らない
– requestを眺めて
– requestから組み立てたBaseStringを確認す
れば
– 違いに気づける
Copyright © DRECOM Co., Ltd All Rights Reserved.
27272727
知ってると便利な小技
• net-http-spy
– Net::HTTPにloggerを仕込む
irb > require "net-http-spy"
irb > Hase.container.handler("john.doe").person
CONNECT: ["localhost", 8080]
GET /social/rest/people/@me/@self?fields=id,name,displayName,thumbnai
lUrl,gender,dateOfBirth&xoauth_requestor_id=john.doe&oauth_consumer_k
ey=http%3A%2F%2Flocalhost%3A8080%2Fsamplecontainer%2Fexamples%2FSocia
lHelloWorld.xml&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1290
204829&oauth_nonce=ROb9UmacNPtJYnaPtE7C7n7yWU8TpMWfHDI4EbY0yY&oauth_v
ersion=1.0&oauth_signature=8Cl2X%2FVDiwVd6gglSZX0s9aWaa4%3D
BODY: Net::HTTPOK
# => {"container_user_id"=>"john.doe", "nickname"=>"Johnny",
"thumbnail_url"=>nil, "gender"=>1, "birthday"=>nil}
Copyright © DRECOM Co., Ltd All Rights Reserved.
28282828
知ってると便利な小技
• WEBrick::HTTPProxyServer
– Proxyを通せる環境なら便利
• tcpflow
– tcpdumpの保存しないバージョン
– webサーバに来るアクセスを覗き見したいと
きとか
Copyright © DRECOM Co., Ltd All Rights Reserved.
29292929
agenda
• API利用
– デバッグの勘所
• 人口爆発
– 負荷を想定する
– 正しくwebアプリを作る
• 短納期
– 何を犠牲にして何を得るか
– 超高速でPDCAサイクルを回す
Copyright © DRECOM Co., Ltd All Rights Reserved.
30303030
負荷を想定する
アクセス数
データ量
Copyright © DRECOM Co., Ltd All Rights Reserved.
31313131
アクセス数
巨大SNSだから
ソーシャルだから
スモールスタートさせてくれない
口コミや招待インセンティブの力は異常
リロードするたびにユーザが増加
いきなりオススメに載ったりも……
Copyright © DRECOM Co., Ltd All Rights Reserved.
32323232
アクセス数
リリース1週間で10万ユーザ突破
1ヶ月で30万ユーザも視野に
1ユーザ平均100クリック/Dayとして
10万ユーザで1,000万imp
Copyright © DRECOM Co., Ltd All Rights Reserved.
33333333
いきなり
1,000万imp
=
230 imp/sec
(ピーク時は平均の2倍)
Copyright © DRECOM Co., Ltd All Rights Reserved.
34343434
230 imp/sec
どれぐらいのサーバ台数が必要なのか
• web/ap
– 230 Throughput / sec
– レスポンスを1秒で返すなら230worker必要
– Railsが200MB弱使うので40GBのメモリが
必要
– メモリ8GBが5台
Copyright © DRECOM Co., Ltd All Rights Reserved.
35353535
230 imp/sec
• cache
– 5query/impとして1,150 QPS出ればOK
– メモリに載っているなら1台で十分
• db
– 10query/impとして2,300 QPS出ればOK
– それなりなマシンなら1台で十分かも?
– 足りないならmaster/slave分散必須
– 更新に耐えられないならpartitioningも必要
Copyright © DRECOM Co., Ltd All Rights Reserved.
36363636
データ量
1Clickで1レコード増加するアクション
– あしあと帳とか
– 課金ログとか
1秒1クリック=2,592,000クリック/月
1ヶ月で数千万レコード超に成長するDB
Copyright © DRECOM Co., Ltd All Rights Reserved.
37373737
データ量
• 捨てられないデータがあるとすぐに
数十GB突破
• メモリに載りきらない
Copyright © DRECOM Co., Ltd All Rights Reserved.
38383838
まずはDBをなんとかする
Copyright © DRECOM Co., Ltd All Rights Reserved.
39393939
メモリに載らないなら
メモリを増やせば
いいじゃない
Copyright © DRECOM Co., Ltd All Rights Reserved.
40404040
master/slave分散
• 更新系のクエリはmasterに、参照系のク
エリはslaveに行くよう分散する
Copyright © DRECOM Co., Ltd All Rights Reserved.
41414141
master/slave分散
• 代表的なgem
– acts_as_readonlyable
– multi_db
– masochizm
– db-charmer
– data_fabric
– octopus
Copyright © DRECOM Co., Ltd All Rights Reserved.
42424242
master/slave分散
• 実装はそこまで難しくない
• Rails 2.2でConnectionPoolingを導入
• initialize
– ActiveRecord::Base.establish_connection
– @connection_poolsにconnectionを保存
• find_by_sql
– ActiveRecord::ConnectionAdapters::Connec
tionHandler#retrieve_connection
Copyright © DRECOM Co., Ltd All Rights Reserved.
43434343
Partitioning
• ゲームは更新系のクエリが多い
– 体力が減った
– 経験値が増えた
– 対戦してアイテムを奪った
• 参照系のクエリをslaveに逃がしても
更新系のクエリだけでmasterのDiskIOが
限界に達する
Copyright © DRECOM Co., Ltd All Rights Reserved.
44444444
垂直分割
• カテゴリごとに別のDBへ
Copyright © DRECOM Co., Ltd All Rights Reserved.
45454545
垂直分割
テーブル単位で別のDB
JOIN不能
Copyright © DRECOM Co., Ltd All Rights Reserved.
46464646
垂直分割
Modelから
has_many
has_one
belongs_to
が消滅
Copyright © DRECOM Co., Ltd All Rights Reserved.
47474747
RDBMSを
リレーショナルに使わない
Copyright © DRECOM Co., Ltd All Rights Reserved.
48484848
水平分割
• 複数のテーブルにデータを分散
Copyright © DRECOM Co., Ltd All Rights Reserved.
49494949
Replication+Partitioning=
Sharding
Copyright © DRECOM Co., Ltd All Rights Reserved.
50505050
Sharding
• 代表的なgem
– db-charmer
– data_fabric
– octopus
Copyright © DRECOM Co., Ltd All Rights Reserved.
51515151
MongoDBにすれば解決
Copyright © DRECOM Co., Ltd All Rights Reserved.
52525252
負荷テスト
以上のようなことが必要かどうかを把握
するために,またどのぐらい改善された
かを確認するために負荷テストは必須な
のです。
どこまで耐えられるのかを知っておくた
めに過負荷テストも必須なのです。
Copyright © DRECOM Co., Ltd All Rights Reserved.
53535353
負荷テスト
リリース前に
50万ユーザが3ヶ月
遊んだ想定のデータを作り
本番想定と同じアクセス負荷をかける
• テストデータ生成に便利なgem
– faker
Copyright © DRECOM Co., Ltd All Rights Reserved.
54545454
負荷テスト
• 何に注目する?
– ThroughPut
– DiskIO
– connection数
Copyright © DRECOM Co., Ltd All Rights Reserved.
55555555
ThroughPutの改善
Copyright © DRECOM Co., Ltd All Rights Reserved.
56565656
最速でユーザに
レスポンスを返す
Copyright © DRECOM Co., Ltd All Rights Reserved.
57575757
最速でレスポンスを返す
• 時間がかかる処理はレスポンスだけ返し
裏で重い処理を実行するという手法
– 画像/Flashの合成
– APIを叩く
– ポイント付与
– クエスト達成判定
– 農園の作物が育ったかどうか
Copyright © DRECOM Co., Ltd All Rights Reserved.
58585858
5秒制限
5秒以内にレスポンスを返せなかったら
アプリをメンテナンス状態にされる
Copyright © DRECOM Co., Ltd All Rights Reserved.
59595959
例えば
• 経営シミュレーションアプリで
TOPページ→マイページ
という遷移
• TOPページへのアクセスを検知して
非同期に売買処理をしながら
TOPページというレスポンスを返す
• マイページに行ったときには完売になっ
た品物の姿が!
Copyright © DRECOM Co., Ltd All Rights Reserved.
60606060
非同期処理
• ユーザのアクセスをトリガーとして動作
• レスポンスは最速で返して裏で処理する
• 代表的なgem
– resque
– delayed_job
Copyright © DRECOM Co., Ltd All Rights Reserved.
61616161
Resque
• 管理画面が秀逸
– キューの状況
– workerの状況
– 失敗したjobの把握や再実行
• Resque Scheduler
– バッチ処理もRailsで管理
• cronの管理から開放
– 毎回Railsの起動をしなくても良い
Copyright © DRECOM Co., Ltd All Rights Reserved.
62626262
その他の工夫
• BULK INSERT
– 複数レコードのINSERTを1回で行う
INSERT INTO `example_table` VALUES
(1, 'aaa', 11),
(2, 'bbb', 22),
(3, 'ccc', 33),
(4, 'ddd', 44);
Copyright © DRECOM Co., Ltd All Rights Reserved.
63636363
BULK INSERT
• いつ使う?
– 友だち関係をDBに保存したい
– 友だち全員に通知を飛ばしたい
• 便利なgem
– activerecord-import
Copyright © DRECOM Co., Ltd All Rights Reserved.
64646464
正しくwebアプリを作る
手抜きかな?
と思いながら
作ったところは
必ず
ボトルネックになります
Copyright © DRECOM Co., Ltd All Rights Reserved.
65656565
例えば
• 1日の回復数の上限に達しているかどうか
を調べるのに履歴テーブルのcountを
取っているとか
– カウンターキャッシュを随所で使う
• ユーザ数×アイテム数だけレコードがで
きるとか
– 間違いなく水平分割必須になる
– 1レコードにJSON化して入れてみる
• like 検索厳禁は当然
Copyright © DRECOM Co., Ltd All Rights Reserved.
66666666
ユーザ数数万程度を
想定しているコードは
全てNG
Copyright © DRECOM Co., Ltd All Rights Reserved.
67676767
正しくwebアプリを作る
• GAEでの制限の意味が分かってくる
– リクエスト処理時間30秒制限
– 関連が存在しない
– 1,000件しか取れない
Copyright © DRECOM Co., Ltd All Rights Reserved.
68686868
正しくwebアプリを作る
• 巨大SNSから流れてくるユーザ数は
エンジニアの甘えを許してくれない
• 自らの技術的水準を飛躍的に向上させる
チャンス
Copyright © DRECOM Co., Ltd All Rights Reserved.
69696969
agenda
• API利用
– デバッグの勘所
• 人口爆発
– 負荷を想定する
– 正しくwebアプリを作る
• 短納期
– 何を犠牲にして何を得るか
– 超高速でPDCAサイクルを回す
Copyright © DRECOM Co., Ltd All Rights Reserved.
70707070
何を犠牲にして速度を得るか
• ドキュメントは最小限に
– Railsっぽい設計ならばER図を見れば中身が
分かる
– RESTっぽい設計ならばURLを見れば中身が
分かる
ER図とURL設計書以外のドキュメントは
(開発中は)管理しない
Copyright © DRECOM Co., Ltd All Rights Reserved.
71717171
何を犠牲にして速度を得るか
• ドキュメントは最小限に
Copyright © DRECOM Co., Ltd All Rights Reserved.
72727272
何を犠牲にして速度を得るか
• 迷う時間を最小限に
– Railsっぽいかどうかを考える
Do You Ride on Rails?
Copyright © DRECOM Co., Ltd All Rights Reserved.
73737373
超高速でPDCAサイクルを回す
• 売上=DAU*Daily ARPU*継続日数
• 注視KPI
– DAU
– ARPU/Day
– 継続日数
– Install数
– バイラル率
Copyright © DRECOM Co., Ltd All Rights Reserved.
74747474
超高速でPDCAサイクルを回す
• Plan, Do, Check, Action
• Do, Actionは速度を上げるのが難しいの
でPとCを最速にすることを考える
Copyright © DRECOM Co., Ltd All Rights Reserved.
75757575
PDCAサイクルを超高速で回す
• Plan最速
– 考えなくても施策が出てくる
– 常に施策を考え続けられる環境を作る
• Check最速
– 何もしなくてもデータが手元に集まってくる
– 常に施策の結果を閲覧できる環境を作る
Copyright © DRECOM Co., Ltd All Rights Reserved.
76767676
いつでも見られる環境を作る
Copyright © DRECOM Co., Ltd All Rights Reserved.
77777777
いつでも見られる環境を作る
Copyright © DRECOM Co., Ltd All Rights Reserved.
78787878
いつでも見られる環境を作る
• ログの集約・収集
• ログ?
– ユーザの行動を記録したもの
• ログインした
• ガチャを回した
• コメントした
• 友達にアイテムを渡した
Copyright © DRECOM Co., Ltd All Rights Reserved.
79797979
いつでも見られる環境を作る
• 1日3GB分のログが溜まっていく
• 数十サーバに分散されているので
集約や収集がとても面倒
• rsync?
• syslog-ng?
• scribe!
Copyright © DRECOM Co., Ltd All Rights Reserved.
80808080
scribe
• facebook++
• scribeサーバ間で勝手に転送してくれる
• エラー時の再送の面倒も見てくれたり
Copyright © DRECOM Co., Ltd All Rights Reserved.
81818181
scribe
• 転送量が心配になってきたので
MessagePackを使おうかなぁと
考えています
Copyright © DRECOM Co., Ltd All Rights Reserved.
82828282
まとめ
• APIには
– 送受信している内容の確認が鉄則
• 人口爆発には
– 負荷試験と監視大事
– データ量に耐えうる設計
– 正しく作ることを常に意識する
• 短納期には
– The Rails Way に任せる
– 動向把握を最速で行うことで意思決定速度UP
Copyright © DRECOM Co., Ltd All Rights Reserved.
83838383
ご清聴ありがとうございました

More Related Content

What's hot

大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~infinite_loop
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたDrecom Co., Ltd.
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~KLab株式会社
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceMakoto Haruyama
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア外道 父
 
利益はデータベースの中にあった!
利益はデータベースの中にあった!利益はデータベースの中にあった!
利益はデータベースの中にあった!infinite_loop
 
Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Maho Takara
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編infinite_loop
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜Drecom Co., Ltd.
 
コンペに勝てる必勝アイテム ソフトレイヤー
コンペに勝てる必勝アイテム ソフトレイヤーコンペに勝てる必勝アイテム ソフトレイヤー
コンペに勝てる必勝アイテム ソフトレイヤーMaho Takara
 
サーバーサイド技術者不足に効くChef
サーバーサイド技術者不足に効くChefサーバーサイド技術者不足に効くChef
サーバーサイド技術者不足に効くChefMaho Takara
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)denatech2016
 
AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄外道 父
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Rubydena_study
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -Tomoya Kabe
 
スペシャリストになるには
スペシャリストになるにはスペシャリストになるには
スペシャリストになるには外道 父
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala外道 父
 

What's hot (20)

大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
大規模ソーシャルゲームを支える技術~PHP+MySQLを使った高負荷対策~
 
ソーシャルアプリを分析してみた
ソーシャルアプリを分析してみたソーシャルアプリを分析してみた
ソーシャルアプリを分析してみた
 
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
Lampで作るソーシャルアプリの負荷対策~アプリとインフラの調和のテクニック~
 
DeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a ServiceDeNAのゲーム開発を支える Game Backend as a Service
DeNAのゲーム開発を支える Game Backend as a Service
 
これからはじめるインフラエンジニア
これからはじめるインフラエンジニアこれからはじめるインフラエンジニア
これからはじめるインフラエンジニア
 
React.js + Flux入門 #scripty02
React.js + Flux入門 #scripty02React.js + Flux入門 #scripty02
React.js + Flux入門 #scripty02
 
利益はデータベースの中にあった!
利益はデータベースの中にあった!利益はデータベースの中にあった!
利益はデータベースの中にあった!
 
Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢Cedec2015 ゲームサーバー基盤の新しい選択肢
Cedec2015 ゲームサーバー基盤の新しい選択肢
 
新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編新入社員のための大規模ゲーム開発入門 サーバサイド編
新入社員のための大規模ゲーム開発入門 サーバサイド編
 
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
CEDEC 2015 Cocos2d-x と社内基盤の付き合い方 〜アップストリームファーストを目指して〜
 
コンペに勝てる必勝アイテム ソフトレイヤー
コンペに勝てる必勝アイテム ソフトレイヤーコンペに勝てる必勝アイテム ソフトレイヤー
コンペに勝てる必勝アイテム ソフトレイヤー
 
サーバーサイド技術者不足に効くChef
サーバーサイド技術者不足に効くChefサーバーサイド技術者不足に効くChef
サーバーサイド技術者不足に効くChef
 
DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)DeNAのゲーム開発を支える技術 (クライアントサイド編)
DeNAのゲーム開発を支える技術 (クライアントサイド編)
 
AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄AWSスポットインスタンスの真髄
AWSスポットインスタンスの真髄
 
Game BaaS Implemented in Ruby
Game BaaS Implemented in RubyGame BaaS Implemented in Ruby
Game BaaS Implemented in Ruby
 
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechconDeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
DeNA内製ゲームエンジンの現状と目指す未来 #denatechcon
 
DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -DeNAインフラの今とこれから - 今編 -
DeNAインフラの今とこれから - 今編 -
 
activerecord-turntable
activerecord-turntableactiverecord-turntable
activerecord-turntable
 
スペシャリストになるには
スペシャリストになるにはスペシャリストになるには
スペシャリストになるには
 
Cloudera impala
Cloudera impalaCloudera impala
Cloudera impala
 

Similar to とあるアプリの開発運用(トラブルシュート)

DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!Drecom Co., Ltd.
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップKoichiro Sumi
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しAkira Nagata
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割Toru Yamaguchi
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbixsoftlayerjp
 
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM,INC
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”Drecom Co., Ltd.
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤Masahiro Kiura
 
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例SORACOM,INC
 
Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Godai Nakamura
 
Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Masatomo Ito
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Dai Utsui
 
zozotown real time linkage infrastructure
zozotown real time linkage infrastructurezozotown real time linkage infrastructure
zozotown real time linkage infrastructureKeisukeTaniguchi2
 
Androidアプリ内蔵広告 徹底解析 公開用
Androidアプリ内蔵広告 徹底解析 公開用Androidアプリ内蔵広告 徹底解析 公開用
Androidアプリ内蔵広告 徹底解析 公開用Lumin Hacker
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Toru Yamaguchi
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) Akihiro Kuwano
 
IBM SoftLayer @ Osc tokyo-2014-fall
IBM SoftLayer @ Osc tokyo-2014-fallIBM SoftLayer @ Osc tokyo-2014-fall
IBM SoftLayer @ Osc tokyo-2014-fallYasushi Osonoi
 
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜SORACOM,INC
 

Similar to とあるアプリの開発運用(トラブルシュート) (20)

DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!DApps のユーザ認証に web3.eth.personal.sign を使おう!
DApps のユーザ認証に web3.eth.personal.sign を使おう!
 
おすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップおすすめインフラ! for スタートアップ
おすすめインフラ! for スタートアップ
 
サーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話しサーバーレスで ガチ本番運用までやってるお話し
サーバーレスで ガチ本番運用までやってるお話し
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
技術選択とアーキテクトの役割
技術選択とアーキテクトの役割技術選択とアーキテクトの役割
技術選択とアーキテクトの役割
 
Automation with SoftLayer and Zabbix
Automation with SoftLayer and ZabbixAutomation with SoftLayer and Zabbix
Automation with SoftLayer and Zabbix
 
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
SORACOM Technology Camp 2018 ベーシックトラック3 | 今日から始めるセンサーデータの可視化
 
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
[CEDEC2014]モバイルゲームにおける社内基盤開発と“実録”
 
認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤認証/認可が実現する安全で高速分析可能な分析処理基盤
認証/認可が実現する安全で高速分析可能な分析処理基盤
 
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
SORACOM Discovery2019 H1新規事業立上げを支援するソラコムチームの活動とユーザー事例
 
Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016Internet of Toilet / Jaws festa 2016
Internet of Toilet / Jaws festa 2016
 
DroidKaigi_devicefarm
DroidKaigi_devicefarmDroidKaigi_devicefarm
DroidKaigi_devicefarm
 
Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18Microsoft open tech night 2020 feb18
Microsoft open tech night 2020 feb18
 
Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会Gmo media.inc 第9回西日本ossの普及を考える会
Gmo media.inc 第9回西日本ossの普及を考える会
 
zozotown real time linkage infrastructure
zozotown real time linkage infrastructurezozotown real time linkage infrastructure
zozotown real time linkage infrastructure
 
Androidアプリ内蔵広告 徹底解析 公開用
Androidアプリ内蔵広告 徹底解析 公開用Androidアプリ内蔵広告 徹底解析 公開用
Androidアプリ内蔵広告 徹底解析 公開用
 
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
Mobage Connect と Identity 関連技術への取り組み - OpenID Summit Tokyo 2015
 
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい) 泥臭い運用から、プログラマブルインフラ構築(に行きたい)
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
 
IBM SoftLayer @ Osc tokyo-2014-fall
IBM SoftLayer @ Osc tokyo-2014-fallIBM SoftLayer @ Osc tokyo-2014-fall
IBM SoftLayer @ Osc tokyo-2014-fall
 
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜
Developer Festa Sapporo 2016 | 誰もがIoTエンジニアになれる 〜IoT 通信プラットフォーム SORACOM〜
 

More from Takafumi ONAKA

不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持Takafumi ONAKA
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方Takafumi ONAKA
 
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発Takafumi ONAKA
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織Takafumi ONAKA
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Takafumi ONAKA
 
pt-query-digest は Perl!!
pt-query-digest は Perl!!pt-query-digest は Perl!!
pt-query-digest は Perl!!Takafumi ONAKA
 
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことアプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことTakafumi ONAKA
 
cpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちはcpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちはTakafumi ONAKA
 
Perl使いの国のRubyist
Perl使いの国のRubyistPerl使いの国のRubyist
Perl使いの国のRubyistTakafumi ONAKA
 
ApplicationTemplateのススメ
ApplicationTemplateのススメApplicationTemplateのススメ
ApplicationTemplateのススメTakafumi ONAKA
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発Takafumi ONAKA
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースTakafumi ONAKA
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビューTakafumi ONAKA
 
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術Takafumi ONAKA
 
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料Takafumi ONAKA
 
マジカルsvnとキュアgit
マジカルsvnとキュアgitマジカルsvnとキュアgit
マジカルsvnとキュアgitTakafumi ONAKA
 
Github Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃんGithub Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃんTakafumi ONAKA
 

More from Takafumi ONAKA (20)

不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持不正のトライアングルとコードベースの治安維持
不正のトライアングルとコードベースの治安維持
 
技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方技術記事を書く&楽しむチームの作り方
技術記事を書く&楽しむチームの作り方
 
グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発グルーミングしながら進めるプロダクト開発
グルーミングしながら進めるプロダクト開発
 
エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織エンジニアの個人ブランディングと技術組織
エンジニアの個人ブランディングと技術組織
 
Hatena::Letの式年遷宮
Hatena::Letの式年遷宮Hatena::Letの式年遷宮
Hatena::Letの式年遷宮
 
pt-query-digest は Perl!!
pt-query-digest は Perl!!pt-query-digest は Perl!!
pt-query-digest は Perl!!
 
アプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のことアプリケーションを作るときに考える25のこと
アプリケーションを作るときに考える25のこと
 
cpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちはcpanfileがRubyでパースできることに気づいた俺たちは
cpanfileがRubyでパースできることに気づいた俺たちは
 
Perl使いの国のRubyist
Perl使いの国のRubyistPerl使いの国のRubyist
Perl使いの国のRubyist
 
ApplicationTemplateのススメ
ApplicationTemplateのススメApplicationTemplateのススメ
ApplicationTemplateのススメ
 
RSpecしぐさ
RSpecしぐさRSpecしぐさ
RSpecしぐさ
 
ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発ふつうのRailsアプリケーション開発
ふつうのRailsアプリケーション開発
 
クローズドソースから始めるオープンソース
クローズドソースから始めるオープンソースクローズドソースから始めるオープンソース
クローズドソースから始めるオープンソース
 
「速」を落とさないコードレビュー
「速」を落とさないコードレビュー「速」を落とさないコードレビュー
「速」を落とさないコードレビュー
 
短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術短期間で新技術を学ぶ技術
短期間で新技術を学ぶ技術
 
Application Bootstrap
Application BootstrapApplication Bootstrap
Application Bootstrap
 
ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料ドリコム×ピクシブ 社会人交換留学説明資料
ドリコム×ピクシブ 社会人交換留学説明資料
 
すこやかRails
すこやかRailsすこやかRails
すこやかRails
 
マジカルsvnとキュアgit
マジカルsvnとキュアgitマジカルsvnとキュアgit
マジカルsvnとキュアgit
 
Github Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃんGithub Enterprise じゃなくてもいいじゃん
Github Enterprise じゃなくてもいいじゃん
 

とあるアプリの開発運用(トラブルシュート)

  • 1. Copyright © DRECOM Co., Ltd All Rights Reserved. RailsDevCon 2010 2010/11/20
  • 2. Copyright © DRECOM Co., Ltd All Rights Reserved. 2222 自己 紹介
  • 3. Copyright © DRECOM Co., Ltd All Rights Reserved. 3333 株式会社ドリコム ソーシャルゲーム開発デザイン部 大仲 能史 @onk
  • 4. Copyright © DRECOM Co., Ltd All Rights Reserved. 4444 株式会社ドリコム ソーシャルゲーム開発デザイン部 大仲 能史 @onk ソーシャルゲームの企画と開発
  • 5. Copyright © DRECOM Co., Ltd All Rights Reserved. 5555 ソーシャルゲームとは
  • 6. Copyright © DRECOM Co., Ltd All Rights Reserved. 6666 ソーシャルゲームとは SNS上にウェブブラウザ上で動作するAPI などの動作環境(アプリケーション・プ ラットフォーム)が提供され、これを基盤 として制作されたアプリケーションソフト を、ソーシャルアプリケーション(Social Application)と総称し、その中のゲーム のことをソーシャルゲームと呼ぶ。 Wikipedia より
  • 7. Copyright © DRECOM Co., Ltd All Rights Reserved. 7777 大規模SNS上の ソーシャルアプリ開発 重要なポイントは?
  • 8. Copyright © DRECOM Co., Ltd All Rights Reserved. 8888 •API利用 •人口爆発 •短納期
  • 9. Copyright © DRECOM Co., Ltd All Rights Reserved. 9999 API利用 • ユーザはSNSにアクセス • Gadgetサーバがユーザのリクエストを転送 • アプリケーションはAPIに問い合わせてHTML を生成
  • 10. Copyright © DRECOM Co., Ltd All Rights Reserved. 10101010 API利用 • 2-legged OAuth – GadgetサーバからのRequestを検証 – こちらからのRequestに署名 • SNS内の機能を使うときもAPIを利用 – アプリの招待 – Activityの送信 – アプリからMessage送信 – 位置情報取得 – アプリからフォトアップロード – SNS内のポイントでの決済サービス – etc
  • 11. Copyright © DRECOM Co., Ltd All Rights Reserved. 11111111 人口爆発 • mixi 2,190万人 • mbga 2,167万人 • gree 2,246万人 • hangame 3,432万人 • ixen 175万人 • ybga 100万人
  • 12. Copyright © DRECOM Co., Ltd All Rights Reserved. 12121212 人口爆発
  • 13. Copyright © DRECOM Co., Ltd All Rights Reserved. 13131313 短納期 2ヶ月でリリースは想定の範囲内
  • 14. Copyright © DRECOM Co., Ltd All Rights Reserved. 14141414 短納期 毎月2回リリース必須
  • 15. Copyright © DRECOM Co., Ltd All Rights Reserved. 15151515 どんな対策が必要?
  • 16. Copyright © DRECOM Co., Ltd All Rights Reserved. 16161616 agenda • API利用 – デバッグの勘所 • 人口爆発 – 負荷を想定する – 正しくwebアプリを作る • 短納期 – 何を犠牲にして何を得るか – 超高速でPDCAサイクルを回す
  • 17. Copyright © DRECOM Co., Ltd All Rights Reserved. 17171717 agenda(gem) • net-http-spy • masochism • data_fabrick • faker • resque • activerecord-import • scribe
  • 18. Copyright © DRECOM Co., Ltd All Rights Reserved. 18181818 ミドルウェア環境 • MySQL 5.1 • memcached 1.4.5 • Redis 1.2.6 (近々2.0.4に) • TokyoTyrant 1.1.40 • Ruby 1.9.2-p0 • Rails 3.0.3 • unicorn 2.0.0 • nginx 0.7.67
  • 19. Copyright © DRECOM Co., Ltd All Rights Reserved. 19191919 基本サーバ構成図 • 仮想化しています – CPU Xeon L5520 (2.26GHz 8コア) – メモリ 32GB • webにCPUを多く割 り当て • cacheとdbにメモリ を多く割り当て
  • 20. Copyright © DRECOM Co., Ltd All Rights Reserved. 20202020 agenda • API利用 – デバッグの勘所 • 人口爆発 – 何を想定しなければいけないか – 正しくwebアプリを作るということ • 短納期 – 何を犠牲にして何を得るか – 超高速でPDCAサイクルを回す
  • 21. Copyright © DRECOM Co., Ltd All Rights Reserved. 21212121 たった一つの 大事なこと
  • 22. Copyright © DRECOM Co., Ltd All Rights Reserved. 22222222 困ったら request/response を確認する
  • 23. Copyright © DRECOM Co., Ltd All Rights Reserved. 23232323 あくまでフィクションです • リリース1週間前に「課金APIがどうして も通らない」とprintデバッグしつつ悩ん でいる人が居るんですよ。フィクション ですけど。 • 結論から言うと request.path を使っていたためにクエリパラメータが 消えてたんですが。
  • 24. Copyright © DRECOM Co., Ltd All Rights Reserved. 24242424 request/responseを確認する • 困ったらTCPレイヤまで降りてパケット を見よう • ライブラリのエラーメッセージから追う よりもHTTPのステータスコードを見る 方が早い – APIが本文にエラーメッセージを入れて返し てくれている場合も多い
  • 25. Copyright © DRECOM Co., Ltd All Rights Reserved. 25252525 位置情報を取得しようとしたら • 住所を取得したつもりが 「東北自動車道」 というものが取れたりとか • Placemarkが複数返ってきているので他 のPlacemarkの住所を使えばOK
  • 26. Copyright © DRECOM Co., Ltd All Rights Reserved. 26262626 oauthのverifyが通らない • 2-legged OAuth – requestに署名を付けて送る仕組み • 署名の検証が通らない – requestを眺めて – requestから組み立てたBaseStringを確認す れば – 違いに気づける
  • 27. Copyright © DRECOM Co., Ltd All Rights Reserved. 27272727 知ってると便利な小技 • net-http-spy – Net::HTTPにloggerを仕込む irb > require "net-http-spy" irb > Hase.container.handler("john.doe").person CONNECT: ["localhost", 8080] GET /social/rest/people/@me/@self?fields=id,name,displayName,thumbnai lUrl,gender,dateOfBirth&xoauth_requestor_id=john.doe&oauth_consumer_k ey=http%3A%2F%2Flocalhost%3A8080%2Fsamplecontainer%2Fexamples%2FSocia lHelloWorld.xml&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1290 204829&oauth_nonce=ROb9UmacNPtJYnaPtE7C7n7yWU8TpMWfHDI4EbY0yY&oauth_v ersion=1.0&oauth_signature=8Cl2X%2FVDiwVd6gglSZX0s9aWaa4%3D BODY: Net::HTTPOK # => {"container_user_id"=>"john.doe", "nickname"=>"Johnny", "thumbnail_url"=>nil, "gender"=>1, "birthday"=>nil}
  • 28. Copyright © DRECOM Co., Ltd All Rights Reserved. 28282828 知ってると便利な小技 • WEBrick::HTTPProxyServer – Proxyを通せる環境なら便利 • tcpflow – tcpdumpの保存しないバージョン – webサーバに来るアクセスを覗き見したいと きとか
  • 29. Copyright © DRECOM Co., Ltd All Rights Reserved. 29292929 agenda • API利用 – デバッグの勘所 • 人口爆発 – 負荷を想定する – 正しくwebアプリを作る • 短納期 – 何を犠牲にして何を得るか – 超高速でPDCAサイクルを回す
  • 30. Copyright © DRECOM Co., Ltd All Rights Reserved. 30303030 負荷を想定する アクセス数 データ量
  • 31. Copyright © DRECOM Co., Ltd All Rights Reserved. 31313131 アクセス数 巨大SNSだから ソーシャルだから スモールスタートさせてくれない 口コミや招待インセンティブの力は異常 リロードするたびにユーザが増加 いきなりオススメに載ったりも……
  • 32. Copyright © DRECOM Co., Ltd All Rights Reserved. 32323232 アクセス数 リリース1週間で10万ユーザ突破 1ヶ月で30万ユーザも視野に 1ユーザ平均100クリック/Dayとして 10万ユーザで1,000万imp
  • 33. Copyright © DRECOM Co., Ltd All Rights Reserved. 33333333 いきなり 1,000万imp = 230 imp/sec (ピーク時は平均の2倍)
  • 34. Copyright © DRECOM Co., Ltd All Rights Reserved. 34343434 230 imp/sec どれぐらいのサーバ台数が必要なのか • web/ap – 230 Throughput / sec – レスポンスを1秒で返すなら230worker必要 – Railsが200MB弱使うので40GBのメモリが 必要 – メモリ8GBが5台
  • 35. Copyright © DRECOM Co., Ltd All Rights Reserved. 35353535 230 imp/sec • cache – 5query/impとして1,150 QPS出ればOK – メモリに載っているなら1台で十分 • db – 10query/impとして2,300 QPS出ればOK – それなりなマシンなら1台で十分かも? – 足りないならmaster/slave分散必須 – 更新に耐えられないならpartitioningも必要
  • 36. Copyright © DRECOM Co., Ltd All Rights Reserved. 36363636 データ量 1Clickで1レコード増加するアクション – あしあと帳とか – 課金ログとか 1秒1クリック=2,592,000クリック/月 1ヶ月で数千万レコード超に成長するDB
  • 37. Copyright © DRECOM Co., Ltd All Rights Reserved. 37373737 データ量 • 捨てられないデータがあるとすぐに 数十GB突破 • メモリに載りきらない
  • 38. Copyright © DRECOM Co., Ltd All Rights Reserved. 38383838 まずはDBをなんとかする
  • 39. Copyright © DRECOM Co., Ltd All Rights Reserved. 39393939 メモリに載らないなら メモリを増やせば いいじゃない
  • 40. Copyright © DRECOM Co., Ltd All Rights Reserved. 40404040 master/slave分散 • 更新系のクエリはmasterに、参照系のク エリはslaveに行くよう分散する
  • 41. Copyright © DRECOM Co., Ltd All Rights Reserved. 41414141 master/slave分散 • 代表的なgem – acts_as_readonlyable – multi_db – masochizm – db-charmer – data_fabric – octopus
  • 42. Copyright © DRECOM Co., Ltd All Rights Reserved. 42424242 master/slave分散 • 実装はそこまで難しくない • Rails 2.2でConnectionPoolingを導入 • initialize – ActiveRecord::Base.establish_connection – @connection_poolsにconnectionを保存 • find_by_sql – ActiveRecord::ConnectionAdapters::Connec tionHandler#retrieve_connection
  • 43. Copyright © DRECOM Co., Ltd All Rights Reserved. 43434343 Partitioning • ゲームは更新系のクエリが多い – 体力が減った – 経験値が増えた – 対戦してアイテムを奪った • 参照系のクエリをslaveに逃がしても 更新系のクエリだけでmasterのDiskIOが 限界に達する
  • 44. Copyright © DRECOM Co., Ltd All Rights Reserved. 44444444 垂直分割 • カテゴリごとに別のDBへ
  • 45. Copyright © DRECOM Co., Ltd All Rights Reserved. 45454545 垂直分割 テーブル単位で別のDB JOIN不能
  • 46. Copyright © DRECOM Co., Ltd All Rights Reserved. 46464646 垂直分割 Modelから has_many has_one belongs_to が消滅
  • 47. Copyright © DRECOM Co., Ltd All Rights Reserved. 47474747 RDBMSを リレーショナルに使わない
  • 48. Copyright © DRECOM Co., Ltd All Rights Reserved. 48484848 水平分割 • 複数のテーブルにデータを分散
  • 49. Copyright © DRECOM Co., Ltd All Rights Reserved. 49494949 Replication+Partitioning= Sharding
  • 50. Copyright © DRECOM Co., Ltd All Rights Reserved. 50505050 Sharding • 代表的なgem – db-charmer – data_fabric – octopus
  • 51. Copyright © DRECOM Co., Ltd All Rights Reserved. 51515151 MongoDBにすれば解決
  • 52. Copyright © DRECOM Co., Ltd All Rights Reserved. 52525252 負荷テスト 以上のようなことが必要かどうかを把握 するために,またどのぐらい改善された かを確認するために負荷テストは必須な のです。 どこまで耐えられるのかを知っておくた めに過負荷テストも必須なのです。
  • 53. Copyright © DRECOM Co., Ltd All Rights Reserved. 53535353 負荷テスト リリース前に 50万ユーザが3ヶ月 遊んだ想定のデータを作り 本番想定と同じアクセス負荷をかける • テストデータ生成に便利なgem – faker
  • 54. Copyright © DRECOM Co., Ltd All Rights Reserved. 54545454 負荷テスト • 何に注目する? – ThroughPut – DiskIO – connection数
  • 55. Copyright © DRECOM Co., Ltd All Rights Reserved. 55555555 ThroughPutの改善
  • 56. Copyright © DRECOM Co., Ltd All Rights Reserved. 56565656 最速でユーザに レスポンスを返す
  • 57. Copyright © DRECOM Co., Ltd All Rights Reserved. 57575757 最速でレスポンスを返す • 時間がかかる処理はレスポンスだけ返し 裏で重い処理を実行するという手法 – 画像/Flashの合成 – APIを叩く – ポイント付与 – クエスト達成判定 – 農園の作物が育ったかどうか
  • 58. Copyright © DRECOM Co., Ltd All Rights Reserved. 58585858 5秒制限 5秒以内にレスポンスを返せなかったら アプリをメンテナンス状態にされる
  • 59. Copyright © DRECOM Co., Ltd All Rights Reserved. 59595959 例えば • 経営シミュレーションアプリで TOPページ→マイページ という遷移 • TOPページへのアクセスを検知して 非同期に売買処理をしながら TOPページというレスポンスを返す • マイページに行ったときには完売になっ た品物の姿が!
  • 60. Copyright © DRECOM Co., Ltd All Rights Reserved. 60606060 非同期処理 • ユーザのアクセスをトリガーとして動作 • レスポンスは最速で返して裏で処理する • 代表的なgem – resque – delayed_job
  • 61. Copyright © DRECOM Co., Ltd All Rights Reserved. 61616161 Resque • 管理画面が秀逸 – キューの状況 – workerの状況 – 失敗したjobの把握や再実行 • Resque Scheduler – バッチ処理もRailsで管理 • cronの管理から開放 – 毎回Railsの起動をしなくても良い
  • 62. Copyright © DRECOM Co., Ltd All Rights Reserved. 62626262 その他の工夫 • BULK INSERT – 複数レコードのINSERTを1回で行う INSERT INTO `example_table` VALUES (1, 'aaa', 11), (2, 'bbb', 22), (3, 'ccc', 33), (4, 'ddd', 44);
  • 63. Copyright © DRECOM Co., Ltd All Rights Reserved. 63636363 BULK INSERT • いつ使う? – 友だち関係をDBに保存したい – 友だち全員に通知を飛ばしたい • 便利なgem – activerecord-import
  • 64. Copyright © DRECOM Co., Ltd All Rights Reserved. 64646464 正しくwebアプリを作る 手抜きかな? と思いながら 作ったところは 必ず ボトルネックになります
  • 65. Copyright © DRECOM Co., Ltd All Rights Reserved. 65656565 例えば • 1日の回復数の上限に達しているかどうか を調べるのに履歴テーブルのcountを 取っているとか – カウンターキャッシュを随所で使う • ユーザ数×アイテム数だけレコードがで きるとか – 間違いなく水平分割必須になる – 1レコードにJSON化して入れてみる • like 検索厳禁は当然
  • 66. Copyright © DRECOM Co., Ltd All Rights Reserved. 66666666 ユーザ数数万程度を 想定しているコードは 全てNG
  • 67. Copyright © DRECOM Co., Ltd All Rights Reserved. 67676767 正しくwebアプリを作る • GAEでの制限の意味が分かってくる – リクエスト処理時間30秒制限 – 関連が存在しない – 1,000件しか取れない
  • 68. Copyright © DRECOM Co., Ltd All Rights Reserved. 68686868 正しくwebアプリを作る • 巨大SNSから流れてくるユーザ数は エンジニアの甘えを許してくれない • 自らの技術的水準を飛躍的に向上させる チャンス
  • 69. Copyright © DRECOM Co., Ltd All Rights Reserved. 69696969 agenda • API利用 – デバッグの勘所 • 人口爆発 – 負荷を想定する – 正しくwebアプリを作る • 短納期 – 何を犠牲にして何を得るか – 超高速でPDCAサイクルを回す
  • 70. Copyright © DRECOM Co., Ltd All Rights Reserved. 70707070 何を犠牲にして速度を得るか • ドキュメントは最小限に – Railsっぽい設計ならばER図を見れば中身が 分かる – RESTっぽい設計ならばURLを見れば中身が 分かる ER図とURL設計書以外のドキュメントは (開発中は)管理しない
  • 71. Copyright © DRECOM Co., Ltd All Rights Reserved. 71717171 何を犠牲にして速度を得るか • ドキュメントは最小限に
  • 72. Copyright © DRECOM Co., Ltd All Rights Reserved. 72727272 何を犠牲にして速度を得るか • 迷う時間を最小限に – Railsっぽいかどうかを考える Do You Ride on Rails?
  • 73. Copyright © DRECOM Co., Ltd All Rights Reserved. 73737373 超高速でPDCAサイクルを回す • 売上=DAU*Daily ARPU*継続日数 • 注視KPI – DAU – ARPU/Day – 継続日数 – Install数 – バイラル率
  • 74. Copyright © DRECOM Co., Ltd All Rights Reserved. 74747474 超高速でPDCAサイクルを回す • Plan, Do, Check, Action • Do, Actionは速度を上げるのが難しいの でPとCを最速にすることを考える
  • 75. Copyright © DRECOM Co., Ltd All Rights Reserved. 75757575 PDCAサイクルを超高速で回す • Plan最速 – 考えなくても施策が出てくる – 常に施策を考え続けられる環境を作る • Check最速 – 何もしなくてもデータが手元に集まってくる – 常に施策の結果を閲覧できる環境を作る
  • 76. Copyright © DRECOM Co., Ltd All Rights Reserved. 76767676 いつでも見られる環境を作る
  • 77. Copyright © DRECOM Co., Ltd All Rights Reserved. 77777777 いつでも見られる環境を作る
  • 78. Copyright © DRECOM Co., Ltd All Rights Reserved. 78787878 いつでも見られる環境を作る • ログの集約・収集 • ログ? – ユーザの行動を記録したもの • ログインした • ガチャを回した • コメントした • 友達にアイテムを渡した
  • 79. Copyright © DRECOM Co., Ltd All Rights Reserved. 79797979 いつでも見られる環境を作る • 1日3GB分のログが溜まっていく • 数十サーバに分散されているので 集約や収集がとても面倒 • rsync? • syslog-ng? • scribe!
  • 80. Copyright © DRECOM Co., Ltd All Rights Reserved. 80808080 scribe • facebook++ • scribeサーバ間で勝手に転送してくれる • エラー時の再送の面倒も見てくれたり
  • 81. Copyright © DRECOM Co., Ltd All Rights Reserved. 81818181 scribe • 転送量が心配になってきたので MessagePackを使おうかなぁと 考えています
  • 82. Copyright © DRECOM Co., Ltd All Rights Reserved. 82828282 まとめ • APIには – 送受信している内容の確認が鉄則 • 人口爆発には – 負荷試験と監視大事 – データ量に耐えうる設計 – 正しく作ることを常に意識する • 短納期には – The Rails Way に任せる – 動向把握を最速で行うことで意思決定速度UP
  • 83. Copyright © DRECOM Co., Ltd All Rights Reserved. 83838383 ご清聴ありがとうございました