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

Weitere ähnliche Inhalte

Andere mochten auch

linq.js ver.3 and JavaScript in Visual Studio 2012
linq.js ver.3 and JavaScript in Visual Studio 2012linq.js ver.3 and JavaScript in Visual Studio 2012
linq.js ver.3 and JavaScript in Visual Studio 2012
Yoshifumi Kawai
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Yoshifumi Kawai
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
Yoshifumi Kawai
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
Yoshifumi Kawai
 
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
tsukasa obara
 

Andere mochten auch (20)

LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQueryLINQPad with LINQ to BigQuery - Desktop Client for BigQuery
LINQPad with LINQ to BigQuery - Desktop Client for BigQuery
 
How to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatterHow to make the Fastest C# Serializer, In the case of ZeroFormatter
How to make the Fastest C# Serializer, In the case of ZeroFormatter
 
History & Practices for UniRx(EN)
History & Practices for UniRx(EN)History & Practices for UniRx(EN)
History & Practices for UniRx(EN)
 
linq.js ver.3 and JavaScript in Visual Studio 2012
linq.js ver.3 and JavaScript in Visual Studio 2012linq.js ver.3 and JavaScript in Visual Studio 2012
linq.js ver.3 and JavaScript in Visual Studio 2012
 
RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)RuntimeUnitTestToolkit for Unity(English)
RuntimeUnitTestToolkit for Unity(English)
 
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
開発キックオフ時にマネージャが行うべき11のこと ~Visual Studio Online & TFS 使い始めと HOME 画面の構成
 
[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...
[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...
[data analytics showcase] A12: データに隠された課題、ちゃんと見えていますか? by Tableau Japan 株式会社 ...
 
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
Xamarin 概要 @ 「Xamarin」って何? Wエバンジェリストによる特濃「Xamarin」勉強会 Rev2
 
LINQ in Unity
LINQ in UnityLINQ in Unity
LINQ in Unity
 
Introduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGeneratorIntroduction to NotifyPropertyChangedGenerator
Introduction to NotifyPropertyChangedGenerator
 
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方Observable Everywhere  - Rxの原則とUniRxにみるデータソースの見つけ方
Observable Everywhere - Rxの原則とUniRxにみるデータソースの見つけ方
 
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
History & Practices for UniRx UniRxの歴史、或いは開発(中)タイトルの用例と落とし穴の回避法
 
Binary Reading in C#
Binary Reading in C#Binary Reading in C#
Binary Reading in C#
 
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
ZeroFormatterに見るC#で最速のシリアライザを作成する100億の方法
 
NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#NextGen Server/Client Architecture - gRPC + Unity + C#
NextGen Server/Client Architecture - gRPC + Unity + C#
 
RuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for UnityRuntimeUnitTestToolkit for Unity
RuntimeUnitTestToolkit for Unity
 
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
「黒騎士と白の魔王」gRPCによるHTTP/2 - API, Streamingの実践
 
ノンデザイナーのための配色理論
ノンデザイナーのための配色理論ノンデザイナーのための配色理論
ノンデザイナーのための配色理論
 
色彩センスのいらない配色講座
色彩センスのいらない配色講座色彩センスのいらない配色講座
色彩センスのいらない配色講座
 
見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版見やすいプレゼン資料の作り方 - リニューアル増量版
見やすいプレゼン資料の作り方 - リニューアル増量版
 

Mehr von Yoshifumi Kawai

ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
Yoshifumi Kawai
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Yoshifumi Kawai
 

Mehr von Yoshifumi Kawai (13)

A quick tour of the Cysharp OSS
A quick tour of the Cysharp OSSA quick tour of the Cysharp OSS
A quick tour of the Cysharp OSS
 
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in DepthA Brief History of UniRx/UniTask, IUniTaskSource in Depth
A Brief History of UniRx/UniTask, IUniTaskSource in Depth
 
Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#Building the Game Server both API and Realtime via c#
Building the Game Server both API and Realtime via c#
 
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
ライブラリ作成のすゝめ - 事例から見る個人OSS開発の効能
 
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
Unityによるリアルタイム通信とMagicOnionによるC#大統一理論の実現
 
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニーUnity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
Unity C#と.NET Core(MagicOnion) C# そしてKotlinによるハーモニー
 
Implements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNetImplements OpenTelemetry Collector in DotNet
Implements OpenTelemetry Collector in DotNet
 
Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)Deep Dive async/await in Unity with UniTask(EN)
Deep Dive async/await in Unity with UniTask(EN)
 
The Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnionThe Usage and Patterns of MagicOnion
The Usage and Patterns of MagicOnion
 
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFrameworkTrue Cloud Native Batch Workflow for .NET with MicroBatchFramework
True Cloud Native Batch Workflow for .NET with MicroBatchFramework
 
Memory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native CollectionsMemory Management of C# with Unity Native Collections
Memory Management of C# with Unity Native Collections
 
Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)Deep Dive async/await in Unity with UniTask(UniRx.Async)
Deep Dive async/await in Unity with UniTask(UniRx.Async)
 
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭するCEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
CEDEC 2018 最速のC#の書き方 - C#大統一理論へ向けて性能的課題を払拭する
 

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