Slide 1

Slide 1 text

『GO』アプリ データ基盤のログ収集システム コスト削減 2025.01.28 牧瀬 芳太郎 GO株式会社

Slide 2

Slide 2 text

© GO Inc. 2 2 自己紹介 GO株式会社 AI技術開発部 / 牧瀬 芳太郎 タクシーアプリ『GO』データ基盤開発・運用などを担当 Go言語でバックエンド開発もしています 最近は DIY にハマっており、自宅のドアを静音化しました

Slide 3

Slide 3 text

© GO Inc. 3 GOのシステム全体構成と発表箇所 バックエンド 分析環境 バックエンド (App Engine) 次世代 バックエンド (Kubernetes) キュー (Pub/Sub) 分析ログ データ 基盤 (BigQuery) RDB (Cloud SQL) フロントエンド 次世代 サーバログ基盤 (Loki) サーバログ基盤 (Cloud Logging) S3 キュー (Pub/Sub) 車載位置ログ サーバ ログ サーバ ログ ユーザー アプリ ドライバーア プリ 発表箇所

Slide 4

Slide 4 text

© 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

Slide 5

Slide 5 text

© GO Inc. システム構成 5

Slide 6

Slide 6 text

© GO Inc. コスト改善前 注: インサートにかかる料金 6 ※ 車両位置ログのコスト削減については TechTalk #19 発表資料参照 https://speakerdeck.com/mot_techtalk/subnokosutoxue-jian

Slide 7

Slide 7 text

© GO Inc. コスト改善後 7

Slide 8

Slide 8 text

© GO Inc. ● 3つのコンポーネントそれぞれに異なるコスト削減策を適用 ○ Pub/Sub: データの圧縮 ○ Dataflow: Resource based billing の有効化 ○ BigQuery: Storage Write API の利用 コスト削減の取り組み 8

Slide 9

Slide 9 text

© GO Inc. ● Pub/Sub の料金はデータ流量(バイト数)に応じてかかる → 送る側で圧縮し、受ける側(Dataflow) で展開すればコストを下げられる ● 可逆データ圧縮アルゴリズム ○ Zstandard : Meta(旧Facebook)社製の可逆圧縮アルゴリズム。 GZIPと同等の圧縮率で 2倍ほど速い。また圧縮率と速度のバランスを広い範囲で調整できる ● 懸念事項:圧縮処理の追加による、送る側のCPU負荷上昇 ○ サーバーのCPU使用率上昇による、 インフラコスト増加やサービスへの影響 ● 対処:シリアライズフォーマットを JSON から変更する ことによるCPU負荷削減 Pub/Sub: データの圧縮 9

Slide 10

Slide 10 text

© GO Inc. ● 目的: 圧縮処理の追加によるCPU負荷の上昇をなるべく抑えたい ● 前提: ログを送る側のシステムの多くは Go言語で実装されている JSON に代わるフォーマットの検討 → 負荷軽減と工数のバランスを取った結果、 フォーマットの変更は行わず、高速なライブラリに差し替えた ● CPU 使用率上昇を 4% → 1% に抑えられた(推定) フォーマット ライブラリ CPU 負荷 フォーマット 変更工数 スキーマ同期対応工数 JSON 標準 ✗ ◎ ◎ go-json ◯ スキーマレスバイナリフォーマット (BSON, MessagePack, CBOR など) ◯ △ ◎ スキーマコンパイル型のバイナリフォー マット (Protocol Buffers など) ◎ ✗ ✗✗✗ 送受信側双方でスキーマ同期が必要 採用 10

Slide 11

Slide 11 text

© 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

Slide 12

Slide 12 text

© GO Inc. 12 Storage Write API ● 従来の Streaming Insert API に代わる新しい BigQuery インサート用 API (2021年4月〜) ● REST ではなく gRPC を採用し、バイナリ形式・非同期の通信で効率が良い ● コストが安く設定されている(従来の半分) BigQuery: Storage Write API の利用

Slide 13

Slide 13 text

© GO Inc. まとめ ● 3つのコンポーネントそれぞれに異なるコスト削減策を適用 ○ Pub/Sub: データの圧縮 ○ Dataflow: Resource based billing の有効化 ○ BigQuery: Storage Write API の利用 ● 結果として、それぞれのコンポーネントのコストを約半分に削減 13

Slide 14

Slide 14 text

© GO Inc. 文章・画像等の内容の無断転載及び複製等の行為はご遠慮ください