un

guest
1 / ?
back to lessons

システムを最適化せよ、コンポーネントを最適化すべからず

ハミングのシステム工学の第一法則

ハミングの核心の原則は、Ch. 28から:コンポーネントを最適化すると、システムのパフォーマンスが悪くなる可能性があります。


彼は差動解析器の物語でそれを示しました。2つのユニットが接続されるべきでした。2番目のユニットのアンプリファイアーを改善しました。受け入れ日のテストを実行したとき、y'' + y = 0を解決し、y vs y'をプロットすることを期待していました。円が期待されていましたが、失敗しました。原因:改善されたアンプリファイアーが地面回路を通じてより多くの電流を引きました。元の設計に適していた接地は、現在の電流レベルに耐えられていませんでした。インターフェイスが破壊されたのではなく、コンポーネントが破壊されました。


彼の一般化:ほとんどのシステム障害はインターフェイスに起因しますが、コンポーネントには起因しません。コンポーネントは設計、テスト、認定されます。インターフェイスはあとがきとして設計され、まれにテストされ、独立して認定されません。コンポーネントが変更されると、インターフェイスの動作も変更されます。下流のものは、その新しいインターフェイスに対して設計されていませんでした。


鍵の不均衡性:コンポーネントが10倍向上することで、制約のあるインターフェイスを通じてシステムに10倍の劣化が生じることがあります。向上は追加されません - 向上は減少させます。

教育システムは失敗したシステム工学

ハミングの教育ケース

ハミングはこの原則を教育に適用しました。各教科の成績を最適化する(学生を各教科のテストパフォーマンスを最大化するためにドリルする)ことで、各テストで高い成績を収める学生になるが、学問間の知識を相互に適用する能力が低下する。


各コンポーネント(教科成績)が向上します。システム(教育、統合理解を定義します)が劣化します。各教科間のインターフェイス(学生の知識を横断的に適用する能力)は最適化されませんでした。それが萎縮しました。


これは、実装の偶然ではなく、構造的なものです。測定し、コンポーネントのパフォーマンスを評価することで、コンポーネント最適化が得られます。インターフェイスはコンポーネントのメトリックに透明度がありません。


彼の処方箋:システムのボトルネックを特定し、ボトルネックを解除することで、どのような影響が下流で生じるかを尋ねることです。ボトルネック解除は次のキューが洪水になることを意味します。制約のない最適化は、新しい制約となります。

インターフェイス劣化のトレーシング

Hammingは、コンポーネントの性能を向上させることで、そのインターフェースの振る舞いが変わることを示しました——そして、インターフェースの負荷が以前のものであった場合、残りのシステムは設計されていました。

ソフトウェアから具体的な例を挙げて、1つのコンポーネントの性能を向上させることで、ダウンストリームで問題が発生した場合、その改善されたコンポーネントの名前、影響を受けたインターフェース、およびダウンストリームの失敗前に表示される警告信号を名付けてください。

ノード、キュー、サージスコア

MOAD 工場モデル

あらゆるソフトウェアの依存関係グラフは工場を形成します。各ノードはワークステーションです。各エッジはキューです。仕事はノードのキューに入り、処理され、ダウンストリームのキューに流れます。


各ノードを特徴づける2つのスコアがあります:


Factory Model DAG: workaholic node (high betweenness + surge) and glutton node (high out-degree)

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時間に処理します。

このパッチが適用された後、最もMOAD-0005に脅威を感じる下流システムの名前を述べ、公開する前に段階的に適用する修正方法を説明してください。

停止するとき: 停止条件

停止条件

パッチは、同時にすべての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はパッケージを提供します。

このパッチを公開する前に、3つ確認またはステージングする必要があるものがありますか、それらについて説明して、それぞれをスキップすると何が壊れるかを説明してください。