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

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

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

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

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

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

GO Inc. dev

February 05, 2025
Tweet

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