25
でソーシャルゲームを 1本出してみた! 株式会社 Zeadle 長谷川祐介 2014-07-28

Google Cloud Platformでソーシャルゲームを1本出してみた!

Embed Size (px)

DESCRIPTION

Google Cloud PlatformでWebSocketを使いまくったソーシャルゲーム基板を作ったのでシェア

Citation preview

Page 1: Google Cloud Platformでソーシャルゲームを1本出してみた!

でソーシャルゲームを 1本出してみた!

株式会社 Zeadle 長谷川祐介 2014-07-28

Page 2: Google Cloud Platformでソーシャルゲームを1本出してみた!

はじめに!

• 単なるエンジニアなので気楽に聞いて下さい。

• また今回の発表の内容はGCP上でGCPの機能を活用しながらいわゆるソーシャルゲームの設計をしてみました!そしてできましたよ!という内容になってます。

• これから導入を検討されている企業のみなさまの良い参考になればと考えています。

Page 3: Google Cloud Platformでソーシャルゲームを1本出してみた!

index

• 会社説明

• 自己紹介

• ゲーム紹介

• GCP上で今回作ったアーキテクチャの説明

Page 4: Google Cloud Platformでソーシャルゲームを1本出してみた!

会社説明

社名 株式会社Zeadle

設立 2013年

代表 川方慎介

社名の由来 Zeal(熱意)とDoodle(いたずら書きをする)

Page 5: Google Cloud Platformでソーシャルゲームを1本出してみた!

自己紹介氏名 長谷川祐介

経歴20代に転々としながら

2010年にgloops(旧gms)へ 2014年4月1日からZeadleへ

職種 いわゆるインフラエンジニア

GCP歴 約4ヶ月

その他 AWSもAzureもVM側だけど数ヶ月以上触ってます。 基本的にはオンプレが多いです。

Page 6: Google Cloud Platformでソーシャルゲームを1本出してみた!

ゲーム紹介

Page 7: Google Cloud Platformでソーシャルゲームを1本出してみた!

ゲームタイトル

Page 8: Google Cloud Platformでソーシャルゲームを1本出してみた!

斬神• 戦国ファンタジー風味のリアルタイムバトル

• Mobage NBPFで提供

• 完全にWeb!

• WebSocketバリバリ仕様

• 同時に20人でボスを叩けます!

• http://ap.zs.zeadle.net/

Page 9: Google Cloud Platformでソーシャルゲームを1本出してみた!

アーキテクチャ

Page 10: Google Cloud Platformでソーシャルゲームを1本出してみた!

Google各種サービス

Compute Engine

Application / WebSocket redis, MySQL etc…

LoadBalancer, Network Firewall metadata, snapshot

CloudDNS DNSはすべて依存

CloudStorage 静的ファイル配信、バックアップなど

BigQuery KPI関連とログ系すべて

Google Analytics もはや説明の必要なし

Page 11: Google Cloud Platformでソーシャルゲームを1本出してみた!

お世話になってるみなさん!

Page 12: Google Cloud Platformでソーシャルゲームを1本出してみた!

インスタンス種別

• Application x 21

• WebSocket x 21

• Entry(事前登録用)x 2

• JobQueue Worker x 7

• API(Platformと連携)x 3

• MariaDB x 11

• Redis x 6

• Redis(JobQueue用)x 2

• Operation Central x 1

• KPI収集 x 1

production/staging合わせて

Page 13: Google Cloud Platformでソーシャルゲームを1本出してみた!

Application/WebSocket

WebSocketインスタンスはlocalにredisが起動

Page 14: Google Cloud Platformでソーシャルゲームを1本出してみた!

WebSocketへの振り分け手法• LoadBalancerを使ってません!いわゆるHTTP Dispatcherを独自で構成してます。

• 監視結果を元に 正常なWebSocketインスタンス情報を更新

• 各レイドボス出現タイミングで選択

• 伐討祭(リアルタイムバトル)ではteam_id単位で利用するインスタンスを選択

• こういったインスタンスの監視を元にしたクラスタ稼働状況はApplicationと連携して自動で更新稼働してます。

Page 15: Google Cloud Platformでソーシャルゲームを1本出してみた!

Redis

• haproxyで処理系から接続

• 各目的別でデータをsharding

• websocketの後ろでpub/sub

• Resque?かわからないけどPythonのJobQueueとしても

Page 16: Google Cloud Platformでソーシャルゲームを1本出してみた!

MariaDB• haproxyで処理系から接続

• lookup, master, contents, historyと複数のスキーマ分割

• userNはlookupでマッピングして分割

• BackupにはPercona XtraBackupとmysqldumpを状況に応じて使い分けそれぞれCloud Storageへバックアップ

• configは完全に自動化

Page 17: Google Cloud Platformでソーシャルゲームを1本出してみた!

Deploy• Active/Standbyの切り替え

• 今のところJenkinsとか使っていません。

• Deployはgit pull

• 切り替えはconsulのkv使っていて1秒程度

• 同じくRollbackも!

• メンテナンス切り替えメンテナ時特定IPだけ許可特定IPはStandbyに通す

• 各種操作はオーケストレーションを通してHipChatへ通知

Page 18: Google Cloud Platformでソーシャルゲームを1本出してみた!

Monitor

•全インスタンス共通でオレオレ仕様になってますw

• configは起動時にmetadataから取得してくるタグをベースに自動生成

• consulから起動するmonitor用のscriptで直接metrixをlibratoへ

• consulのHTTP API health/stateを利用してデータをサマってHipChatへ

•またBigQueryのApplicationLogをHipchatへ(logglyでもできるけど後付なんで

Page 19: Google Cloud Platformでソーシャルゲームを1本出してみた!

Operation Central• さきほど紹介したDeployTool

• PerlのCinnamon

• nginx, haproxy, fluentd, consul, etc…のconfig自動生成

• 各種daemonのコントロールなど

• セットアップなどにも活用

• 各種操作はHipChatへ通知

Page 20: Google Cloud Platformでソーシャルゲームを1本出してみた!

KPI• よく言われるKPI必須項目系以外にも各種進行度などグラフ化

• 短い間隔(現状1分間隔)でMariaDB/Redis/BigQueryを活用してデータ集計まだBigQueryの利用率が低いがリリース期間が短いためこれから活発になっていくと思われる!

• 結果はすべてLibratoへ送りグラフ描画

• またGoogle Analyticsを活用中

Page 21: Google Cloud Platformでソーシャルゲームを1本出してみた!

bootstrap• operation用のインスタンスをsnapshot取得

• 上記snapshotからstartup scriptを利用して作りたいサーバー種別用のtagを付与しながらaddinstanceするだけ

• startup scriptが起動時に各種configを自動生成しながら所定のサーバーに仕上げてくれる形になってます。

• cloud storageにUploadして使っています。

• 上記をまとめたコマンドセットを発行できる仕組みを作って対応してます。

Page 22: Google Cloud Platformでソーシャルゲームを1本出してみた!

運用に利用してる画面

Page 23: Google Cloud Platformでソーシャルゲームを1本出してみた!

斬神インフラの今後の課題

• AutoScaleはまだ未実施

• WebSocket系の構成を見直し、保険をもう少し作りたい。

• consulが恐ろしく便利!ただしちょっと関係ないけどserverがすんごいバッファ食うw(clientは問題無し

Page 24: Google Cloud Platformでソーシャルゲームを1本出してみた!

これからやりたいこと

• stream使いたい! ゲームで導入すると面白いことがいろいろできそうな気がする!

• docker化大好きなんですがリリース準備中はちょっとタイミング悪かったので・・・

• 現在外部依存している部分についてはコストを見ながら徐々にBigQueryなどを活用したものに移行していこうと思ってます。

Page 25: Google Cloud Platformでソーシャルゲームを1本出してみた!

ご清聴ありがとうございました! !

今後ともよろしくお願い致します!