Zum Inhalt springen

Blog ·

Rackplatz ist keine Kapazität

Wie voll ist dieses Rack? Es gibt fünf Antworten in fünf Formen, und ihre Summe ist eine Zahl, die auf eine Weise falsch ist, die niemand prüfen kann.

Von Provibr

„Wie voll ist dieses Rack“ klingt nach einer Frage, auf die eine Zahl die Antwort ist. Ist sie nicht. Es sind fünf Fragen in einem Mantel, und jedes Dashboard, das sie mit einer einzigen Zahl beantwortet, hat still ausgewählt, welche der fünf gemeint war, und die anderen vier weggeworfen.

Die fünf sind wirklich verschiedene Dinge. Wie viele Rack-Units belegt sind. Wie viele der Maschinen darin tatsächlich in Betrieb sind statt in der Vorbereitung oder in Quarantäne. Wie viele davon morgen an einen Kunden verkauft werden könnten. Wie viel Leistung für die Maschinen darin veranschlagt ist, gemessen am Budget des Racks. Und wie viel Leistung sie tatsächlich ziehen.

Sie können bei der ersten bei neunzig Prozent stehen und nichts zu verkaufen haben, weil alles im Rack bereits an einen Kunden gebunden ist. Sie können bei der ersten bei vierzig Prozent stehen und keine Maschine mehr hinzufügen können, weil das Leistungsbudget aufgebraucht ist. Das sind keine Randfälle. Das ist der Normalzustand eines Rechenzentrums, das eine Weile läuft.

So haben wir die Antwort als fünf getrennte Messwerte gebaut, und, wichtiger noch, so haben wir es einer künftigen Fassung unserer selbst schwer gemacht, sie zu mitteln.

Fünf Achsen, fünf verschiedene Antworten

AchseForm der AntwortWoher sie kommt
Rack-Unitsbelegt, gesperrt und verfügbar je Seite, dazu der längste zusammenhängende freie Abschnittaktive Buchungen plus die Geometrie des Racks
Status der Maschineneine Anzahl je logistischem Zustanddie im Rack platzierten Maschinen
Verkäufliche DedicatedMaschinen verkäuflich, ausgeschlossen, betrachtetder Bereitschaftsbefund jeder Maschine nach der Richtlinie der Organisation
Konfigurierte Leistungreservierte Watt gegen die veranschlagten WattReservierungen an den Maschinen und das Budget des Racks
Beobachtete Leistungnichts, und der Grund ist, dass es keinen Sensor gibtnirgendwo

Lesen Sie diese Tabelle als Liste von Rückgabetypen und nicht als Liste von Funktionen. Die erste Achse liefert eine Struktur je Seite. Die zweite liefert eine Abbildung von Zustand auf Anzahl. Die dritte liefert drei Anzahlen von Maschinen. Die vierte liefert zwei Werte in Watt. Die fünfte liefert überhaupt nichts. Keine der fünf ist eine nackte Zahl, und das ist kein Zufall des Entwurfs: Es ist das erste von vier Dingen, die eine kombinierte Kennzahl am Entstehen hindern.

Würde jede Achse einen Prozentwert liefern, wäre ein Mittelwert eine Zeile Code. Niemand würde ihn als Entscheidung prüfen, weil er nicht wie eine aussähe. Er sähe aus wie eine Bequemlichkeit. Die Rückgabeformen strukturell unvergleichbar zu machen bedeutet, dass jeder, der eine kombinierte Zahl will, zuerst die Umwandlung schreiben muss, die sie einebnet, und eine Umwandlung ist in einem Diff sichtbar, wie es eine Division nicht ist.

Unbekannt gilt je Achse, und es trägt einen Grund

Der zweite Riegel ist das, was passiert, wenn eine Achse es nicht weiß.

Heute gibt es drei Gründe, und es sind Schlüssel statt Sätze, weil das Panel sie in neun Sprachen darstellt. Für das Rack ist kein Leistungsbudget hinterlegt. Eine oder mehrere der Maschinen darin kennen ihre eigene reservierte Aufnahme nicht. Es gibt keinen Sensor.

Der Unterschied zählt, weil das drei verschiedene Gespräche sind. Das erste ist eine Lücke in der Datenpflege des Rackdatensatzes. Das zweite ist eine Lücke in der Datenpflege einer Maschine, und es sagt etwas Bestimmtes: Die Summe, die Sie gleich lesen, hat ein Loch. Das dritte ist überhaupt keine Lücke, es ist das Fehlen von Hardware, für die wir keine Unterstützung gebaut haben.

Bei der Leistungsachse schlägt das durch. Hat das Rack kein Budget, gibt es nichts, wogegen gemessen werden könnte, und die Achse ist aus diesem Grund unbekannt. Hat das Rack ein Budget, aber eine platzierte Maschine hat keinen reservierten Wert, dann ist die Achse aus einem anderen Grund unbekannt, und das ist der Fall, den eine naive Umsetzung falsch macht. Es ist sehr verlockend, eine fehlende Wattzahl als null zu behandeln und weiterzusummieren. Das erzeugt ein Rack, das geräumig aussieht und voll ist, und das ist die teuerste falsche Antwort, die dieses System geben kann: Jemand plant eine Lieferung dagegen.

Die Regel lautet: Unbekannt an einer Stelle macht die ganze Achse unbekannt. Eine Summe mit einem Loch darin ist keine kleinere Summe.

Die Achse, die immer unbekannt ist

Die fünfte Achse, die beobachtete Leistung, liefert jedes einzelne Mal unbekannt. In diesem Produkt gibt es keine Stromverteilung, keine Einspeisung, keine Steckdose und keinen Temperatursensor. Nicht teilweise, nicht hinter einem Schalter: gar nichts.

Das Naheliegende wäre, sie wegzulassen, bis es sie gibt. Wir stellen sie trotzdem auf den Bildschirm, mit dem Hinweis, dass es keinen Sensor gibt, und der Grund ist das, was ihre Abwesenheit beim Leser anrichten würde. Bei vier Achsen auf dem Bildschirm, von denen eine mit Leistung beschriftet ist, schließt ein vernünftiger Mensch, dass die Leistungszahl eine Messung ist. Ist sie nicht. Sie ist ein Budget: das, was jemand als erwartete Aufnahme einer Maschine in ein Formular getippt hat, aufsummiert.

Die fünfte Achse ausdrücklich als unbekannt zu zeigen ist das, was die vierte ehrlich hält. Eine Kapazitätsaussage, die aus unvollständigen Daten zusammengesetzt ist, ist genau der Fehlermodus, gegen den dieser ganze Teil des Entwurfs geschrieben ist, und die billigste Abwehr dagegen ist, das zu benennen, was Sie nicht gemessen haben.

Die Kennzahl unmöglich machen statt sie zu verbieten

Nichts davon überlebt den Kontakt mit einem hektischen Quartal, wenn es nichts durchsetzt. „Wir haben vereinbart, diese nicht zu kombinieren“ ist ein Kommentar, und ein Kommentar schlägt nicht fehl.

Es gibt daher einen Test, der die Quelldatei mit dem TypeScript-Compiler liest und drei Dinge über sie behauptet.

Keine exportierte Funktion in dieser Datei liefert ein nacktes number. Es gibt im Modul also nichts zu mitteln, nicht einmal versehentlich.

Die Funktion, die die fünf Messwerte zusammensetzt, enthält keinen Rechenoperator, kein reduce und kein Math. Sie bildet über das Register der Achsen ab und ruft jeden Leser auf. Mehr darf sie nicht, und jede kombinierte Zahl entstünde zwangsläufig dort, weil das die einzige Stelle ist, an der alle fünf Messwerte gleichzeitig sichtbar sind. Das ist der dritte Riegel.

Und die Wörter selbst sind verboten: Eine Prüfung weist healthScore, rackHealth, overallScore, combinedScore und capacityScore in jeder Schreibweise zurück. Die letzte ist grob, und wir haben sie trotzdem behalten, weil der Fehler, gegen den sie schützt, jemand ist, der freitags um halb fünf hilfsbereit sein will.

Der Sinn dieser Schreibweise ist nicht, dass eine Regel nicht gebrochen werden kann. Er ist, dass ihr Bruch das Löschen eines Tests verlangt, und das Löschen eines Tests ist eine Zeile in einem Pull Request, nach der jemand fragen wird. Eine Division zwischen zwei ohnehin vorhandenen Zahlen einzufügen ist das nicht.

Wir haben den Wächter rot bewiesen, bevor wir ihm vertraut haben, auf zwei getrennten Wegen: mit einem Rechenausdruck innerhalb der zusammensetzenden Funktion und mit einer exportierten Funktion, die eine Zahl liefert. Beide wurden wieder entfernt. Ein Wächter, der noch nie fehlgeschlagen ist, ist ein Wächter, dessen Selektoren Sie nicht geprüft haben.

Eine Achse hinzuzufügen muss ein Compile-Fehler sein

Die fünf Achsen leben in einem Register. Die Erzeuger liegen in einem Record, dessen Schlüssel aus diesem Register kommen, eine sechste Achse ohne Leser ist also ein Typfehler statt einer still fehlenden Zeile. Das ist der vierte Riegel.

Das deckt den Code ab. Es deckt den Bildschirm nicht ab, und der Bildschirm ist die Stelle, an der eine fehlende Achse am gefährlichsten ist: Sie taucht einfach nicht auf, und die Tabelle sieht vollständig aus. Ein zweiter Wächter leitet die Achsenliste deshalb aus dem Register ab und verlangt für jede einzelne eine Beschriftung und einen Hinweis in allen neun Katalogen, einen eigenen Darstellungszweig in der Komponente und einen Unbekannt-Zweig mit einem übersetzten Satz für jeden Grund im Register der Gründe.

Dieser Wächter hat sich sofort bezahlt gemacht. Er hat gefunden, dass die Achse der beobachteten Leistung in der Darstellungskomponente nirgends genannt war, und das ist genau der Zustand, in dem eine Achse eine leere Zelle statt einer Erklärung erzeugt, und eine leere Zelle liest sich als null. Tests je Achse zu schreiben hätte das nicht finden können, aus demselben Grund, aus dem ein Test je Fall keinen fehlenden Fall finden kann: Sie hätten schon wissen müssen, dass es die Achse gibt.

Dieselbe Überlegung gilt für die Übersetzung. Ein Grundcode ohne Satz dahinter ist eine Leerstelle in einer Sprache, die niemand im Team liest, und neun Kataloge sind viele Orte, an denen sich eine Leerstelle verstecken kann.

Was wir aufschreiben würden

  1. Entscheiden Sie, worin jede Antwort gemessen wird, bevor Sie entscheiden, wie sie aussieht. Einheiten, die sich nicht addieren lassen, sind die billigste Abwehr, die Sie je bauen werden.
  2. Geben Sie unbekannt je Achse einen eigenen Grund, und lassen Sie eine fehlende Eingabe auf dem Weg zu einer Summe nie zu einer null werden.
  3. Lassen Sie die Achse, die Sie nicht messen können, auf dem Bildschirm, als ungemessen beschriftet, damit die Achse daneben nicht für eine Messung gehalten wird.
  4. Schreiben Sie das Verbot in einen Test, der die Quelle liest, nicht in einen Kommentar, und beweisen Sie den Test einmal rot, bevor Sie sich auf ihn verlassen.
  5. Leiten Sie den Wächter aus dem Register ab, damit eine sechste Achse im Code und auf dem Bildschirm laut ist statt in beidem leise.

Um deutlich zu sagen, wo das steht: Die Arbeit an der Rechenzentrumslogistik liegt hinter einem Rollout-Schalter, der standardmäßig aus ist, und darüber hinaus hinter einer Einstellung je Organisation, nichts davon ist also heute käuflich. Es ist die Form, die wir wieder bauen würden, und die fünf Achsen sind der Teil, bei dem wir uns am sichersten sind. Die verwandte Frage, wer überhaupt in ein Rack schreiben darf und was zwei Menschen wirklich daran hindert, denselben Slot zu beanspruchen, steht in die einzige echte Grenze der Rackbelegung.

Aus der Rechenzentrumsarbeit bei Provibr.

Fangen Sie mit einem Host und einem Agenten an

Konto erstellen, den Agenten mit einem einzigen Befehl installieren und Ihren ersten Proxmox-Host verbinden. Die Testphase läuft 14 Tage und fragt nicht nach Zahlungsdaten.