0730 bp study#35発表資料
TRANSCRIPT
自己紹介
• 株式会社gumi CTO• Twitter: horiuchi• 10年くらいウェブアプリ作ってます。
– Perl 10年、Python 1年• ゲームが好きです。
– 今はMGO,MGSPWやってます。• ランニング、筋トレにはまってます。
会社紹介
• 35タイトル以上のアプリを開発・運用• 延べユーザ数10,000,000人• 多プラットフォーム展開
– mixi、モバゲ、GREE• ソーシャルゲームはもちろん、ソーシャル
ライフ分野のアプリも作ってます
ソーシャルゲーム x ソーシャルライフ
ソーシャルライフ系 ソーシャルゲーム系
サポートツール系
・空飛ぶ →マイミク通信簿 340万
Rekoo 650万 →サンシャイン牧場 460万Rakoo 380万 →みんなの農園 160万 →みんなの動物広場 140万
・DeNA →怪盗ロワイヤル 250万・ ウノウ →まちつく 270万・ ベクター 190万 →恋する私の王子様 150万
・ GPS連動アド・ リワードプラス(アドウェイズ)・ poncan(ドリコム)
・ Facebook connect・ mixi connect・ connect with twitter・ gree connect
ファンクラブ同級生掲示板卒業アルバム同級生を探せ
幕末英雄伝キャバウォーズ刑事ハードボイルド現在開発中×2
占い診断系×40+
占い、診断系アプリ
SM診断〜あなたの本性暴きます
浮気性チェック!その愛本物?ニセモノ?
犬タイプvs猫タイプ
草食系 vs 肉食系ザ★おバカ検定
むっつり度ちぇ〜っく!!A型度判定〜本当にA型ですか?
常識・非常識〜あなた常識人?KY診断〜空気読めてる?ナルシスト★診断モテ↑非モテ↓診断
B型度判定〜ジーマーで型B?じじばば検定〜若さ保ってる?フリ派?フラれ派?AB型度判定〜ABですが何か?
O型度判定〜う〜んO型かなぁ?
2人のラブラブ度診断
恋の成就度診断のだめカンタービレ進級試験初級
戦国雑学王決定戦★立志編
のだめマエストロコンクールノーマル?orアブノーマル?
のだめカンタービレ進級試験中級
のだめカンタービレ進級試験上級
戦国クイズ王全国ランキング
合計 約600万ユーザー
ソーシャルゲーム
• 2009年2月 幕末英雄伝 660,000人• 2009年3月 キャバウォーズ 1,300,000人• 2009年4月 刑事ハードボイルド 600,000人• 2009年5,6,7月 多プラットフォーム展開
開発体制
• 1アプリ1チーム体制• Pythonエンジニア 25人(うち女性6人)• 開発者は全員Mac• 開発言語はPython x Django• エディタは自由
(Emacs,vi,Eclipse,NetBeans)• southでスキーマ管理• Gitでソース管理• Capistranoでdeploy• AWSでサービス運用
Why Django?
• これもあった• フルスタック
– コードの統一化• admin
– コードの再利用• application
– 再利用可能な設計• ドキュメント
– 学習コスト、教育コストの削減• スケジュールされたバージョンアップ
GumiとAWS
• 全てのアプリをAWS上で運用• EC2インスタンス140台
– Us-east 100台– Us-west 20台– Singapore 20台
• RDS 12台• 今月の費用は$80,000
調査開始
• ボタンひとつでサーバを増やせるらしい• AutoScalingで負荷に合わせてサーバの台
数を自動で調整できるらしい• RDSという簡単にMySQLを使えるサービ
スがリリースされたらしい
ELB
• 検定導入当初すこぶる順調• ゲームに導入(アクセス量が多い)• ELB自身のスケールアップ時の通信断問題
– 10分間にレスポンスタイム10秒以上のリスクエストが1000件あるとアウト
– 現在はAmazonに依頼しあらかじめスケールアップさせておくことで回避可能
• mod_proxy_balancerに置きかえ
RDS
• お手軽にMySQLサーバを使える• Multi-AZにより、高可用性アップ• ディスク容量は余裕をもたせる• RDSを前提とした設計
– Read memcached– Write Tokyo Tyrant
RDSのいい点
• セットアップが簡単• バックアップが自動• スケールアップが簡単• セキュリティ設定も簡単• パッチも勝手に適用してくれる• 適正なデフォルト設定• Multi-AZにより、高可用性アップ
Multi-AZについて
• 別のzoneにホットスタンバイを作成• フェイルオーバーしてくれる• バックアップ時のI/Oフリーズがなくなる• セキュリティーパッチ時のフリーズもなく
なる• スケールアップ時のフリーズもなくなる• コストは2倍
RDSの悪い点 (Multi-AZ以前)
• レプリケーションできない• タイムゾーンを変更できない• バックアップ時にI/Oフリーズ• スケールアップ時にフリーズ• セキュリティパッチ適用時にフリーズ
RDSのベストプラクティス (Multi-AZ以前)
• レプリケーションできない→ ないものと考える
• タイムゾーンを変更できない→ アプリで吸収
• バックアップ時にI/Oフリーズ→ じっと我慢
• スケールアップ時にフリーズ→ じっと我慢
• セキュリティパッチ適用時にフリーズ→ パッチが出ないことを祈る
RDSの悪い点 (Multi-AZ後)
• レプリケーションできない• タイムゾーンを変更できない• バックアップ時にI/Oフリーズ• スケールアップ時にフリーズ• セキュリティパッチ適用時にフリーズ• コストは2倍に
RDS インスタンスの生成
acmeという名前のインスタンスを生成
$ rds-create-db-instance --db-instance-identifer acme --allocated-storage 5 --db-instance-class db.m1.small --engine MySQL5.1 --master-username foo --master-user-password bar –multi-az true
RDS セキュリティーグループの作成
acme-sgというセキュリティーグループを作成
$rds-create-db-security-group acme-sg --db-security-group-description "security group for acme"
RDS セキュリティーグループの設定
acme-sgに属するRDSのインスタンスがEC2のセキュリティーグループfoobarに属するインスタンスからアクセスできるよう設定する$rds-authorize-db-security-group-
ingress acme-sg --ec2-security-group-name foobar --ec2-security-group-owner-id 0000-0000-0000
RDS セキュリティーグループの設定2
acme-sgに属するRDSのインスタンスがIP xxxx.xxxx.xxxx.xxxxからアクセスできるよう設定する
$ rds-authorize-db-security-group-ingress acme-sg --cidr-ip xxx.xxx.xxx.xxx/32
RDS パラメータグループを作成
acme-pgというパラメータグループを作成
$ rds-create-db-parameter-group acme-pg -e MySQL5.1 -d "parameter group for acme"
RDS カスタムパラメータの定義
$ rds-modify-db-parameter-group foomoo \--parameters="name=slow_query_log, value=ON, method=pending-reboot" \--parameters="name=long_query_time, value=1, method=pending-reboot" \--parameters="name=min_examined_row_limit, value=100, method=pending-reboot" \--parameters="name=character_set_client, value=utf8, method=pending-reboot" \--parameters="name=character_set_connection, value=utf8, method=pending-reboot" \--parameters="name=character_set_database, value=utf8, method=pending-reboot" \--parameters="name=character_set_results, value=utf8, method=pending-reboot" \--parameters="name=character_set_server, value=utf8, method=pending-reboot" \--parameters="name=collation_connection, value=utf8_general_ci, method=pending-reboot" \--parameters="name=collation_server, value=utf8_general_ci, method=pending-reboot" \--parameters="name=connect_timeout, value=2, method=pending-reboot" \--parameters="name=innodb_fush_log_at_trx_commit, value=2, method=pending-reboot"
RDS セキュリティグループ、パラメータグループの適用
acme-sg,acme-pgをacmeに適用
$ rds-modify-db-instance acme -a acme-sg -g acme-pg
RDS インスタンスの確認
できたインスタンスの状態確認$ rds-describe-db-instances acmeDBINSTANCE acme 2010-06-23T03:18:31.240Z
db.m1.small mysql5.1 5 foo available acme.xxxxx.us-east-1.rds.amazonaws.com 3306 us-east-1d 1 y
SECGROUP acme-sg active PARAMGRP acme-pg in-sync
RDS リストア
$ rds-restore-db-instance-to-point-in-time bar -s foo -l
$ rds-restore-db-instance-to-point-in-time bar -s foo -r 2010-05-04T09:20:00Z