前言
本篇讲解tsung大致功能组成、结构,以及主从模型,以便总体上掌握。
总体组成

tsung_controller
和 tsung
这两个模块,负责分布式压测的核心功能。
代码组成
从代码层次梳理一下tsung项目功能组成结构,便于一目了然,方便直接索引。

主从模型一览
设定环境为分布式环境下tsung集群,下面简单梳理一下主、从节点启动流程。

流程大致说明:
- 主节点(tsung_controller)通过ssh或其它远程终端(后面会讲到操作更为轻量的完全替代ssh方式)连接到从服务器启动tsung从节点运行时环境
- 主节点rpc批量启动tsung client进程
- 主节点为每一个从节点启动会话监控,控制会话速度,开启ts_client模拟终端
- 从节点请求主节点具体业务进程,获取会话指令以及会话具体内容
- 从节点建立到目标压测服务器的socket网络连接,开始会话
- 主节点可以通过ssh/其它终端方式连接到目标压测服务器,启动从节点,然后收集数据(可选,具体细节,后续文字会讲到)
这种模型下:
- 全局严格控制模拟终端用户生成总量和生成速度
- 主节点动态管理从节点生命周期,从生到死,并且掌握着所有会话细节,全局掌控
- 从节点很轻,所有需要的会话指令,都必须请求主节点获得
主从之间交互流程
下面一张图简单说明了主从之间核心模块交互流程,虽然粗略,核心点也算是涉及到了。

后面会对具体协议部分有更为详细论述。
一次压测回话(ts_client)工作流程
其实是承接上一个流程图,已经启动了一个ts_client模块,即执行一个完整生命周期会话模拟终端。它的开启依赖于tsung controller启动ts_launch/ts_launch_static模块。
大致流程图如下:

会话什么时候结束
- 针对从节点上,(一个终端用户的)一次完整会话(session):
- 请求主节点ts_config模块,获取会话session信息,包含一次会话需要完成任务总数count
- 从节点ts_client 每执行一次事件,任务总数count减1
- 当count值为0时,说明任务执行完毕,ts_client生命周期圆满,一次完整会话结束
- 从节点所分配的所有会话都结束了,表示从节点生命周期也会结束
- 主节点控制的所有从节点都结束了,即所有会话都一一完成,那么整体压测也结束了,整个压测流程结束
小结
基于erlang天生分布式基因支持,从节点的生死存亡完全受tsung主节点的控制,按需创建,任务完成结束,主从协调行云流水般顺畅。
嗯,后面将介绍主从实现的一些细节。