TL

普遍スケーラビリティ則(USL)と競合・一貫性コスト

ノードを足すほど速くなる、は途中で嘘になります。競合コストと一貫性コストの2項からなるUSLで、スループットが頂点を持って減少に転じる地点を予測し、容量計画を数理で裏づけます。

応用DevOpsスケーラビリティ性能容量計画並列処理数理最終更新: 2026-06-21
TL;DR要点だけ先に
  • 1.USLは C(N)=N/(1+σ(N-1)+κN(N-1))。σは逐次化・競合の1次項、κは相互調整(crosstalk/一貫性)の2次項で、κが正なら必ず最大点を過ぎて性能が低下に転じる。
  • 2.Amdahl則はκ=0の特殊ケースで漸近線に張り付くだけ。κが入ると曲線は山型になり、最適ノード数 N* = sqrt((1-σ)/κ) という有限の頂点を持つ。
  • 3.実測スループットをN対並列度で取り、二次回帰でσとκを推定すれば、増設が逆効果になる手前の容量上限を事前に予測できる。

なぜ増設しても速くならなくなるのか

ノードやコアを N 倍にしてもスループットが N 倍にならないことは、誰もが経験的に知っています。問題は「どこまで増やすと割に合うか」「いつ増設が逆効果に転じるか」を数で言えるかどうかです。普遍スケーラビリティ則(Universal Scalability Law, USL)は、この振る舞いを2つの物理的に意味のあるパラメータだけで表現します。

USLの相対容量(並列度 N に対する相対スループット)は次式です。

C(N) = N / (1 + σ(N - 1) + κN(N - 1))
  • σ(シグマ): 競合(contention)。直列化された区間・ロック待ちなど、並列化できない逐次率に相当する1次のコスト。
  • κ(カッパ): コヒーレンシ(coherency / crosstalk)。ノード同士が状態を一致させるための相互調整コスト。組数 N(N-1) に比例する2次のコスト。

C(N) は「N 個のとき1個のときの何倍出るか」を表す無次元量で、理想は C(N)=N(線形)です。分母の2項が、その理想からの乖離を競合と一貫性に切り分けます。

σとκの直感

σは「全員が1本の列に並ぶ」コスト。Nが増えても列は1本なので、効きは1次(N に比例して効率が落ちる)。κは「全員が全員に近況報告する」コスト。N人いれば確認しあう組は N(N-1) 通りあり、効きは2次。だからκは小さくても、N が大きくなると必ず効いてきます。

3つの項が表す3つの世界

分母を見れば、性能がどの領域でどの項に支配されるかが読めます。

意味Nへの依存支配する領域
11ノード分の基準仕事定数ごく小規模
σ(N-1)競合・逐次化1次(線形)中規模:効率が頭打ちに
κN(N-1)一貫性・相互調整2次大規模:性能が低下に転じる

ここで決定的なのは、κの2次項が分母にある以上、N を増やし続ければ分母は分子の N より速く増えるという点です。したがって κ が少しでも正なら、C(N) は必ずどこかで頂点を持ち、その先は右肩下がりになる。増設すればするほど遅くなる「負のスケーリング」は、設計ミスではなく数式が予言する必然です。

Amdahl則・Gustafson則との関係

USLは既存のスケーラビリティ則を内包します。κ=0 と置くと2次項が消え、

κ = 0 のとき:
  C(N) = N / (1 + σ(N - 1))

これは アムダール則・グスタフソン則 のアムダール側そのものです。N を無限大に飛ばすと C(N) は 1/σ という漸近線に収束し、それ以上は増えも減りもしません。つまりアムダール則は「頭打ちはするが悪化はしない」世界を描きます。

モデル式の特徴N→∞の挙動現実との差
線形(理想)C=N発散競合も調整も無視
アムダール(κ=0)1次項のみ1/σ に漸近悪化を表現できない
USL(κが正)2次項あり0へ低下頂点と負スケールを表現

現実の分散システムは一貫性維持のために必ずノード間通信を行うため、κ=0 はまず成り立ちません。一貫性モデル を強くするほど(線形化可能性に近づくほど)κは大きくなり、頂点は手前に来ます。逆に結果整合に緩めれば κ が下がり、より多くのノードまで伸ばせます。USLはこの一貫性とスケーラビリティのトレードオフを、κという1つの係数で定量化していると読めます。

最大スループットを与えるノード数

κ が正のとき頂点が存在するので、その位置を求めます。C(N) を N で微分してゼロと置くと、最適ノード数は次の閉じた式になります。

N* = sqrt( (1 - σ) / κ )
  • κ が大きい(調整コストが重い)ほど N* は小さく、早く頂点に達する。
  • σ が大きいほど分子 1-σ が小さくなり、やはり N* は手前に来る。

たとえば σ=0.03、κ=0.0001 なら、

N* = sqrt((1 - 0.03) / 0.0001)
   = sqrt(0.97 / 0.0001)
   = sqrt(9700) ≒ 98.5

つまり約99ノード付近で相対容量が最大になり、それを超えると総スループットが下がり始める。この1点を知らずに「足りなければ足す」を続けると、コストを払って性能を悪化させることになります。

頂点の先は『足すほど遅い』

N* を超えた領域で増設するのは二重に損です。新しいノードの費用がかかるうえ、追加した相互調整コストが既存ノードの足も引っ張る。負荷が N* に近づいているなら、ノードを足す前に κ を下げる設計変更(シャーディングでノード間調整を減らす、同期点を削る、分散レート制限 のような協調を緩和する)を先に検討すべきです。

実測からσとκを推定する

USLが容量計画で強力なのは、少数の実測点からσとκを回帰で推定できる点です。手順は次のとおりです。

  1. 並列度 N を変えながら(負荷生成のクライアント数やノード数を段階的に増やしながら)、各 N での実測スループット X(N) を取る。
  2. 相対容量 C(N) = X(N) / X(1) を計算する。
  3. 効率の逆数を変形すると N の1次・2次式になるため、二次回帰でσとκを当てはめる。

変形は次の関係を使います。理想からの乖離 N/C(N) - 1N-1 で割ると、

( N/C(N) - 1 ) / (N - 1) = σ + κN

左辺を縦軸、N を横軸に取ると直線になり、切片がσ、傾きがκとして読めます。回帰が直線に乗れば USL がよく当てはまっている証拠で、乗らなければモデル外の要因(GC・ネットワーク飽和など)を疑います。

6〜8点あれば十分

σとκは2パラメータなので、原理的には3点で解けますが、測定ノイズに弱い。N を等間隔でなく対数的に散らして(例 1,2,4,8,16,32,64)6〜8点取り、最小二乗で当てると安定します。X(1) の基準点は特に丁寧に測ること。基準がぶれると全相対値がスケールごとずれます。

推定したσとκを式に戻せば、まだ測っていない N でのスループットを外挿でき、N* も即座に計算できます。これは キャパシティモデリングと需要予測 の入力として直接使えます。実測の頂点まで負荷をかけずとも、低〜中負荷の数点から「この構成は約何ノードで頂点」と先回りで言えるのがUSLの実務価値です。

落とし穴と限界

落とし穴何が起きるか対処
X(1)の測定が雑全相対値がスケールずれ基準点を多数回・低負荷で安定計測
飽和前のデータだけで回帰κを過小評価し頂点を見誤る効率が落ち始める領域まで負荷をかける
係数を恒久定数とみなすコード変更でσ・κは動くリリースごとに再測定・再フィット
負のκを許す回帰物理的に無意味な解σ,κ ともに非負の制約付き回帰を使う

USLは定常状態の平均スループットのモデルであり、テール遅延やバースト挙動までは語りません。レイテンシ分布の裾は 待ち行列理論パーセンタイル統計 の領域です。また係数σ・κはコードやデータ構造に依存する経験値で、ロック粒度を細かくすればσが、調整プロトコルを減らせばκが下がる——改善すべき相手を名指しで指し示すのがUSLの真価であり、固定の物理定数ではありません。

試験・面接での頻出ポイント

「アムダール則とUSLの違いは」。答え:USLはアムダール則に2次のコヒーレンシ項 κN(N-1) を足したもので、κ=0 ならアムダール則に一致する。決定的な差はNを増やしたときの挙動で、アムダールは 1/σ に漸近して頭打ちするだけだが、κ が正のUSLは N* = sqrt((1-σ)/κ) で頂点を持ち、その先は性能が低下に転じる。「増設で逆に遅くなる」現象を表現できるのがUSLである、という点が要旨です。

まとめ

  • USL C(N)=N/(1+σ(N-1)+κN(N-1)) は、競合σ(1次)と一貫性κ(2次)の2項でスケーラビリティを表す。
  • κ が正なら2次項が必ず効き、曲線は山型になる。最大点は N* = sqrt((1-σ)/κ) で、その先は負のスケーリング。
  • アムダール則はκ=0 の特殊ケース。1/σ に漸近するだけで、悪化を表現できない。USLは一貫性を強めるほど κ が増え頂点が手前に来るトレードオフを定量化する。
  • 実測スループットから (N/C(N)-1)/(N-1)=σ+κN の直線回帰でσ・κを推定でき、未測定領域の外挿と N* の予測が可能。
  • σ・κはコード依存の経験値で、リリースごとに再測定する。USLは平均スループットのモデルで、テール遅延は別の道具で扱う。

DevOps/インフラ Article

普遍スケーラビリティ則(USL)と競合・一貫性コストを実務で読む

TL;DRは入口です。実際に選ぶ・使う段階では、何を解決するか、何と比較するか、導入後にどこで詰まるかまで見る必要があります。

解決すること

DevOps

比較で見る軸

難易度: advanced / カテゴリ: DevOps/インフラ / タグ数: 6

導入後に効く点

Amdahl則はκ=0の特殊ケースで漸近線に張り付くだけ。κが入ると曲線は山型になり、最適ノード数 N* = sqrt((1-σ)/κ) という有限の頂点を持つ。

先に潰すリスク

用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。

数字・仕様の読み方
難易度
advanced
カテゴリ
DevOps/インフラ
タグ数
6

判断チェックリスト

  • 自社の用途が「DevOps / スケーラビリティ」に近いか確認する。
  • 強みである「USLは C(N)=N/(1+σ(N-1)+κN(N-1))。σは逐次化・競合の1次項、κは相互調整(crosstalk/一貫性)の2次項で、κが正なら必ず最大点を過ぎて性能が低下に転じる。」が本当に評価軸になるか確認する。
  • 注意点の「用語だけ覚えても、設計・実装・運用でどこに効くかを確認しないと判断を誤る。」を運用で吸収できるか確認する。
  • 公開値や仕様値は、対象プラン・対象機種・対象リージョンまで確認する。
  • 既存システム、ID、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
  • 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。

次に確認する観点

DevOpsスケーラビリティ性能容量計画並列処理DevOpsスケーラビリティ性能