JJUG CCC 2018 Fall で発表したスライドです。
(SlideShareより移行)
秒間20万リクエストをさばくWeb広告入札システム "Logicad" 開発におけるパフォーマンスチューニング術を紹介します。
私たちが日々観ているWebサイトの広告枠。それは、ページビューごとに広告を表示する権利がオークションにかけられ、自動入札によって枠の買い付けが行われ、入札額の最も高かった入札者の広告だけが表示される、という世界です。国内外の各社が最適な広告をベストな金額で入札・表示するため、日々アルゴリズムの改良やデータセットの変更などを繰り広げており、まさに技術者たちの闘いの世界と言えましょう。私たちも日々様々なコードの追加をしています。一方、そのオークションの開催期間はわずか100ミリ秒なので、その時間内に入札をしなければならないという制約があります。ゆえに、計算量とレスポンスタイムとを両立させることは、私たちにとっての絶対防衛ラインです。
Java 向けのプロファイラは世に数多ありますが、Logicad では Java 向けのツールではなく Linux 上で perf tools を用いてデータを集め、 FlameGraph を用いてアプリケーションのボトルネックを可視化・チューニングし、平均3ミリ秒のレイテンシを維持しています。
FlameGraph は、Netflix の Brendan Gregg 氏が開発したビジュアライズツールであり、perf tools の出力をグラフィカルに出力できます。ハードウェア内部の動作・OSの動作・アルゴリズムの問題などを特定し、このセッションでは Logicad 開発時に perf tools と FlameGraph を活用どのようにチューニングを行なっているか、および実際の Logicad での実例をデモでお見せします。