第17章: 効率性
効率性は、消費されるリソース単位あたりにシステムが生産する有用な仕事量を測定します。1台のサーバーで毎秒10,000リクエストを処理するシステムは、同じスループットに10台のサーバーを必要とするシステムよりも効率的です。プラネタリスケールでは、小さな効率改善が巨大な節約に複利的に積み重なります——100万台のサーバー全体で10%の改善は、10万台分のサーバーリソースを解放します。
効率性の改善はスタックのあらゆるレイヤーから生まれます。アルゴリズムレベル:ハッシュマップの検索はO(1)対線形スキャンのO(n)。データ構造レベル:キャッシングサービスのLRUエビクションは最も有用なデータをメモリに保持します。プロトコルレベル:ルーティングサービスのコネクションプーリングはリクエストごとの接続オーバーヘッドを排除します。システムレベル:ストレージサービスのコンパクションは削除されたエントリからディスク空間を回収します。
効率性とシンプルさ、信頼性、開発速度などの他の品質との間には緊張関係があります。時期尚早な最適化は、保守やデバッグが困難な複雑なコードを生み出すことが多いです。最も効果的なアプローチは、まずシンプルなシステムを構築し、本番でのパフォーマンスを測定し、実際のボトルネックを特定し(往々にして予想とは異なる場所にある)、外科的に最適化することです。