2009-05-08 3 views
1

Ich entwickle ein Java-Programm auf meinem Computer. Wenn ich testen möchte, probiere ich zuerst kleine Testfälle auf meinem Rechner aus, aber dann möchte ich dieses Programm mit echten Daten ausführen. Ein kleiner Test wäre, eine Datei aus dem Linux-Kernel zu betrachten und ein "echter" Test wäre ein kompletter Kernel ...Programmbereitstellung und Klonen Umgebung

Aber ich würde gerne mehrere "echte" Tests zur gleichen Zeit ausführen (auf verschiedenen Versionen des Kernels), so habe ich 5 Testmaschinen, die identisch sind (laufendes linux fedora). Wie kann ich diese 5 Maschinen sowohl in Bezug auf Daten und Programme synchronisieren (ich benutze Yum manchmal, um Programme zu installieren)?

Wie kann ich sicher sein, dass ich zu jeder Zeit dieselbe Umgebung habe?

Im Moment verwende ich hauptsächlich scp und mein Code auf svn ...

Antwort

2

Ich würde vorschlagen, eine Virtualisierungstechnologie wie VMware mit einer Instanz in mehr zu klonen. Dies hat den Vorteil, dass Sie nach dem Test immer wieder zum gleichen Startpunkt zurückkehren können und mehr Szenarien ausführen können als physische Boxen.

0

Sie könnten Ihr Benchmarking-Tool holen Sie die neue Version des Programms und die Testdaten über http oder ein anderes beliebtes Protokoll. Wenn Sie http nicht verwenden möchten, können Sie ein Netzwerk-Dateisystem (NFS und GlusterFS sind einige Beispiele) verwenden.

Die Art, wie ich es sehe, Sie würden Ihr Skript auf einem einzigen "Master" -Server starten und dann würde es 5 Bash-Prozesse hervorbringen. Jeder von ihnen loggte sich in einen Remote-Slave-Server ein und führte ein Benchmarking-Tool aus. Das Benchmarking-Tool würde das neue Programm und die Daten von einem Server (etwas "Master") holen und dann ausführen, Zeit/Speicher/etc messen und diese Werte auf der Standardausgabe zurückgeben, so dass der ssh es an den Master zurückgibt Server und es ist Bash-Prozess. Sie würden dann die Bash-Session-Ausgabe in Dateien umleiten.

testmaster.sh -> 5*(testnode.sh -> ssh 
-> fetch_and_benchmark -> output -> (ssh) -> testnode.sh -> file) 

testmaster.sh müsste überprüfen, ob alle Dateien bereits existieren f.e. jede Sekunde und dann lesen und vergleichen Sie die Ergebnisse. Es mag alles schlecht klingen, aber vertrau mir, es wäre besser, wenn Du nicht alles manuell machst und das Skript relativ einfach zu schreiben ist.

Sicherstellen, dass auf allen Boxen die gleiche Umgebung vorhanden ist ... Lassen Sie niemanden in der Nähe Ihrer Testknoten liegen und tun Sie nichts darauf.

Ich würde keine Virtualisierung empfehlen, da dies Ihre Testergebnisse in einer Weise verändern würde, die Sie nicht vorhersagen können. Virtualisierte Maschinen können nicht so schnell sein wie reine und es ist nicht einfach "es ist 20% langsamer". Manche Dinge sind viel langsamer, manche nicht so viel. Wenn Sie nichts dagegen haben, verwenden Sie Virtualisierung und Snapshots, aber Sie sagten, Sie testen Dinge auf mehreren Knoten mit jeweils einem anderen Kernel, also stelle ich mir vor, Sie nehmen es sehr ernst.

Ah, noch eine Sache. Linux hat eine lustige Art, Speicher freizugeben (es ist wie "mach es nicht frei, bis es jemand braucht"). Manche Dinge werden zwischengespeichert. Um sicher zu sein, müssten Sie die Testmaschinen nach jeder Testsitzung neu starten.