SSH为C/S模式,SSH Server是默认监听22端口的一个守护进程,等待客户端发送命令,解析执行,然后返回结果。明白了这个道理,我们可利用反向Shell机制打造一个SSH替代品。 首先我们需要在一个从节点上启动一个守护进程: bash ncat -4 -k -l 39999 -e /bin/bash & 主节点作为客户端,比如我们想查询远程服务器主机名: bash echo hostname | ncat 10.77.128.21 39999 一点都不复杂吧,但实际上还有很多的工作要做,比如自动断开机制等,我已封装了rsh_client.sh和rsh_daemon.sh两个文件,可参考https://github.com/weibomobile/tsung_rsh,不再累述。 问题来了,如何结合Tsung使用呢? 第一步,在所有从机启动守护进程: bash sh rsh_daemon.sh start 第二步,需要在Tsung启动时使用-r参数指定自定义的远程终端: bash tsung -r rsh_client.sh -f tsung.xml start 总之,这个SSH终端替代方案,已经在良好的运行在线上实际压测中了,图6为其部署结构。
注:其实不仅仅是替代,还可以在其上增加一些资源监控功能,我们已经这样干了。 【IP直连特性支持】 Tsung还有一个使用不便的地方,从机必须配置主机名,用于主机启动从机实例: xml <client host="client20" maxusers="50000" weight="1"> <ip value="10.10.10.20"></ip> </client> 在主机名没有内网DNS解析支持情况下,需要在/etc/hosts文件中手动配置主机名和IP地址映射关系,若是集群很大,维护成本高。如何办呢,我增加了IP直连特性支持:https://github.com/weibomobile/tsung/,需要时检出编译即可使用。 这样压测从机可以直接填写IP地址: xml <client weight="1" maxusers="50000" host="client20"> <ip value="10.10.10.20"></ip> </client> 其次,在Tsung启动时需要指定-I参数,并填写压测主机IP地址(可以通过Linux代码自动获取): bash tsung -I 压测主机IP地址 -r rsh_client.sh -f tsung.xml start 这样改造之后,让Tsung分布式集群在复杂网络机房内网环境下适应性向前迈了一大步。 性能压测流程驱动 压测之前,我们一般需要关注哪些东西呢,其实大家做法差不多,可以列一个清单: 添加计数器,可以发送到计数收集服务器,报表显示等; 核心逻辑做好日志记录,但日志记录过多时,可能也会成为瓶颈,需要取舍日志等级等; 区分核心模块和非核心模块的在资源紧张时是否需要区别对待等。 压测中,大家一般都是紧密盯着各项报表,查看服务器各项资源开销等。有一点需要强调的是,尽量作为终端用户一员,亲身参与进去,这样才能够切身体验并切切实实感受到此时服务的质量。 压测后,复查各项报表,查看错误日志,结合刚才自身的体验等,认真思考修改问题,然后继续下一轮压力测试啦。 小结 如上所述,我们在没有空闲服务器情况下因地制宜,充分利用服务器空闲计算资源运行Tsung(有所增强、修改)分布式压测集群,让整体费用成本接近于零,同时也使之成为一项基础工具套件,为研发的同学提供足够多的支持。 在这一利器推动下,保证了我们整个聊天室项目的处理性能能够按照预期方式向前推进,有时还会有一点小惊喜: 系统处理性能,由项目之初单机服务1万用户,优化到单机处理50万用户的飞跃; 从上线之初服务支持50万用户,到后面支持1000万; 项目日常迭代,及时避免并修正了因额外功能引入的系统崩溃隐患; 激发了技术创新,期间收获了3项技术创新专利; 勤奋有心的同学,虽然经验欠缺,但被推着不停的发现问题、思考、解决问题,你可以看到他们成长的轨迹。 (责任编辑:本港台直播) |