1.
最近有个项目是这样的,测试系统需要部署到好几台 windows 的 PC 上,然后依靠它们去执行测试任务。由于输入参数文件数量非常多而且大,多到文件数量十万,文件总大小 10 G。由于每次输入的文件不是固定的,有时候要输入这一部分,有时候要输入那一部分。
我是怎么做的?我觉得用拷贝不现实(事实上,我尝试了一下,拷贝几万个大文件,看着进度条上剩余时间 1 小时,心都凉了),于是我觉得用剪切的方案肯定比复制好,也的确如此,在同一个磁盘下剪切大文件的外层目录,一瞬间就操作完了。所以,每次要执行什么任务,我是挨个去所有的电脑上,对,是所有,剪切文件再运行测试任务。天真,幼稚,我就这样折腾了自己两天以后,再也受不了了。
2.
我开始寻求改变。既然多文件,大文件很耽误时间,那么一个文件一定要快得多吧。所以我加入了 task 文件,把所有要执行的任务目录写到 task 中,并且肯定不能再干手写这种费力不讨好的行为了。又加了个脚本来一键生成任务。哈哈,简直不要太棒。原本要干一个钟头的活,现在五分钟完事儿,“偷来的 55 分钟” 能愉快地喝着茶,吃着面包看报纸了。
3.
好景不长,新的噩梦又开始。有十万个输入参数集,就对应有十万个输出集。虽然这十万个文件总大小就十几兆,但压缩,解压同样消耗了十几分钟的时间。想要寻求改变,就得脚本来帮忙。合并,是的,通过脚本,轻松的将十万个文件的内容合并到了一个文件里。拷贝一个几兆大小的文件,对于网络传输来说一点都不费力。
4.
这套方案加上 windows 远程助手的帮忙,我轻松实现了在自己的电脑上操作好几台电脑,执行任务从原来的一个小时,到现在的五分钟。处理任务结果集,从原来的一小时,到现在的五分钟。效率提升了 90%。但是每次在不同的电脑上进行同样的操作步骤,对于一个把 “DRY”(Do not Repeat Yourself)视为生命法则(其实就是懒)的人来说,是不可接受的。我碎碎念着,一定要做点什么改变这一切。
5.
SSH 方案的尝试。linux 系统中,SSH 是一个非常好用的思路。包括我之前用 Hadoop 时,Namenode 要控制 DataNode,也是通过 SSH。于是找到了 openssh 的 windows 版本,发现竟然还是 2004 年的更新。试了一下果然不好用(也许是我没用对,总之不想花时间再去调试这么老的版本)。好在 windows 10 已经加入了 ssh 的支持。当我打开程序安装时发现,竟然还是 beta 版本。抱着试一试的心理安装了 ssh server 和 ssh client,并配置好密钥后,满怀期待的尝试 ssh 连接。oh no,连接失败了。
6.
我其实是这样想的。在主机上通过 ssh 实现版本的一键部署,安装,测试系统的启动,总之我都连上 ssh 了,那所有的拷贝,执行,还不都是几个脚本就搞定的事?这可是 ssh 啊!但是 windows 它不咋给力,还得换招。
7.
其实是留了 “备胎” 的,但是能用现成的就绝不自己动手造轮子。既然轮子用不上。就自己造吧。写服务,对,自己写服务,把所有要执行的操作封装到服务里,并部署到所有的电脑上。这样,就相当于有一个远程管家在帮助我执行本地任务。而我呢,只需要在客户端封装好操作指令,需要执行什么任务就把指令发给 “管家” 来做。想想,也是美滋滋了。