【问题标题】:Program Deployment and Cloning Environment程序部署和克隆环境
【发布时间】:2009-05-08 15:02:15
【问题描述】:

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

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

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

现在我主要使用 scp 并且我的代码在 svn...

【问题讨论】:

    标签: language-agnostic deployment clone


    【解决方案1】:

    我建议使用像 VMware 这样的虚拟化技术将一个实例克隆为多个。这样做的好处是,您始终能够在测试后回到相同的起点,并且能够运行比您拥有的物理盒子更多的场景。

    【讨论】:

      【解决方案2】:

      您可以让您的基准测试工具通过 http 或其他一些流行的协议获取新版本的程序和测试数据。如果您不想使用 http,可以考虑使用网络文件系统(NFSGlusterFS 是一些示例)。

      在我看来,您将在单个“主”服务器上启动您的脚本,然后它会产生 5 个 bash 进程。他们每个人都将登录到远程“从”服务器并执行基准测试工具。基准测试工具将从某个(可能是“主”)服务器获取新程序和数据,然后执行它,测量时间/内存/等并在标准输出上返回这些值,因此 ssh 会将其传递回主服务器服务器,它是 bash 进程。然后,您将 bash 会话输出重定向到文件。

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

      testmaster.sh 必须检查所有文件是否已经存在 f.e.每秒然后读取并比较结果。这可能听起来很糟糕,但相信我,如果你不手动完成所有这些会更好,而且脚本相对容易编写。

      关于确保您在所有盒子上拥有相同的环境...不要让任何人靠近您的测试节点,也不要对它们做任何事情。

      我不建议虚拟化,因为它会以您无法预测的方式改变您的测试结果。虚拟机不能像纯机那样快,也不仅仅是“它慢了 20%”。有些事情要慢得多,有些则慢得多。如果您不介意,请使用虚拟化和快照,但您说您在多个节点上测试事物,每个节点都有不同的内核,所以我想您会非常认真地对待它。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-05-06
        • 2015-07-29
        • 2017-04-03
        • 1970-01-01
        • 2012-04-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多