システムを最適化せよ、コンポーネントを最適化すべからず
ハミングのシステム工学の第一法則
ハミングの核心の原則は、Ch. 28から:コンポーネントを最適化すると、システムのパフォーマンスが悪くなる可能性があります。
彼は差動解析器の物語でそれを示しました。2つのユニットが接続されるべきでした。2番目のユニットのアンプリファイアーを改善しました。受け入れ日のテストを実行したとき、y'' + y = 0を解決し、y vs y'をプロットすることを期待していました。円が期待されていましたが、失敗しました。原因:改善されたアンプリファイアーが地面回路を通じてより多くの電流を引きました。元の設計に適していた接地は、現在の電流レベルに耐えられていませんでした。インターフェイスが破壊されたのではなく、コンポーネントが破壊されました。
彼の一般化:ほとんどのシステム障害はインターフェイスに起因しますが、コンポーネントには起因しません。コンポーネントは設計、テスト、認定されます。インターフェイスはあとがきとして設計され、まれにテストされ、独立して認定されません。コンポーネントが変更されると、インターフェイスの動作も変更されます。下流のものは、その新しいインターフェイスに対して設計されていませんでした。
鍵の不均衡性:コンポーネントが10倍向上することで、制約のあるインターフェイスを通じてシステムに10倍の劣化が生じることがあります。向上は追加されません - 向上は減少させます。
教育システムは失敗したシステム工学
ハミングの教育ケース
ハミングはこの原則を教育に適用しました。各教科の成績を最適化する(学生を各教科のテストパフォーマンスを最大化するためにドリルする)ことで、各テストで高い成績を収める学生になるが、学問間の知識を相互に適用する能力が低下する。
各コンポーネント(教科成績)が向上します。システム(教育、統合理解を定義します)が劣化します。各教科間のインターフェイス(学生の知識を横断的に適用する能力)は最適化されませんでした。それが萎縮しました。
これは、実装の偶然ではなく、構造的なものです。測定し、コンポーネントのパフォーマンスを評価することで、コンポーネント最適化が得られます。インターフェイスはコンポーネントのメトリックに透明度がありません。
彼の処方箋:システムのボトルネックを特定し、ボトルネックを解除することで、どのような影響が下流で生じるかを尋ねることです。ボトルネック解除は次のキューが洪水になることを意味します。制約のない最適化は、新しい制約となります。
インターフェイス劣化のトレーシング
Hammingは、コンポーネントの性能を向上させることで、そのインターフェースの振る舞いが変わることを示しました——そして、インターフェースの負荷が以前のものであった場合、残りのシステムは設計されていました。
ノード、キュー、サージスコア
MOAD 工場モデル
あらゆるソフトウェアの依存関係グラフは工場を形成します。各ノードはワークステーションです。各エッジはキューです。仕事はノードのキューに入り、処理され、ダウンストリームのキューに流れます。
各ノードを特徴づける2つのスコアがあります:
Surge スコア = スピードアップ × インデグリ
このボトルネックが解放される際に、どれくらいの量の作業が下流に流入するか。インデグリが5(上流の依存関係がすべてそのノードに供給される)で、スピードアップが100×の場合、下流で500×のスルージが生成される。
Betweenness = インデグリ + アウトデグリ
このワークステーションの中心性は、全体のフローのどれくらいであるかを示す。Betweennessが高ければ、多くのパスがこのノードを通じて通過する。
2つのアーキタイプ:
Workaholic node: 高いBetweenness、ハイ・スルージ・スコア。ボトルネックである。このノードを解除すると、同時に下流のすべてのシステムが同時に崩壊する。
Glutton node: 高いアウトデグリ、低いスルージ・スコア。ノードに供給されるすべての作業を消費する。ボトルネックは通じてのものではなく、通じてのスループットではない。作業が入って、nothing exits、そして、ノードは「忙しい」と報告される。
MOAD-0001 & MOAD-0005: A Coupling Case
The GHC Case
GHCの依存関係解決器にMOAD-0001のパッチが適用される前:N=50,000の依存関係が17分でビルド。後:10秒。スピードアップ:100×。
下流で何が起こるか?17分のバッチ到着に合わせて自己を調整していたすべてのビルド・キャッシュ、アーティファクト・ストア、およびCIランナーは、100×の完成ビルドを1時間あたり受け取るようになる。
これがMOAD-0005です:キャッシュ・スタンピード・デフィクト。すべてのキャッシュ・キーが同時に失われる理由は、新しい到着率に対してキャッシュが前ウォーミングされていないため。
このカップリングは偶然ではなく、構造的なものです。インデグリ>1のO(N²)→O(N)のスピードアップは、スルージ・スコアが1を超える結果となります。スルージ・スコアが100を超えると、MOAD-0005候補とされる。
Staging Before Disclosure
ビルドシステムは、1,000のパッケージ依存グラフを1時間に処理します。MOAD-0001のグラフトラバースのパッチを適用し、ビルド時間を60分から30秒に短縮(120×のスピードアップ)。システムは、120,000のグラフを1時間に処理します。
停止するとき: 停止条件
停止条件
パッチは、同時にすべての4つの条件を満たす場合に、停止条件を満たします:
1. パッチがライブシステムに存在する (マージ済み、デプロイ済み)
2. ダウンストリーム影響の看守が割り当てられていない
3. ダウンストリームの欠陥 (MOAD-0005) 解決されていない
4. スピードアップ >= 100×
すべての4つ同時に = 赤ちゃんが泣く。マージする前にチームを割り当ててください、後で行わないでください。
看守が割り当てられていないノードは、ワーカーがなく、ワークステーションとして動作します。仕事が蓄積されます。誰かが倒れます。パーマコンピュータの原則: ディスパッチアルゴリズムを修正する前に、ドライバーをステージングする必要があります。3つのドライバー、3,000万人の人々: アルゴリズムをブロックすることで、より速い配信ではなく、待機中のリクエストの雷鳴する群ができるためです。
WALL-E: 豊富者 & ワーカホリック
WALL-Eモデル
PixarのWALL-Eは、工場モデル障害の最も明確な形を示しています。フリッパーに乗った豊富者たち、摩りなく食べる。ワーカホリック - WALL-E、EVE - ステーションで死ぬことで、フィードが続行されるように働きます。
フリッパーノード (ホバーチャイルドで人間がいる) は、入力されるすべてを消費し、何も生成しない最大の出度を持っています。スルージュスコアは0です - それは蓄積されていない出力を持っていません。ただただ消費します。
ワーカホリックノード (WALL-E) は、すべてが通過する最大の間接度を持っています。入力をすべて吸収し、唯一の出力を生成します。スルージュスコアは、より速いモデルで置き換されると、同時にすべてのダウンストリームキューに洪水が流れる場合があります。
WALL-Eシステムの欠陥は、豊富者たちではなく、欠落している看守です。ワークステーションをバランスするための誰かが割り当てられていない。アルゴリズムを実行する前に、容量をステージングする必要があります。
pipケース: 前投稿チェックリスト
Pythonのpipの依存解決器でMOAD-0001を発見しました。測定されたスピードアップ: 200×。pipは約4000万回のインストール毎日に実行されます。PyPIはパッケージを提供します。