Was ist der grundlegende Unterschied zwischen Konvergenz und Idempotenz in Chef?Unterschied zwischen Konvergenz und Idempotenz in Chef
Antwort
Konvergenz und Idempotenz sind nicht kochspezifisch. Sie werden im Allgemeinen der Theorie des Konfigurationsmanagements zugeschrieben, obwohl sie auch in anderen Bereichen, insbesondere in der Mathematik, Anwendung finden.
Beginnen wir mit dem einfacheren, idempotenten. Wir werden den mathematischen Gebrauch von Idempotent ignorieren und uns stattdessen darauf konzentrieren, was Konfigurationsmanagement-Leute meinen, wenn sie darüber sprechen. Das heißt: "Mehrere Anwendungen der gleichen Aktion haben keine Nebenwirkungen auf den Systemzustand." Ein einfaches Beispiel für einen idempotent Betrieb ist mkdir -p
:
mkdir -p /var/lib/statedir/myapp
Egal wie oft wir diesen Befehl ausführen, führt es in diesem Baum erstellt werden. Eine andere Möglichkeit, dies über idempotente Operationen zu sagen, ist, "wenn das Tool immer wieder ausgeführt wird, ändert es das System nicht nach dem ersten Mal."
Nun zum Kontrast mit der Konvergenz. Im Allgemeinen bedeutet Konvergenz bedeutet, dass [Menschen oder] Dinge zusammengebracht werden. Konvergenz bedeutet im Konfigurationsmanagement, den Systemzustand in Einklang mit einer definierten Richtlinie zu bringen. Das bedeutet, dass Änderungen am System nur vorgenommen werden, wenn sie vorgenommen werden müssen. Ein einfaches Beispiel für einen konvergenten Betrieb ist:
if [ ! -d /var/lib/statedir/myapp ]; then
mkdir -p /var/lib/statedir/myapp
fi
Diese konvergente ist, weil wir nur den mkdir Befehl ausführen, wenn das gewünschte Verzeichnis existiert nicht. Wir nennen dies auch eine "Test- und Reparatur" -Operation. Das heißt, wir testen den aktuellen Zustand des bestimmten Objekts, das wir verwalten, und reparieren es dann mit einem bestimmten Befehl oder einer Operation, wenn es sich nicht in diesem Zustand befindet. Das ist, was Chef tut hinter den Kulissen mit einer Ressource wie folgt aus:
directory '/var/lib/statedir/myapp' do
recursive true
end
Die Art, wie wir (Chef) darüber reden, dass Chef Aktionen nimmt idempotent das System in den Zustand der verschiedenen Ressourcen erklärt zu konvergieren. Jede Ressource in Chef ist deklarativ und führt einen Test über den aktuellen Status der Ressource durch und repariert dann das System entsprechend.
Um tiefer in die Unkräuter zu erfahren, wie Chef arbeitet, hat es eine "Kompilieren" -Phase und eine "Konvergenz" -Phase in einem Koch-Lauf. In der Phase "Kompilieren" wertet es die Ruby-Rezepte auf dem Knoten aus und sucht nach Ressourcenobjekten, die zu einer "Ressourcensammlung" hinzugefügt werden. Nachdem es alle Rezepte ausgewertet hat, tritt es in die "Konvergenz" -Phase ein, wo es die Ressourcensammlung iteriert und die entsprechenden Maßnahmen ergreift, um die Ressourcen in den gewünschten Zustand zu versetzen, wobei Benutzer erstellt, Dateien geschrieben, Pakete installiert werden, und so weiter.
Das war eine wirklich großartige Erklärung !! Ich war mir bewusst, Konvergenz-Konzept in Chef aber nicht Idempotenz. Danke für die Artikulation. :) – dextren
-1. Ich halte das nicht für eine besonders klare Erklärung; es macht Idempotenz und Konvergenz so, als ob sie im Grunde dasselbe wären, da Sie die Befehle, die Sie als Beispiele für die beiden Konzepte verwenden, semantisch identisch sind. Ein Beispiel eines idempotenten, aber nicht konvergenten Befehls (oder eines konvergenten, aber nicht idempotenten Befehls, wenn so etwas überhaupt Sinn macht) würde Klarheit schaffen. –
Was ist dein Problem? Konvergenz ist eine der Phasen in einem Koch-Lauf (Suche auf http.docs.chef.io dazu), Idempotenz ist ein mathematischer Ausdruck für f (x) = f (f (x)): Dh das Endergebnis sollte Das gleiche hängt nicht damit zusammen, wie oft die Funktion aufgerufen wird. Ergebnis => tue nur etwas von benötigt => Berühre keine Datei, deren Inhalt bereits der erwartete Inhalt ist. – Tensibai