普遍スケーラビリティ則(USL)と競合・一貫性コスト
ノードを足すほど速くなる、は途中で嘘になります。競合コストと一貫性コストの2項からなるUSLで、スループットが頂点を持って減少に転じる地点を予測し、容量計画を数理で裏づけます。
- 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への依存 | 支配する領域 |
|---|---|---|---|
| 1 | 1ノード分の基準仕事 | 定数 | ごく小規模 |
| σ(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が容量計画で強力なのは、少数の実測点からσとκを回帰で推定できる点です。手順は次のとおりです。
- 並列度 N を変えながら(負荷生成のクライアント数やノード数を段階的に増やしながら)、各 N での実測スループット X(N) を取る。
- 相対容量
C(N) = X(N) / X(1)を計算する。 - 効率の逆数を変形すると N の1次・2次式になるため、二次回帰でσとκを当てはめる。
変形は次の関係を使います。理想からの乖離 N/C(N) - 1 を N-1 で割ると、
( N/C(N) - 1 ) / (N - 1) = σ + κN
左辺を縦軸、N を横軸に取ると直線になり、切片がσ、傾きがκとして読めます。回帰が直線に乗れば USL がよく当てはまっている証拠で、乗らなければモデル外の要因(GC・ネットワーク飽和など)を疑います。
σとκは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、ネットワーク、監視、バックアップとの接続方法を先に洗い出す。
- 小さく試してから、本番移行、権限設計、障害時手順、コスト監視を決める。