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

CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事...

CEDEC2021 ダウンロード時間を大幅減!~大量のアセットをさばく高速な実装と運用事例の共有~

CEDEC 2021 の講演資料です。
ノートに講演で話した内容をそのまま記載ありますので、
講演内容を完全に把握したい方はダウンロードしての閲覧をお勧めします。

株式会社セガ 開発技術部 山田英伸/竹原涼

SEGADevTech

July 15, 2022
Tweet

More Decks by SEGADevTech

Other Decks in Programming

Transcript

  1. © SEGA ゲームコンテンツ&サービス事業本部 技術本部 開発技術部 ⽵原 涼 ⾃⼰紹介 【登壇歴】 CEDEC

    2020 「技術同⼈作家になろう 〜働き⽅改⾰時代におけるエン ジニアのレベルアップの⼀例〜」 Unite Tokyo 2019 「⼤量のアセットも怖くない︕〜HTTP/2による⾼ 速な通信の実装例〜」 CEDEC 2018、CEDEC 2016、CEDEC 2015 プロダクション関連のラ ウンドテーブル GDC2016 報告会 「GDC16にみる⾃動化技術とテストのトレンド」 祝・HTTP/3 RFC発⾏(間近)︕
  2. © SEGA ゲームコンテンツ&サービス事業本部 技術本部 開発技術部 ⼭⽥ 英伸 ⾃⼰紹介 【登壇歴】 CEDEC

    2020 「技術同⼈作家になろう 〜働き⽅改⾰時代におけるエンジニアのレベルアップの⼀例〜」 Unite Tokyo 2019 「⼤量のアセットも怖くない 〜HTTP/2による⾼速な通信の実装例〜」
  3. © SEGA • 本講演内容の撮影、SNS投稿は OK • 後⽇、CEDIL で資料を公開 • 講演中の質疑が可能です。

    コメントに書き込んでください • 資料に記載されている会社名、システム名、製品名、サービス名は各社の登録商標または商標です • Android ロボットは、Google が作成および提供している作品から複製または変更したものであり、 クリエイティブ・コモンズ表⽰ 3.0 ライセンスに記載された条件に従って使⽤しています
  4. © SEGA • HTTP/2 なら接続数が少なくても、 HTTP/1.1 より圧倒的に早い (待ち時間短縮) HTTP/2による効果 プロトコル

    速度 完了までの時間 備考 HTTP/2 約 280 Mbps 約 3.6 s 1 Connection HTTP/1.1 約 110 Mbps 約 9.2 s 6 Connection HTTP/1.1 約 59 Mbps 約 17.2 s 3 Connection 諸条件 Pixel3 (Android10) 使用 AWS CloudFront 使用(国内リージョン) 総数 2000 ファイル / 1ファイル64KB ※ 300-340Mbps が出る回線にて Wi-Fi 接続状態
  5. © SEGA • ゲーム開発者向け HTTP/2 仕様の説明 • HTTP/2 を使うための実装について •

    HTTP/2 導⼊時の勘所 • HTTP/2 トラブル集 • HTTP/2 の採⽤によるインターネット全体への波及効果 • まとめ 本講演の流れ
  6. © SEGA • HTTP/2 2015年 標準化完了&公開 – HTTP/1.1 を基本的に継承 •

    現在の普及率 約45.6% (w3techs.com 2021/06時点) ゲーム開発者のための HTTP/2
  7. © SEGA • HTTP の Head of Line Blocking:HoLB (HTTP/1.1)

    – 何らかの要因で先⾏リクエスト処理に時間が掛かると 後続のリクエスト処理が遅れてしまう HTTP/1.1の課題 - 多重化 – HTTP/2 の仕様 1.png 2.png 3.png この分の遅れが後続に響く 1.png
  8. © SEGA • HTTP/2 は HTTP の HoLB を回避 –

    複数ストリームの多重化により 後続のリクエストを並⾏に処理可能 多重化でHoLB回避 - 多重化 – HTTP/2 の仕様 1.png この分の遅れは 他のリクエストに影響しない 1.png 2.png 3.png
  9. © SEGA • HTTP/1.1 と HTTP/2 通信状態の⽐較 帯域の利⽤ - 多重化

    – HTTP/2 の仕様 HTTP/1.1 HTTP/2 時間 使⽤可能な 回線帯域 時間 HTTP/1.1 は Keep Alive 有効を想定. 但しファイルサイズが⼩さいと広帯域を活⽤できない.
  10. © SEGA • HTTP/2 は使える帯域を有効活⽤ 帯域の利⽤ - 多重化 – HTTP/2

    の仕様 HTTP/1.1 HTTP/2 時間 使⽤可能な 回線帯域 時間 帯域を活⽤できていない 多重化で帯域をしっかり活⽤
  11. © SEGA l 細かいアセットダウンロードに有効 ü 効率的に回線帯域を使⽤ l クライアント・サーバ間通信 ü RTT

    による待ち時間削減 (モバイル回線 など) ゲームとの関連 – 多重化 – HTTP/2の仕様 RTT RTT APP SRV SRV APP 1RTT 分で複数リクエスト RTT HTTP/1.1 HTTP/2
  12. © SEGA • HTTP ヘッダを圧縮する仕組み (RFC 7541) • 技術要素 ü

    Huffman coding ü Indexing Table uStatic Table uDynamic Table HPACK – HTTP/2 の仕様
  13. © SEGA • 出現頻度の⾼い⽂字に短いビット列を割当てて圧縮 Huffman coding - HPACK – HTTP/2

    の仕様 ※ < > 内はパディング. オクテット境界に揃える
  14. © SEGA • 出現頻度の⾼い⽂字に短いビット列を割当てて圧縮 Huffman coding - HPACK – HTTP/2

    の仕様 HTTP/1.1 HTTP/2 59 BYTES 48 BYTES ※ 参考値です。実際に送信されるバイト数とは異なります 約 81.4% に削減 HTTP/2 63 BYTES
  15. © SEGA • 事前定義されているテーブルのインデックス値を使う Static Table - Indexing Table -

    HPACK – HTTP/2 の仕様 HTTP/2 ※ 参考値です。実際に送信されるバイト数とは異なります 31 BYTES 63 BYTES 約 49.2% に削減
  16. © SEGA • 通信に使⽤したデータをテーブルに登録し、 テーブルのインデックス値を使う Dynamic Table - Indexing Table

    - HPACK – HTTP/2 の仕様 ※ 参考値です。実際に送信されるバイト数とは異なります 5 BYTES 約 8.4% に削減 テーブルに登録 同内容でリクエスト時
  17. © SEGA • HTTP/1.1 の場合 • テキストベースのプロトコル • 解釈の処理で負荷が⾼め ゲームとの関連

    – HPACK/バイナリフレーム HTTP/1.1 200 OK Date: Wed, 30 Jun 2021 02:19:48 GMT Content-Type:image/jpeg Transfer-Encoding: chunked Keep-Alive: timeout=15, max=100 Connection: Keep-Alive 456 Chunk1のデータ .... 0 : の後に空⽩を許可 ヘッダ領域との区切り ヘッダ名は ⼤⽂字⼩⽂字区別なし Chunk終了の CRLF データサイズはまだ不明
  18. © SEGA • HPACK, バイナリフレーム ü API 通信のデータ削減・処理負荷軽減 ゲームとの関連 –

    HPACK/バイナリフレーム HTTP/1.1 200 OK Date: Wed, 30 Jun 2021 02:19:48 GMT Content-Type:image/jpeg Transfer-Encoding: chunked Trailer: Expires Keep-Alive: timeout=15, max=100 Connection: Keep-Alive 456 Chunk1のデータ .... 0 データサイズは先頭 HPACKで圧縮 データサイズは先頭
  19. © SEGA • TCP, RUDP を使えば︖ – HTTP/2をトランスポートレイヤーに持つ gRPC や

    WebSocket – サーバ設定や導⼊コストの圧縮が⾒込める – 対応したサーバレスコンテナの登場 • Cloud Run (Google) 閑話 : API 通信に HTTP を⽤いるメリット
  20. © SEGA • Unity を使⽤している場合 ü Unityが採⽤している C#ランタイム/クラスライブラ リでは HTTP/2

    が利⽤できない ü 前述のC/C++製OSSを⽤いた ネイティブプラグインを実装 ケース2 - HTTP/2 を使う実装 Client
  21. © SEGA • Unreal Engine4 を使⽤している場合 ü Windows で WinHttp

    使⽤時のみ HTTP/2 対応 ü C/C++製OSSを⽤いて対処を考える ケース3 - HTTP/2 を使う実装 Client
  22. © SEGA • C#による ⾃社ゲームエンジンやミドルウェアを利⽤ ü C# 標準 API (HttpClient)

    が HTTP/2 対応 • .NET Framework 4.6 • .NET Core は注意. .NET Core 3.0 で対応(*1) ü 但し、パフォーマンスに懸念 ケース4 - HTTP/2 を使う実装 Client *1 : https://docs.microsoft.com/ja-jp/dotnet/core/whats-new/dotnet-core-3-0#http2-support
  23. © SEGA • 主要なCDNは全て HTTP/2 対応済み︕ ü CloudFront (Amazon) ü

    Cloud CDN (Google) ü Azure CDN (Microsoft Azure) ü Fastly (Fastly) ü Akamai CDN (Akamai) ü CloudFlare (CloudFlare) CDNの選定 - HTTP/2 を使う実装 Server
  24. © SEGA • サーバソフトウェアの選定 – 主要なサーバプログラムは全て HTTP/2 対応済み︕ • IIS,

    nginx, apache など – 前段にあるロードバランサに注意 (ADC含む) • HTTP/2を終端する可能性 ソフトウェア選定 - HTTP/2 を使う実装 Server
  25. © SEGA • 1 Connection内に複数ストリームで通信 – ⾼パケロス環境では 複数Connection HTTP/1.1 より速度が劣ることも

    パケットロス率に注意 Problem! APP SRV 他のストリームも 再送の影響を受ける パケットロスで 通信エラーが発⽣
  26. © SEGA • HTTP/2 を悪環境で利⽤時 ü ⼀定のパケットロス環境では HTTP/1.1 にフォールバックする対策 ü

    フォールバックする場合の割合は、 各プロジェクトで計測して判断が必要 パケットロス率に注意 Solution!
  27. © SEGA • ダウンロードの順序制御に HTTP/2 の優先度制御を使うことはできない – CDN 実装の問題で事実上使えない –

    HTTP として優先度オプションの協議 – 現状 RFC 策定されていない 優先度制御の課題 Problem!
  28. © SEGA • TLS 1.2 以上が必要 (サーバ) – 仕様上 HTTP/2では

    TLS1.2 • AWS ロードバランサ – ALB の https 通信で HTTP/2 が使⽤可能 その他
  29. © SEGA 主要なCDNのストリーム最⼤数 ダウンロード速度が出ない③ Appendix S Amazon CloudFront 128 Azure

    CDN 100 Google Cloud CDN 100 akamai 128 Fastly 100 Cloudflare 256 実測値 + 一部 https://netsec.ccert.edu.cn/files/papers/ndss-2020-cdn-judo.pdf を参考
  30. © SEGA • CDNによってはデータ転送レートに制限が掛 かっていることがある • Amazon CloudFrontの旧制限は40Gbps (※) ü

    200Mbps出る端末の同時ダウンロード可能数 Ø 40Gbps ÷ 200Mbps = 200 (端末) ダウンロード速度が出すぎた S Cause ※2020/5/20に150Gbpsに更新された
  31. © SEGA • タイトル側でファイル上限エラーが発⽣ • HTTP/2ライブラリは以下の80%を上限に使⽤ ü Windows (VCRUNTIME) :

    _getmaxstdio ü Android/iOS : /proc/self/limits ファイルオープンエラー発⽣ Problem! C
  32. © SEGA • 上限数の変更を⾏う実装に修正 ü setrlimit/getrlimitを使⽤ • タイトルのファイル使⽤上限を受け取るように ü setrlimit/getrlimitが効かない端末対策

    • ファイルオープン数の削減 ü オープンタイミングの⾒直し ファイルオープンエラー発⽣ Solution! C
  33. © SEGA • 5G時代に備え、もっと速度を……︕ ü HTTP/2独⾃の設定をカスタマイズすればいけそう︖ • 設定例 ü HPACK

    Dynamic Table設定 ü ストリームの初期ウィンドウサイズ HTTP/2独⾃の設定をしたい Problem! C S
  34. © SEGA • ゲーム業界はインターネットを使わせてもらっ ている⽴場 ü 少しでもインフラへの負荷を減らすべき • 必要になったタイミングで都度ダウンロード ü

    モバイルゲームでは採⽤しているタイトルも多い ü ⾮モバイルゲームは⼤型パッチが主流 データ配信⽅式の転換の提案
  35. © SEGA • ゲームの適正とよく相談する必要はある ü ジャンル ü プラットフォーム • 採⽤メリットも

    ü 従来に⽐べ管理や差し替えが容易になる パッチ配信とトラフィック