Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

BigQueryを中心としたヴァルハラゲートのログ分析システム

33,945 views

Published on

2016-04-20 Google for Mobile | Game Bootcamp
https://events.withgoogle.com/google-for-mobile-game-boot-camp-tokyo/

Published in: Technology
  • Be the first to comment

BigQueryを中心としたヴァルハラゲートのログ分析システム

  1. 1. Self Introduction 河合 宜文 / Kawai Yoshifumi 株式会社グラニ 取締役CTO 「最先端のC#技術を使った」ゲーム開発 http://grani.jp/ Microsoft MVP for Visual Studio and Development Technologies(C#) http://neue.cc/ Twitter : @neuecc
  2. 2. About Grani モバイル向けゲーム開発企業 2012年設立 代表作として「神獄のヴァルハラゲート」 GREE Platform Awardにて殿堂入り最優秀賞 他、カプコンとの共同開発による「モンスターハンター ロア オブ カード」 iOS/Android用ランアクションゲーム「マンモンラン」など iOS/Android向けに次期タイトル「黒騎士と白の魔王」鋭意開発中
  3. 3. Technology of Valhalla-Gate Windows on Cloud + C# C# 6.0 + .NET Framework 4.6 + ASP.NET MVC 5 によるウェブゲーム クラウド上のWindows Server 2012 R2 上にて稼働 データストアは Aurora(MySQL) + Redis 100 - Application Server 10,000 - Request/Sec 100,000,000 - Page View/Day 30,000 - Database Query/Sec 300,000 - Redis Command/Sec 60 - ms Average Response Time
  4. 4. Technology of Valhalla-Gate Windows on Cloud + C# C# 6.0 + .NET Framework 4.6 + ASP.NET MVC 5 によるウェブゲーム クラウド上のWindows Server 2012 R2 上にて稼働 データストアは Aurora(MySQL) + Redis 100 - Application Server 10,000 - Request/Sec 100,000,000 - Page View/Day 30,000 - Database Query/Sec 300,000 - Redis Command/Sec 60 - ms Average Response Time ゲームの性質 クエリ/コマンド数がやたら多い(ワンクリックが更新) キャッシュを効かせにくい(すぐ更新されるので) という中で、レスポンス時間を極力短くする(サクサク感)
  5. 5. using
  6. 6. using
  7. 7. BigQuery for Windows
  8. 8. Road to BigQuery BigQuery以前のシステム 障害調査 / パフォーマンス系ログ /デバッグ出力 他社ログSaaS ログ量の増大にたいして、とにかくクエリが遅い 独自クエリシンタックスも学習コストが高く、思ったより使われなかった ゲーム行動解析 RDBMSに接続しての内製管理ツール 挿入量の多いものは蓄積/分析対象にできなかった
  9. 9. What do we needs? 求めているもの 解析速度、膨大なログからも素早く解析 ほぼリアルタイムであること、障害調査時に必須 調査系システムと分析計システムを単一でまかないたい メンテナンスフリー、100%マネージドなサービス Windowsフレンドリー これらを唯一満たしたのがBigQuery
  10. 10. Send to BigQuery を、どうやって?
  11. 11. Log Transfer Pipeline ASP.NET EventSource(C#) Event Tracing for Windows(ETW) SLAB BigQuery Plugin(C#) BigQuery
  12. 12. Log Transfer Pipeline ASP.NET EventSource(C#) Event Tracing for Windows(ETW) SLAB BigQuery Plugin(C#) BigQuery アプリケーション本体 Windowsネイティブの イベント転送機構 ETWを受け取り処理する 外部サービスプロセス Streaming Insert
  13. 13. Event Tracing for Windows(ETW) Windowsネイティブのイベント処理機構 マシン内でのログのストリーム伝送に使える 秒間数百万件を余裕で処理する 堅牢!高速! Provider アプリケーションがログをETWに転送 Consumer ログをETWから受けBigQueryに転送
  14. 14. Semantic Logging Application Block ログ収集・転送 SLABというMicrosoftの出しているソフトウェア(inputがETW限定で outputがプラグインで書けるログコレクタ)用に自社製BigQueryプラグイ ン(C#製)を作り、バッファリングしてBigQueryに転送 ASP.NET EventSource(C#) Event Tracing for Windows(ETW) SLAB BigQuery Plugin(C#) BigQuery ETWへの軽量な転送 ETWからの軽量な受信 塊にしてHTTPで転送
  15. 15. Semantic Logging Application Block ログ収集・転送 SLABというMicrosoftの出しているソフトウェア(inputがETW限定で outputがプラグインで書けるログコレクタ)用に自社製BigQueryプラグイ ン(C#製)を作り、バッファリングしてBigQueryに転送 ASP.NET EventSource(C#) Event Tracing for Windows(ETW) SLAB BigQuery Plugin(C#) BigQuery ETWへの軽量な転送 ETWからの軽量な受信 塊にしてHTTPで転送 但し現在は自社製ロギングフレームワーク 「EtwStream」に移行作業開始中 https://github.com/neuecc/EtwStream
  16. 16. StreamingInsert スキーマ自動生成 C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに [Event(1, Keywords = Keywords.Battle, Version = 2)] public void AbilityExecute(long uid, long guildId...) { WriteEvent(1, uid, guildId...); }
  17. 17. StreamingInsert スキーマ自動生成 C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに [Event(1, Keywords = Keywords.Battle, Version = 2)] public void AbilityExecute(long uid, long guildId...) { WriteEvent(1, uid, guildId...); }
  18. 18. StreamingInsert スキーマ自動生成 C#上のメソッド定義(EventSource)をそのままBigQueryのスキーマに [Event(1, Keywords = Keywords.Battle, Version = 2)] public void AbilityExecute(long uid, long guildId...) { WriteEvent(1, uid, guildId...); }
  19. 19. StreamingInsert 末尾YYYYMMDDのテーブル名 TABLE_DATE_RANGEクエリとの相性が良い ウェブコンソールでもまとめて表示してくれる 全てのテーブルに3つのカラム自動付与 timestamp - ログの日時 sourceHost - 送信元サーバーのIP gitRevision - 送信元アプリのGitのリビジョン
  20. 20. Cost Reduction BigQueryの費用感 クエリコストよりストレージとストリーミングインサートが大半を占める ストリーミングインサート対策 一部に挿入量が膨大なテーブルが存在する(一日20億件程度) それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲) ストレージ対策 ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?) 重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て
  21. 21. Cost Reduction BigQueryの費用感 クエリコストよりストレージとストリーミングインサートが大半を占める ストリーミングインサート対策 一部に挿入量が膨大なテーブルが存在する(一日20億件程度) それらはGCSからのバッチインポートで処理(リアルタイム性は若干犠牲) ストレージ対策 ストレージ全体の増加量は月1000億件ぐらい(ン万, ン十万円……?) 重要度の低いログは3ヶ月後にサマライズして1/1000に切り捨て 最近のアップデートで古いものは自動的 に半額になる(Long term storage) が、さすがに1/1000とは値段が全然違 うので変わらずに切り捨て継続中
  22. 22. How to Analyze
  23. 23. Table Details 障害/パフォーマンス調査 リクエスト・ログイン・サーバーエラー・HTTP・SQL・Redisなど通信系 などなどをアプリケーション側でフックして全データ記録 スレッドプール、アプリケーション側からのコネクション数などは1分毎 に取得して記録 ゲーム行動ログ解析 技の実行回数やダメージなど RDBMSには(量が多くて)記録しにくいデータを全部投げる 取れるものは可能な限り全てとり あえず取っておくことで、いざと いうときの速やかな解決が可能
  24. 24. How to Adhoc Query Web Console UI かなり使いやすいウェブコンソールはBigQueryの優れた点 なんのかんので便利なので使う LINQPad + LINQ to BigQuery 内製GUIデスクトップクライアント(OSSとして公開中) Excel(Pivot Table + Pivot Chart) ピボットテーブルは相当強力で、Excelはちゃんと評価されるべきツール
  25. 25. LINQPad / LINQ to BigQuery LINQPad https://www.linqpad.net/ 軽量C# Script Editor(IDE) REPLのように使える LINQ to BigQuery https://github.com/neuecc/LINQ-to-BigQuery/ BigQueryに対するC#のO/Rマッパー LINQPadに対するプラグインも完備
  26. 26. LINQPad / LINQ to BigQuery LINQPad https://www.linqpad.net/ 軽量C# Script Editor(IDE) REPLのように使える LINQ to BigQuery https://github.com/neuecc/LINQ-to-BigQuery/ BigQueryに対するC#のO/Rマッパー LINQPadに対するプラグインも完備 静的型生成 スキーマエクスプローラー グラフ化Dump 入力補完(IntelliSense) コンパイルチェック
  27. 27. BI Dashboard Domo https:/www.domo.com/ クラウド型のBIサービス 評価額20億ドル超えのユニコーン企業 クエリのスケジューリング 美しく分かりやすい可視化 あらゆるデータソース (BigQuery/ MySQL/CSV/JSON API/etc...)との結合と蓄積
  28. 28. 時間帯別の大技使用割合 技の平均ダメージと 回数ランキング
  29. 29. Conslusion
  30. 30. ma to me BigQueryは圧倒的なサービス 速い・使いやすい・柔軟 圧倒的な土管力、その上で何をするか、何でもできそう 安心して使える最高のインフラ、弊社にとってなくてはならないサービス C#との親和性も高い LINQ to BigQueryはとても良い https://github.com/neuecc/LINQ-to-BigQuery/

×