Open12

達人が教える Web パフォーマンスチューニング ISUCON から学ぶ高速化の実践 を読んで

daijiro maeyamadaijiro maeyama

同時並行処理性能は、スループット と呼ぶ。
スループットの単位は、単位時間あたりのリクエスト処理数 rps (requests per second)

daijiro maeyamadaijiro maeyama
  • レイテンシ (Latency): リクエストを送信してから、そのリクエストに対する最初の応答が返ってくるまでの待機時間
  • デュレーション (dulation): あるプロセスや操作が完了するまでに要する全体の時間
daijiro maeyamadaijiro maeyama
  • 垂直スケーリング (スケールアップ・スケールダウン): それぞれのサーバーの性能を向上 (スケールダウンの場合は低下) させてシステムリソースの総量を変える手法
  • 水平スケーリング (スケールアウト・スケールイン): サーバーの数を増やして (スケールインの場合は減らして) システムリソースの総量を変える手法
daijiro maeyamadaijiro maeyama

パフォーマンスチューニング "きほんのき"

  • いきなり手を動かさない
  • 勘で行動しない
  • 「きほんのき」から「きほんのん」まで読んでから、考えて、行動する

推測せず計測する

データ (計測結果) を出発点とすることで、さまざまな理論や知識を適切に利用できる可能性が出る。

公平に比較する

2つのデータを比較するときは、前提条件を揃えて比較しなければならない。

1つずつ比較する

基本的には可能な限り1項目ずつ対策を適用し、それぞれの効果を検証するのが良い。

daijiro maeyamadaijiro maeyama

制約理論 (TOC: Theory of Constraints)

パフォーマンスを妨げている "制約条件 (Constraints)" に集中して改善することで、企業全体の業績改善や向上が期待できるマネジメント手法。

https://toc-consulting.jp/toc/

Web サービスの高速化でいうと、全体のスループットはボトルネックのスループットに律速するという考え方。

daijiro maeyamadaijiro maeyama

パフォーマンスチューニング "きほんのほ"

ほとんどの場合、遅くないを速くするには Web アプリケーションに手を入れる必要がある。

ボトルネックだけアプローチする

パフォーマンスチューニングにおいて必要なことは、ボトルネックを解消すること。

ボトルネックの特定は外側から順番に

一般的な Web サービスにおいてボトルネックになりがちな箇所は CPU、メモリ、ディスク I/O、ネットワーク I/O.

ボトルネックとなっている要素を切り分けていくときは、Web サービスに対するデータ入出力の流れの、一番外側 (UI やユーザーが触れる部分) から順番にやっていく。

ボトルネック対処の基本3パターン

ボトルネックに限らず一般的に、課題の対処方針として解決 / 回避 / 緩和の3種類の考え方がある。

  • 解決: 課題になっている事象を根本から解決
  • 回避: 課題になっている事象がボトルネックにならないよう迂回・省略
  • 緩和: 課題になっている事象の影響を和らげる
daijiro maeyamadaijiro maeyama

パフォーマンスチューニング "きほんのん"

パフォーマンスチューニングの段取りは、以下。

  1. 負荷試験計画
  2. 実施準備
  3. 負荷試行→結果確認→負荷試行→結果確認→改善 ......
daijiro maeyamadaijiro maeyama

外形監視

外形監視は、実際に動作しているアプリケーションを外側の視点からモニタリングする手法。実際に提供しているサービスを利用しているユーザーとほぼ同じ経路を用いてアクセスをおこない、サービスが正しく動作をしているかを確かめることが主な目的。Synthetic Montoring とも呼ばれる。

SaaS として外形監視を提供しているサービス

daijiro maeyamadaijiro maeyama

内部監視

内部監視は、動作しているアプリケーションの内側からモニタリングする手法。内部監視ではユーザーが見えない部分の状態をモニタリングし、それらが意図しない状態になっていないかを確かめることが主な目的。Web サービスにおいて主に動作している Web アプリケーションや OS、ミドルウェアなどのメトリクスを取得し、リソースが過不足なく存在しているかや減少傾向になっていないかを確認する。

具体的には、Web サービスが動作している環境でモニタリング用のデーモンを立ち上げておき、そのデーモンがメトリクスの収集とモニタリングを行う。このデーモンは エージェント と呼ばれる。

daijiro maeyamadaijiro maeyama

モニタリングツールには、大きく分けてプル型 (Pull) とプッシュ型 (Push) の2つのアーキテクチャが存在する。

  • プル型 は、モニタリングアプリケーションがエージェントへメトリクスを取得するアーキテクチャ
  • プッシュ型 は、エージェントがモニタリングアプリケーションへメトリクスを送信するアーキテクチャ

DataDog はプッシュ型。