1. 需求
在视图库产品测试中目前我们目前有专门的压力测试工具。这些工具能够模拟大量并发的过车数据,但由于这些数据是无规律模拟出来的随机数据,与现实世界中的过车数据规律存在一定差异,不利于基于视图库的应用系统进行技战法分析。
模拟工具的主要需求有:
1.能够模拟生成设备,车卡,车牌信息。
2.生成的车卡具有拓扑关系,所有的车卡投射到二维平面上都有自己的座标。
3.对于每辆车,生成过车数据的轨迹应遵循2中车卡的拓扑关系,即行车轨迹覆盖相邻的车卡。
4.为提高并发量,可水平扩展。 多个模拟工具可并发生成过车数据。
2. 设计思想
2.1 空间分析
在实际世界中,卡口之间都是有地理空间关系的。这些卡口之间的空间关系构成了一个图,图中的每个节点是一个卡口。图中的多条边构成了一辆车的行驶轨迹。
在模拟工具中,我们将卡口定义一个网格中的每个点,每个卡口座标是这个网格座标系中的某个定点,如下图所示:
工具初始化时将配置的所有卡口定义为一个M×N网格中的所有端点,并为每个卡口分配一个座标。
如图1所示,某车的行驶轨迹为座标为(4,2),(5,2),(5,3),(5,4),(6,4)的卡口。其过车记录为5条,每一条过车对应其经过的某个卡口。
2.2 时间分析
对于现实世界中的车辆,行驶速度有不同。因此对于同一条路径,经过相邻两个端点间的时间也不一样。因而,模拟过车工具需要模拟车辆行驶的速度,并根据模拟(随机)生成的速度计算经过每个端点(卡口)的时间。
仍以图1为例,假设每个卡口间距离是1公里,生成的随机速度为60公里/小时,则相邻过车记录之间时间间隔为1分钟(匀速行驶)。
2.3 资源池
工具在启动时需要根据工具的配置信息生成对应资源池,模拟过车agent取资源池中数据生成过车记录。工具中使用的资源池有:
车卡资源池:本实例中使用的所有车卡,每个车卡具有二维座标。
车牌资源池:本实例中使用的所有车牌号。
2.4. 模拟过车agent
过车记录由模拟过车agent生成。模拟过车agent在系统中可设置多个,可并行工作。
模拟过车agent的工作流程如下:
1.在车卡资源池中获取一个车卡作为车辆轨迹起点。
2.在车牌资源池中获取一个车牌,并将该车牌号锁定。
3.随机生成行驶路径长度和随机行驶速度。
4.根据1中的起始车卡和3中的行驶路径长度生成n条过车记录,这n条过车记录的过车时间根据2中取出车牌的最后出现时间、3中生成的随机行驶速度算出(默认卡口间的距离一致,且匀速行驶),并记录下该车牌最后出现时间留做下次使用。
5.解锁2中的车牌号,以便该车牌可被其它agent使用。
6.将生成的过车记录写入数据库中。
3 软件架构
过车数据模拟工具的软件架构如下图所示:
系统启动时:根据配置信息生成卡口ID资源池及各卡口的座标;根据配置信息生成车牌资源池;根据配置信息生成过车agent集合。
对于每个过车agent,持续不断地生成过车轨迹,其生成算法如之后的章节所示。
生成的过车轨迹是一个过车集合,被发送过车数据流中,该数据流被写入到数据库中。
对于大数据量模拟环境,可部署多个过车模拟工具实例用于模拟大并发数据量。为保证没有冲突数据,每个实例配置的车牌资源和卡口资源请隔离开。
如下图中,多个实例运行配置的卡口座标范围不一致但不冲突: