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

『GO』アプリ バックエンドサーバのコスト削減

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/

GO Inc. dev

February 05, 2025
Tweet

More Decks by GO Inc. dev

Other Decks in Programming

Transcript

  1. © GO Inc. 2 自己紹介 GO株式会社 バックエンド開発部 / 武村 直和

    タクシーアプリ『GO』のバックエンドサーバの開発・運用を担当。 シーズン券を買って毎週スキー場に通ってます!
  2. © GO Inc. 4 GOのシステム全体構成と発表箇所 バックエンド 分析環境 バックエンド (App Engine)

    次世代 バックエンド (Kubernetes) キュー (Pub/Sub) 分析ログ データ 基盤 (BigQuery) RDB (Cloud SQL) フロントエンド 次世代 サーバログ基盤 (Loki) サーバログ基盤 (Cloud Logging) S3 キュー (Pub/Sub) 車載位置ログ サーバ ログ サーバ ログ ユーザー アプリ ドライバーア プリ 発表箇所
  3. © GO Inc. 6 • Cloud SQLでは既存のEnterpriseプランに加えて、パフォーマン ス・可用性が向上したEnterprise Plusが追加 ◦

    DBバージョン更新時のダウンタイムが10秒未満に短縮 ◦ これまでは数ヶ月に一度、DB更新のために設けていた メンテナンス時間が不要に • 代償としてDBコストが約6割増 課題:契約プランをアップグレードしたらコスト上昇
  4. © GO Inc. 8 調査:改善すべきクエリの特定。Query Insightの利用 • Query InsightはCloud SQL上で負荷の高いクエリを可視化できる

    ◦ 公式ガイド : https://cloud.google.com/sql/docs/mysql/using-query-insights • 負荷の高いクエリは以下の特徴を持つ ◦ 平均実行時間が長い(平均スキャン行数が多い) ◦ 呼び出し回数が多い Query Insightの例(正規化されたクエリ毎の統計情報)
  5. © GO Inc. • 平均実行時間の長いクエリに対する改善 ◦ SQLチューニングでパフォーマンスを改善 ▪ 平均スキャン行数 が

    返された平均行数 よりも多い場合はクエリ効率が悪い ため、なるべく近い行数になるようにインデックスを追加 ▪ より高度なチューニングが必要な場合はQuery Insightの公式ガイドや SQL実行計画(Explain)を参照 • 呼び出し回数の多いクエリに対する改善 ◦ キャッシュを利用することで呼び出し回数を削減 ▪ データの変更頻度に比べて呼び出し頻度が多いクエリに適用 ▪ Google CloudのフルマネージドキャッシュサービスであるMemorystoreを利用 • Redis、Valkey、Memcacheを利用可 • https://cloud.google.com/memorystore 9 改善:インデックス追加、キャッシュ利用 etc.
  6. © GO Inc. • App Engineでユーザー・ドライバー向けアプリからのリクエストを処理して いる • App Engineはリクエストに比例してオートスケールでインスタンス台数が増

    えるため、利用の増加に伴いによりGoogle Cloudコストの約20%を占めるよ うになっていた 12 課題:利用者数の増加に伴いコストが上昇
  7. © GO Inc. 13 • App Engineは、各インスタンスの同時リクエスト数及びCPU使用率 を減らすことで、オートスケールの台数を減らすことができる ◦ 同時リクエスト数低減

    ▪ リクエスト処理時間を短縮 →前章でクエリの処理時間を短縮したことで、CPUのI/O Waitを削減 ◦ CPU使用率低減 ▪ CPU消費が多い処理の特定・改善 →Cloud Profilerを利用して調査 作戦:リクエスト処理時間短縮とCPU消費削減
  8. © GO Inc. 14 調査:改善すべき処理の特定。Cloud Profilerの利用 • Cloud ProfilerはGoogle Cloud上で実行するプログラムのプロ

    ファイリングデータを簡単に取得・可視化できるツール ◦ https://cloud.google.com/profiler/docs/about-profiler • CPU時間が多い処理は以下 ◦ 通信処理 ▪ 大部分がDBアクセス ◦ 通信後のJSON処理
  9. © GO Inc. 15 改善:通信削減、JSON処理ライブラリ変更 • 通信削減は前章の呼び出し回数削減と同様 ◦ キャッシュ化 •

    JSON処理ライブラリ変更 ◦ 別サービスへのHTTP通信のレスポンスJSONをGo構造体に変換する ために使用するUnmarshal関数のCPU負荷が高い ◦ 標準ライブラリから goccy/go-json に変更 ▪ 標準ライブラリとの互換性を持たせたうえで最速を目指して開発された ▪ JSON処理時間が短くなることでCPU時間を削減できる ◦ JSON処理のCPU時間が75%減
  10. © GO Inc. • Cloud SQLのクエリ改善によりレプリカインスタンスを削減して コストを約20%削減 • App Engineのスケーリング抑制により、コストを約20%削減

    • Query InsightやCloud ProfilerなどのGoogle Cloudのツールを用 いることにより、少ない手間で調査が可能 17 まとめ