综合所述,Tsung默认情况下消耗低,可充分利用现有服务器空闲计算资源,线上多次实践也证实资源占用始终在一个理想可控的范围内,具有可让百万用户压测执行的费用成本降低为0的能力,这也是我们选择Tsung的目的所在。 【为什么是Tsung?】 Tsung是一个有着超过15年历史积累的性能压测工具,本身受益于Erlang天生支持并发和分布式以及实时性的特性,其进程的创建和运行非常廉价,一台机器上轻轻松松创建上百万个进程。其提供一个用户对应一个进程的隔离处理机制,单机支持虚拟用户的用户数量可支持若十万、百万级别,只要机器资源充足(但总体来讲受制于受制于网络、内存等资源,后面会具体解释)。单机计算能力总是有限的,Tsung的目的就是要把多台服务器横向扩展成分布式集群,从而可以对外提供一致的海量性能压力测试服务。 协议层,Tsung不但支持TCP/UDP/SSL传输层协议等,而且应用层协议,已支持诸如WebDAV/WebScoket/MQTT/MySQL/PGSQL/AQMP/Jabber/XMPP/LDAP等。默认情况下,开箱即用,凭借着社区的支持,市面上能够找到的公开通用协议,都有相应官方或第三方插件支持。 和nGrinder相比,Tsung定位于提供一个强大的性能测试工具,开奖,在易用性和强大可扩展方面保持了一个平衡点。基于XML + DSL提供可配置、可编程的能力。比如我们可设置上一次的响应结果作为下一次请求内容,我们可配置多种业务协议、多个业务场景作为一个整体压测等。尽力抽象所要压测的情景吧,你不会失望的。 服务资源占用方面,以单机模拟5万长连接用户为例,有数据正常交互情况下,内存占用不到3GB,CPU占用不到两核,十分经济。
单机5万长连接资源消耗 【Tsung的集群架构 & 流程】 知其然知其所以然,还是需要掌握Tsung集群大致流程的。这是一种强主从模型,简单流程梳理如下:
Tsung主从架构图 主节点(tsung_controller)通过SSH通道连接到从服务器启动从节点运行时环境; 主节点通过RPC方式批量启动从节点实例(tsung client); 主节点为每一个从节点启动会话监控,控制会话速度,控制每一个压测用户进程ts_client生成速度; 从节点请求主节点具体业务进程,获取会话指令以及会话具体内容; 从节点建立到目标压测服务器的SOCKET网络连接,开始会话; 主节点可以通过SSH通道连接到目标压测服务器,启动从节点,收集数据(可选)。 再深入一些,以MQTT协议为例,每一种具体协议的支持可分为文件解析和会话动作的执行,运作机制不复杂,当我们在需要时可以遵循接口约定实现私有协议支持,也不是难事。 100万用户压测需要多少台机器? 要执行100万用户的性能压测,首先预估需要多少台压测服务器才能够满足要求。在Tsung中,一个压测用户对应于一个进程,一个进程默认会打开一条连接到服务器的TCP网络连接。只要内存够用(I/O密集型的应用一般吃内存),基于Erlang开发的应用程序,轻轻松松应对几十万、上百万的进程不是问题。那么我们需要把注意力转移到Linux网络资源上。一台服务器所能够提供网络IP地址数量和内存大小等主要因素,直接决定了能够承载的对外建立的网络连接数,下面我们把主要的影响因素一一列出并分析。
Tsung通用插件调用流程 【网络四元组和总连接数】 说到网络连接抽象层面构成元素,针对本机对外建立的一个TCP连接而言,需要使用到本机的IP地址(localip)和端口(localport),以及远程的主机的IP地址(targetip)和端口(targetport),可以使用网络四元组进行呈现一个连接的最小构成: {local_ip,local_port,target_ip,target_port} (责任编辑:本港台直播) |