Optimieren Sie das System, nicht seine Komponenten
Hamming's Erstes Regel von System Engineering
Hamming's grundlegende Prinzip aus Kapitel 28: Wenn Sie die Komponenten optimieren, werden Sie wahrscheinlich die Systemleistung verschlechtern.
Er veranschaulichte dies mit der Geschichte des Differenzialanalyseurs. Zwei Einheiten sollten miteinander verbunden werden. Die Konstrukteure verbesserten die Verstärker in der zweiten Einheit. Am Tag der Akzeptanz lieferte Hamming den Standardtest - lösen Sie y'' + y = 0, zeichnen Sie y gegen y', erwarten Sie einen Kreis. Es schlug fehl. Die Ursache: Verbesserter Verstärker zog mehr Strom durch den Grundschaltkreis. Der Grundschaltkreis war für das ursprüngliche Design ausgelegt. Es war nicht für den neuen Strompegel zertifiziert. Die Schnittstelle brach nicht die Komponente.
Seine allgemeine Aussage: Die meisten Systemfehler gehen auf Schnittstellen zurück, nicht auf Komponenten. Komponenten werden entworfen, getestet und zertifiziert. Schnittstellen werden als Nachdenken entworfen, selten getestet und nie unabhängig zertifiziert. Wenn eine Komponente geändert wird, ändert sich ihr Schnittstellenverhalten. Nichts, was weiter unten ist, wurde für dieses neue Schnittstellenverhalten entworfen.
Schlüsselungleichheit: Eine 10-fache Verbesserung einer Komponente kann eine 10-fache Verschlechterung des Systems verursachen, wenn die Komponente eine eingeschränkte Schnittstelle speist. Die Verbesserung fügt nicht hinzu - sie zieht ab.
Das Bildungssystem als gescheitertes System Engineering
Hamming's Bildungsfall
Hamming wandte dieses Prinzip auf das Bildungswesen an. Die Optimierung einzelner Fachleistungen - Schüler zum Maximieren der Leistung in jedem Fach trainieren - erzeugt Schüler, die gut in einzelnen Tests abschneiden, aber Kenntnisse aus verschiedenen Disziplinen nicht miteinander verbinden können.
Jede Komponente (Fachleistung) verbessert sich. Das System (Bildung, definiert als integriertes Verständnis) verschlechtert sich. Die Schnittstelle zwischen den Fächern - die Fähigkeit der Schüler, das Wissen in verschiedenen Domänen anzuwenden - wurde nie optimiert. Es atrophierte.
Dies ist kein Unfall der Umsetzung. Es ist strukturiert. Wenn Sie Komponentenleistung messen und belohnen, erhalten Sie Komponentenoptimierung. Schnittstellen sind den Komponentenmetriken entgangen.
Seine Empfehlung: Finden Sie die Engpässe im System und fragen Sie dann, was sich in der nächsten Warteschlange ergibt, wenn Sie sie entfernen. Engpassentfernung führt zur Überschwemmung der nächsten Warteschlange. Eine unbeschränkte Optimierung wird zu einer neuen Einschränkung.
Nachverfolgung der Verschlechterung von Schnittstellen
Hamming zeigte, dass die Verbesserung eines Komponents sein Verhaltensmuster an der Schnittstelle ändert - und der Rest des Systems wurde auf das alte Verhaltensmuster an der Schnittstelle ausgelegt.
Knoten, Warteschlangen, Überschuss-Scores
Ein MOAD Fabrikmodell
Jede Software-Abhängigkeitsgraph bildet eine Fabrik. Jeder Knoten ist eine Arbeitsstation. Jede Kante ist eine Warteschlange. Die Arbeit tritt in die Warteschlange eines Knotens ein, wird verarbeitet und fließt zu den downstream-Warteschlangen.
Zwei Scores charakterisieren jeden Knoten:
Sturmscore = Beschleunigung × Eingrad
Wie viel Arbeit flutet nach unten, wenn dieser Engpass geclert wird. Ein Knoten mit Eingrad 5 (5 aufsteigende Abhängigkeiten, die alle in ihn hineinfüttern) und eine 100-fache Beschleunigung erzeugt 500-fachen Sturm nach unten.
Betweenness = Eingrad + Ausgabegrad
Wie zentral dieser Arbeitsplatz für den Gesamtfliess ist. Hoher Betweenness bedeutet, dass viele Pfade durch diesen Knoten laufen.
Zwei Archetypen:
Arbeitsschlampe-Node: hohes Betweenness, hohes Sturmscore. Dies ist der Engpass. Jede Warteschlange upstream blockiert sich aufgrund dessen. Entferne diesen Engpass ohne die Kapazität downstream aufzustellen, und alles downstream kollabiert gleichzeitig.
Schlemmer-Node: hohes Ausgabegrad, niedriges Sturmscore. Verbraucht alles, was ihm zugeführt wird. Empfindet keinen Schmerz, weil sein Engpass intern ist, nicht die Durchsatzkapazität. Die Maschine, die vergisst, zum Stehen zu kommen - Arbeit tritt ein, nichts geht raus, und der Knoten meldet 'beschäftigt' für immer.
MOAD-0001 & MOAD-0005: Ein Kopplungsfall
Der GHC-Fall
Bevor ein MOAD-0001-Patch in GHCs Abhängigkeitsauswahl eingeführt wurde: N=50.000 Abhängigkeiten benötigten 17 Minuten, um gebaut zu werden. Danach: 10 Sekunden. Beschleunigung: 100-fach.
Was passiert nach unten? Jede Build-Cache, Artefakt-Speicher & CI-Runner, der sich auf 17-minütige Batch-Arrivals eingestellt hatte, erhält jetzt 100-fach mehr abgeschlossene Builds pro Stunde. Caches, die für 60 Build-Artifacts pro Stunde ausgelegt waren, erhalten jetzt 6.000.
Dies ist MOAD-0005: der Cache-Stammedefekt. Jede Cache-Key bekommt gleichzeitig verfehlt, weil keine Cache für den neuen Anlaufgeschwindigkeitswert vorher gewärmt wurde. Der Fix für MOAD-0001 produziert MOAD-0005.
Das Kopplungsproblem ist kein Zufall. Es ist strukturiert. Jede O(N²) → O(N) Beschleunigung mit Eingrad > 1 erzeugt einen Sturmscore über 1. Ein Sturmscore über 100 ist ein MOAD-0005-Kandidat.
Vor der Bekanntgabe auslagern
Eine Build-System verarbeitet 1.000 Paket-Abhängigkeitsgraphen pro Stunde. Du pachst MOAD-0001 in der Graphenavigation ein, was die Baubehandlung von 60 Minuten auf 30 Sekunden reduziert - eine 120-fache Beschleunigung. Das System verarbeitet jetzt 120.000 Graphen pro Stunde.
Wann zu stoppen: Die Haltbedingung
Die Haltbedingung
Ein Patch erfüllt die Haltbedingung - das bedeutet: offenlegen nicht - wenn alle vier Bedingungen gleichzeitig erfüllt sind:
1. Patch lebt in einem laufenden System (eingegliedert, ausgerollt)
2. Keine Betreuer zugewiesen, um die Auswirkungen im Downstream-Bereich zu übernehmen
3. Downstream-Defekt (MOAD-0005) ungelöst
4. Beschleunigung >= 100×
Alle vier zusammen = das Baby weint. Zuteilen Sie dem Team, bevor Sie das Merge durchführen und nicht danach.
Ein Knoten ohne Betreuer läuft wie ein Arbeitsplatzcomputer ohne Arbeiter. Die Arbeit sammelt sich. Jemand bricht zusammen. Das Prinzip der Perma-Computer: Sie beheben nicht die Zustellungsalgorithmus, ohne die Treiber zu schieben. Drei Treiber, drei Millionen Menschen: Die Blockierung des Algorithmus schafft eine Horde von unbedienten Anfragen anstelle von schnellerer Lieferung.
WALL-E: Würstchen & Workaholics
Das WALL-E-Modell
Pixars WALL-E zeigt das Versagen eines Fabrikmodells in seiner klarsten Form. Würstchen auf Hover-Stühlen, ohne Widerstand ernährt. Workaholics - WALL-E, EVE - sterben an ihren Stationen, um den Feed weiterzubetreiben.
Das Würstchen-Knoten (die Menschen auf Hover-Stühlen) hat den maximalen Ausgrad: es verbraucht alles, was ihm zugeführt wird, produziert jedoch nichts. Sein Surge-Score ist null - es ist ein Sammelbecken. Es fühlt keine Schmerzen, weil nichts an seinem Ausgang angesammelt wird. Es verbraucht einfach.
Das workaholic-Knoten (WALL-E) hat den maximalen Betweenness: alles fließt durch ihn. Es absorbiert alle Eingaben. Es produziert die einzige Ausgabe. Sein Surge-Score würde, wenn es je von einem schnelleren Modell ersetzt würde, alle Downstream-Warteschlangen gleichzeitig überschwemmen.
Der Defekt im WALL-E-System ist nicht die Würstchen. Es ist der fehlende Betreuer: niemand zugewiesen, um die Arbeitsplätze auszugleichen. Niemand hat die Kapazität vor dem Ausführen des Algorithmus eingestellt.
Der pip-Fall: Prä-Offenlegungs-Checkliste
Sie entdecken MOAD-0001 in Pythons pip-Abhängigkeitsberechner. Geschwindigkeitsmultiplikator: 200×. Pip läuft auf etwa 400 Millionen Installationen pro Tag. PyPI stellt die Pakete bereit.