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

『GO』アプリ データ基盤のログ収集システムコスト削減

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for GO Inc. dev GO Inc. dev
February 05, 2025

『GO』アプリ データ基盤のログ収集システムコスト削減

GO TechTalk #30 クラウドコスト削減 祭り で発表した資料です。

■ YouTube
https://www.youtube.com/live/O_b_wTPloiM

■ connpass
https://jtx.connpass.com/event/341113/

Avatar for GO Inc. dev

GO Inc. dev

February 05, 2025

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2 2 自己紹介 GO株式会社 AI技術開発部 / 牧瀬

    芳太郎 タクシーアプリ『GO』データ基盤開発・運用などを担当 Go言語でバックエンド開発もしています 最近は DIY にハマっており、自宅のドアを静音化しました
  2. © GO Inc. 3 GOのシステム全体構成と発表箇所 バックエンド 分析環境 バックエンド (App Engine)

    次世代 バックエンド (Kubernetes) キュー (Pub/Sub) 分析ログ データ 基盤 (BigQuery) RDB (Cloud SQL) フロントエンド 次世代 サーバログ基盤 (Loki) サーバログ基盤 (Cloud Logging) S3 キュー (Pub/Sub) 車載位置ログ サーバ ログ サーバ ログ ユーザー アプリ ドライバーア プリ 発表箇所
  3. © GO Inc. • 分析ログ: 『GO』アプリシステム各所で発生し た何らかの事象(イベント)と、それに付随する情 報の構造化ログ ◦ イベントID、タイムスタンプ、その他の情報

    • 発生元: APIサーバー、ユーザーアプリ、ドライ バー向けアプリ、各種マイクロサービス etc. • イベントの例: ◦ ユーザーが配車依頼ボタンを押した ◦ 配車が確定した ◦ 決済が行われた • 流量: 1日あたり 2.3TB (2.3億件) • BigQuery に蓄積し、様々な分析に利用 データ基盤のログ収集とは? { "event_id": "start_car_request", "server_t": 1726626000, "request_id": "003fb3e0c853a2af057c283c1", "common": { "age_segment": 20, "car_request_id": 12345678, "car_request_state": "request_confirm", "common_buffer": { "driver_app_type": 0, "pick_up_destination_latitude": 35.XXX, "pick_up_destination_longitude": 139.XXX }, "user_id": 123456 }, "payload": { "area_id": 101, "is_heavy_user": "True", "primary_accept_language": "ja", "user_loyalty_rank": 10, ….. } } 4
  4. © GO Inc. • 3つのコンポーネントそれぞれに異なるコスト削減策を適用 ◦ Pub/Sub: データの圧縮 ◦ Dataflow:

    Resource based billing の有効化 ◦ BigQuery: Storage Write API の利用 コスト削減の取り組み 8
  5. © GO Inc. • Pub/Sub の料金はデータ流量(バイト数)に応じてかかる → 送る側で圧縮し、受ける側(Dataflow) で展開すればコストを下げられる •

    可逆データ圧縮アルゴリズム ◦ Zstandard : Meta(旧Facebook)社製の可逆圧縮アルゴリズム。 GZIPと同等の圧縮率で 2倍ほど速い。また圧縮率と速度のバランスを広い範囲で調整できる • 懸念事項:圧縮処理の追加による、送る側のCPU負荷上昇 ◦ サーバーのCPU使用率上昇による、 インフラコスト増加やサービスへの影響 • 対処:シリアライズフォーマットを JSON から変更する ことによるCPU負荷削減 Pub/Sub: データの圧縮 9
  6. © GO Inc. • 目的: 圧縮処理の追加によるCPU負荷の上昇をなるべく抑えたい • 前提: ログを送る側のシステムの多くは Go言語で実装されている

    JSON に代わるフォーマットの検討 → 負荷軽減と工数のバランスを取った結果、 フォーマットの変更は行わず、高速なライブラリに差し替えた • CPU 使用率上昇を 4% → 1% に抑えられた(推定) フォーマット ライブラリ CPU 負荷 フォーマット 変更工数 スキーマ同期対応工数 JSON 標準 ✗ ◎ ◎ go-json ◯ スキーマレスバイナリフォーマット (BSON, MessagePack, CBOR など) ◯ △ ◎ スキーマコンパイル型のバイナリフォー マット (Protocol Buffers など) ◎ ✗ ✗✗✗ 送受信側双方でスキーマ同期が必要 採用 10
  7. © GO Inc. • Dataflow ストリーミング処理の料金:  ワーカーインスタンス料金 + Streaming Engine

    料金 • Streaming Engine ◦ Dataflow ワーカーの処理の一部を肩代わりするマネージドな分散処理エンジン ◦ データの流量に応じた料金がかかる • Resource based billing model (2024年2月〜) ◦ 従来:データの流量に応じた料金 → 消費した compute units に対する料金 ▪ compute units の詳細な説明は無いが、一定量の CPU・メモリに相当すると考えられる • 料金体系を切り替えるだけで Dataflow コストが約半分になった! Dataflow: Resource based billing の有効化 11
  8. © GO Inc. 12 Storage Write API • 従来の Streaming

    Insert API に代わる新しい BigQuery インサート用 API (2021年4月〜) • REST ではなく gRPC を採用し、バイナリ形式・非同期の通信で効率が良い • コストが安く設定されている(従来の半分) BigQuery: Storage Write API の利用
  9. © GO Inc. まとめ • 3つのコンポーネントそれぞれに異なるコスト削減策を適用 ◦ Pub/Sub: データの圧縮 ◦

    Dataflow: Resource based billing の有効化 ◦ BigQuery: Storage Write API の利用 • 結果として、それぞれのコンポーネントのコストを約半分に削減 13