Slide 1

Slide 1 text

STRICTLY CONFIDENTIAL GoでContinuous Profilingをやっている話 2022.04.14
 Tatsuhiko Makino
 © 2022 Mirrativ, Inc.

Slide 2

Slide 2 text

自己紹介 ■ 牧野 龍彦
 ⁃ @tatsumack
 
 ■ Mirrativ バックエンドエンジニア
 ⁃ リード兼マネージャー
 ⁃ 前職はDeNAでゲーム開発
 ⁃ 2019年8月に入社して、現在はバックエンド基盤開発


Slide 3

Slide 3 text

Continuous Profiling ■ ざっくり言うと、本番環境で継続的にプロファイリングすること
 ⁃ 本番環境でのみ発生するパフォーマンスの問題を捉えることができる
 ⁃ 継続的にプロファイリングすることで問題が発生する前後の状態を比較 することができる


Slide 4

Slide 4 text

Continuous Profiling ■ Continuous Profilingを行うために必要なこと
 ⁃ 本番環境でオーバーヘッドが少なく安全にプロファイリングを実行できる か
 ⁃ どこにプロファイリング結果を保存するか
 ⁃ 保存したプロファイリング結果をどのようにして検索・抽出するか


Slide 5

Slide 5 text

GoのProfiling Tool ■ pprof
 ⁃ プロファイリングのためのGoの標準ツール
 ⁃ オーバーヘッドが小さく、本番環境でも利用できる
 • pprofの仕組み https://research.swtch.com/pprof


Slide 6

Slide 6 text

Continuous Profilingとは ■ Continuous Profilingを行うために必要なこと【再掲】
 ⁃ 本番環境でオーバーヘッドが少なく安全にプロファイリングを実行できる か
 →Goにはpprofがある
 
 ⁃ どこにプロファイリング結果を保存するか
 ⁃ 保存したプロファイリング結果をどのようにして検索・抽出するか
 →これらを何とかしたい


Slide 7

Slide 7 text

profefe ■ MirrativではprofefeというOSSを導入した
 ⁃ https://github.com/profefe/profefe
 ⁃ パブリッククラウドなど各社サービスを提供しているが、より柔軟な運用 をしたかった


Slide 8

Slide 8 text

profefe ■ profefeの仕組み
 ⁃ Collector と Agent というコンポーネントがある


Slide 9

Slide 9 text

profefe ■ Agent
 ⁃ 定期的にプロファイリングを実行し、Collectorに送信する
 • デフォルトでは1分おきに10秒間プロファイリングを実行
 ⁃ アプリケーションに組み込んで使う
 • 
 
 
 
 ⁃ 異なるインスタンスで同時にプロファイリングが実行されてシステム全体 の性能が劣化することがないように、ランダムにsleepを入れることで、プ ロファイリングの実行タイミングを分散するような工夫がされている


Slide 10

Slide 10 text

profefe ■ Collector
 ⁃ プロファイルを受け取るサービス
 ⁃ プロファイルを保存するAPIと検索・抽出を行うAPIが提供されている
 • プロファイル保存時にlabelを指定することができ、プロファイルを検 索するときの条件に指定することができる
 • 検索APIは検索条件にマッチしたpprofをmergeして返してくれる
 ⁃ プロファイルを保存するストレージは差し替えが可能になっており、AWS S3・Google Cloud Storageなどを選択することができる


Slide 11

Slide 11 text

profefe ■ ミラティブでの運用例
 ⁃ 性能劣化しているエンドポイントを見つける
 • p90を計測して、日次でチェックしている
 
 
 ⁃ profefeで該当期間のpprofを取得する
 • 
 
 ⁃ go tool pprofで分析
 • 


Slide 12

Slide 12 text

まとめ ■ GoはContinuous Profilingを実践しやすい環境が整っている
 ⁃ pprof
 ⁃ profefe
 
 ■ We are hiring!
 ⁃ ミラティブでは高トラフィックなサービスの開発に挑戦したいバックエンド エンジニアを募集しています