Language agnostic 程序部署和克隆环境

Language agnostic 程序部署和克隆环境,language-agnostic,deployment,clone,Language Agnostic,Deployment,Clone,我正在我的机器上开发一个java程序。当我想要测试时,我首先在我的机器上尝试小的测试用例,然后我想用真实的数据运行这个程序。一个小测试是查看linux内核中的一个文件,“真正的”测试是查看整个内核 但是我想同时运行多个“真实”测试(在不同版本的内核上),所以我有5台相同的测试机器(运行LinuxFedora)。如何在数据和程序方面同步这5台机器(我有时使用yum来安装程序) 我如何确保我在任何时候都拥有完全相同的环境 现在我主要使用scp,我的代码在svn上…我建议使用VMware之类的虚拟化技

我正在我的机器上开发一个java程序。当我想要测试时,我首先在我的机器上尝试小的测试用例,然后我想用真实的数据运行这个程序。一个小测试是查看linux内核中的一个文件,“真正的”测试是查看整个内核

但是我想同时运行多个“真实”测试(在不同版本的内核上),所以我有5台相同的测试机器(运行LinuxFedora)。如何在数据和程序方面同步这5台机器(我有时使用yum来安装程序)

我如何确保我在任何时候都拥有完全相同的环境


现在我主要使用scp,我的代码在svn上…

我建议使用VMware之类的虚拟化技术将一个实例克隆到多个实例中。这样做的好处是,在测试之后,您可以始终返回到相同的起点,并且能够运行比物理机箱更多的场景。

您可以让基准测试工具通过http或其他一些流行协议获取新版本的程序和测试数据。如果你不想使用HTTP,你可以考虑使用一个网络文件系统(<强> NFS 和<强> GLUSTFS 是一些例子)。 在我看来,您可以在一台“主”服务器上启动脚本,然后生成5个bash进程。他们中的每一个人都将登录到远程“从属”服务器并执行基准测试工具。基准测试工具将从某个(可能是“主”)服务器获取新程序和数据,然后执行它,测量时间/内存/etc,并在标准输出上返回这些值,因此ssh将把它传递回主服务器及其bash进程。然后将bash会话输出重定向到文件

testmaster.sh -> 5*(testnode.sh -> ssh
-> fetch_and_benchmark -> output -> (ssh) -> testnode.sh -> file)
testmaster.sh必须每秒检查所有文件是否已经存在,然后读取并比较结果。这听起来可能很糟糕,但是相信我,如果你不需要手动完成所有的工作,而且脚本编写起来也相对容易,那就更好了

关于确保所有箱子上的环境相同。。。不要让任何人靠近您的测试节点,也不要对其执行任何操作

我不建议虚拟化,因为它会以一种你无法预测的方式改变你的测试结果。虚拟化机器不能像纯机器那样快,而且它不仅仅是“慢了20%”。有些东西慢得多,有些没那么多。如果你不介意的话,可以使用虚拟化和快照,但是你说你在多个节点上测试东西,每个节点都有不同的内核,所以我想你会非常认真地对待它

啊,还有一件事。Linux有一种释放内存的有趣方式(就像“在有人需要它之前不要释放它”)。有些东西会被缓存。当然,您必须在每次测试会话之后重新启动测试机器