Upgrade to Pro — share decks privately, control downloads, hide ads and more …

デイリーレコード数2億超え! 大規模ゲームサービスに Snowflakeを導入したお話

伊藤寛起
December 04, 2020

デイリーレコード数2億超え! 大規模ゲームサービスに Snowflakeを導入したお話

Data Engineering Study #5「噂のSnowflake Deep Dive」の登壇資料です。

https://forkwell.connpass.com/event/194269/

伊藤寛起

December 04, 2020
Tweet

Other Decks in Technology

Transcript

  1. デイリーレコード数2億超え!

    大規模ゲームサービスに

    Snowflakeを導入したお話


    View full-size slide

  2. アジェンダ

    第一部 : DWH初心者がSnowflake導入してみた話

    第二部 : DWH初心者がSnowflake運用してみた話


    View full-size slide

  3. DWH初心者がSnowflake導入してみた話


    View full-size slide

  4. 導入してみた人

    伊藤 寛起 (いとう ひろき)
    株式会社Colorful Palette / エンジニアリングマネージャー
    - 主にJavaでゲームAPI作ってる人
    - クラウドは専らAWS, BigQueryを使いたいが為にGCPを少々
    - アプリ/インフラで云うと6:4くらい

    View full-size slide

  5. - プロダクト紹介

    - Snowflakeの選定理由

    - 導入段階で大変だったこと

    - 導入決定から運用まで


    DWH初心者がSnowflake導入してみた話


    View full-size slide

  6. プロダクト紹介


    View full-size slide

  7. プロダクト紹介:プロジェクトセカイ

    - 初音ミクのスマートフォンリズムゲーム

    - 大規模参加型のバーチャルライブ機能が特徴

    - 1日に蓄積されるログは2億レコード

    - インフラはAWS


    View full-size slide

  8. Snowflakeの選定理由


    View full-size slide

  9. - コスト

    - パフォーマンス / スケーラビリティ

    - 技術的チャレンジ

    Snowflakeの選定理由 


    View full-size slide

  10. - ウェアハウスの起動時間による課金体系が、スキャンした
    データ量より直感的でわかりやすい

    - インフラがAWSなので、データ転送料が掛からない

    - 連携が楽、使い慣れたAWSのサービスで完結出来る



    コスト 


    View full-size slide

  11. Snowpipe




    (https://www.snowflake.com/blog/snowpipe-serverless-loading-for-streaming-data-2/?lang=jaより引用)

    View full-size slide

  12. - ゲームはとにかく収集するログの量や種類が多い

    - アクセスログ、エラーログ、ユーザ行動ログ...

    - それら大量のログから目的のデータを迅速に抽出する

    必要がある

    - ログの種別毎、扱うオペレータの職種も多様

    - エンジニア、データアナリスト、カスタマーサポート...

    パフォーマンス / スケーラビリティ


    View full-size slide

  13. マイクロパーティション




    (https://docs.snowflake.com/ja/user-guide/tables-clustering-micropartitions.html より引用)

    View full-size slide

  14. 計算 / ストレージ分離




    (https://www.snowflake.com/blog/5-reasons-to-love-snowflakes-architecture-for-your-data-warehouse より引用)

    View full-size slide

  15. ユーザ / ロール



    (https://docs.snowflake.com/en/user-guide/security-access-control-overview.html より引用)

    View full-size slide

  16. ウェアハウス・ロールの設計

    ウェアハウスは用途で分割

     ➡ コストレポートが見やすくコスト最適化がしやすくなる










    ロールは職種で分割

     ➡ やることが職種で別れていたので権限管理がしやすかった

    View full-size slide

  17. - 国内のゲーム業界においては導入事例も少ない

    - チャレンジ出来るときには積極的にチャレンジ

    技術的チャレンジ


    View full-size slide

  18. 導入段階で大変だったこと


    View full-size slide

  19. 導入段階で大変だったこと



    権限設定

     ロールに対して設定するものが多い... 管理方法は考える必要あり




    (https://docs.snowflake.com/en/user-guide/security-access-control-overview.html より引用)

    View full-size slide

  20. 導入決定から運用まで


    View full-size slide

  21. 運用までのスケジュール

    トライアル開始から約1ヶ月で導入が出来ました。

    トライアル期間

    主に権限設計やテーブル設計を行い
    つつの学習期間 

    試験導入

    BIツールと連携しての運用検証 

    9月15日

    9月1日
 9月25日
 9月30日

    リリース!


    View full-size slide

  22. DWH初心者がSnowflake運用してみた話


    View full-size slide

  23. 運用してみた人

    安部 永 (あべ はるか)
    株式会社Colorful Palette / サーバサイドエンジニア
    - 20新卒
    - ログ基盤の実装やアプリの実装を担当
    - アプリ/インフラで云うと5:5くらい

    View full-size slide

  24. DWH初心者がSnowflake運用してみた話



    - ColorfulPaletteでのSnowflakeのユースケース

    - 運用時のトラブルいろいろ

    - 運用してみた所感とまとめ


    View full-size slide

  25. ColorfulPaletteでのSnowflakeのユースケース


    View full-size slide

  26. ColorfulPaletteのログ分析基盤

    EC2

    (アプリサーバ)

    Aurora

    (DB)

    S3

    Kinesis
    Firehose

    追記型データ (ログなど) 

    分析担当

    更新型データ

    (マスタ,ユーザ登録情報など) 

    非定常データ

    (アンケートデータなど) 

    Lambda

    (バッチ)

    アップロード

    S3にjson形式で集約


    View full-size slide

  27. ColorfulPaletteのログ分析基盤

    S3

    Kinesis
    Firehose

    追記型データ (ログなど) 

    更新型データ

    (マスタ,ユーザ登録情報など) 

    分析担当

    非定常データ

    (アンケートデータなど) 

    Lambda

    (バッチ)

    Snowpipe

    EC2

    (管理画面)

    アップロード

    オンライン更新
    (追記型データ)

    オフライン更新 or 外
    部テーブル

    (追記型データ以外) 

    EC2

    (アプリサーバ)

    Aurora

    (DB)


    View full-size slide

  28. 運用時のトラブルいろいろ


    View full-size slide

  29. 運用時トラブルの事例共有 ①

    Snowpipeでのデータ取り込み時の欠損 (不正行のあるJsonの取り込み) 


    → 不正行以降のログが取り込まれない

    正常な例

    {"Id":1,"type":"item"}

    不正な例 (途中で改行) 

    {"Id":1,"type":

    "item"}


    View full-size slide

  30. 運用時トラブルの事例共有 ①

    Snowpipeでのデータ取り込み時の欠損 (不正行のあるJsonの取り込み) 


    → 不正行以降のログが取り込まれない

    正常な例

    {"Id":1,"type":"item"}

    不正な例 (途中で改行) 

    {"Id":1,"type":

    "item"}

    解決策

    COPY文で指定するフォーマットをjsonではなくCSVにする

    & on_error = CONTINUE パラメータを指定


    View full-size slide

  31. 運用時トラブルの事例共有 ②

    Json形式データ使用時のフルスキャン

    元々のテーブル定義:






    => 各レコードがJsonの一行に対応するテーブル構造

      (適当に入れておいても良い感じに

       パーティションしてくれるだろうという考え)


    View full-size slide

  32. 元々のテーブル定義:






    => 各レコードがJsonの一行に対応するテーブル構造


    => 約950MBのデータに対して特定の属性を 

      検索した際に936.2MBのスキャンが発生

      (ほぼフルスキャン,コストも結構かかってしまっていた)


    運用時トラブルの事例共有 ②

    Json形式データ使用時のフルスキャン


    View full-size slide

  33. 運用時トラブルの事例共有 ②

    Json形式データ使用時のフルスキャン


    解決策:Jsonをパースして取り込む + クラスタリングキーを指定


                   + cluster by (activityType)


    
 パース済み
 生データ

    スキャン量
 13.7MB
 936.2MB

    行動タイプのカラム (where句に指定) 


    View full-size slide

  34. 運用時トラブルの事例共有 ②

    Json形式データ使用時のフルスキャン


    解決策:Jsonをパースして取り込む + クラスタリングキーを指定


                   + cluster by (activityType)



    
 パース済み
 生データ

    スキャン量
 13.7MB
 936.2MB

    クラスタリングキーのチューニング
    が大切

    1. where句に指定されるカラム

    2. カーディナリティの”低め”なカラム

    行動タイプのカラム (where句に指定) 


    View full-size slide

  35. 運用してみた所感とまとめ


    View full-size slide

  36. 運用してみた所感

    Snowpipe便利!一方,つまずきポイントも...


    ワークシートの使い勝手が良い!



    範囲選択で実行 

    クエリのプロファイリングをグラフィカルに表示 


    View full-size slide

  37. Snowpipe便利!一方,つまずきポイントも...


    ワークシートの使い勝手が良い!



    Snowflake独自の仕様

    - PK / NOT NULL制約が効かない

    - BigQueryに慣れてると戸惑うかもしれない (関数とか)


    脳死でコストが下がるかというとそうでもない

    - クラスタリングキーのチューニングなどは依然必要



    運用してみた所感


    View full-size slide

  38. 1部2部まとめ

    - Snowflake導入して良かったとこ

    - 手厚いサポート

    - Snowpipe,ワークシートなどの便利な機能

    - 膨大なデータ量に対してもスケーラブル


    - 導入時に一考の余地あり

    - Snowflake独自の仕様はそこそこある

    - ドキュメント読む or 都度サポートに相談

    - 設計が重要

    - ウェアハウスやログ,テーブル,ロール...

    - コストに大きく影響


    View full-size slide

  39. 1部2部まとめ


    - Snowflake導入して良かったとこ

    - 手厚いサポート

    - Snowpipe,ワークシートなどの便利な機能

    - 膨大なデータ量に対してもスケーラブル


    - 導入時に一考の余地あり

    - Snowflake独自の仕様はそこそこある

    - ドキュメント読む or 都度サポートに相談

    - 設計が重要

    - ウェアハウスやログ,テーブル,ロール...

    - コストに大きく影響


    結論:大規模ゲームサービスでも問題なく運用できてます!


    View full-size slide

  40. Thank you 


    View full-size slide