RFID 中间件基准性能测试平台研究与设计
作者:赵科侠 谭杰 季刚
来源:RFID世界网
日期:2009-11-19 11:38:08
摘要:RFID 中间件作为 RFID 技术应用的神经中枢, 其性能的优劣直接影响整个 RFID 系统的性能。本文针对 RFID 中间件的特点, 提出了一套衡量 RFID 中间件基准性能的参数及其测试方法, 并介绍了在此基础上的自动化测试平台软件的设计。
1 引言
RFID是自动识别技术中的一种, 它利用射频方式进行非接触双向通信以达到识别的目的。RFID 技术由于其独有的优点,吸引力与日俱增。出于对市场前景的预期和简化RFID 系统建设、维护工作的需求, 一些大的软件公司( 如IBM, BEA, Microsoft等) 相继推出了各自的RFID 中间件产品。
RFID 中间件扮演的是RFID 读写器和应用程序之间的中介角色, 从应用程序端使用中间件提供的一组共通的ApplicationInterface (应用接口程序, API), 即能连到RFID 解读器, 读取RFID 标签资料。如此一来, 即使储存RFID 标签情报的资料库软件或后端应用程序增加或改由其他软件取代, 或者RFID解读器种类增加等情况发生, 应用端不需要修改也能处理, 省去多对多连结复杂维护的麻烦。
出于对RFID 中间件的重视, 为企业在实施RFID 系统时选择RFID 中间件产品提供参考, 有必要对RFID 中间件的性能进行测试。性能测试包括中间件处理下层读写器数据和支持上层应用程序调用的能力。现有的性能测试工具( 如LoadRunner, JMeter, Benchmark Factory 等) 存在着测试对象单一、测试结果不易比较等问题, 并不能满足测试的需要, 这就需要一套针对RFID 中间件基准性能的测试方法和测试平台。
2 参数选取及其测试方法
对于RFID 中间件的使用者而言, 关心的无外乎以下几个方面: 支持的读写器; 提供的应用程序接口; 并发处理的读写器数量、应用程序客户端数量; 吞吐量; 响应时间。对于一定的应用环境, 前两个是能不能使用的问题, 而后四个是使用效果的问题, 也就是本文所论述的基准性能问题。下文分别就这四个基准性能参数作了解释, 并给出了测试方法。
并发处理的读写器数量( NoR, Number of Readers) : 在一定的系统开销和应用程序客户端响应时间限制下, RFID 中间件能够同时处理的读写器数量。这里的读写器是指与RFID 中间件相连接, 且同时向RFID 中间件以一定的频率发送标签数据的读写器。在测试过程中, 监控系统资源占用( cpu 和内存使用率) 和应用程序客户端响应时间, 逐步增加发送数据的读写器数量, 当系统资源占用和响应时间达到限制值时, 就得到了NoR。
并发处理的应用程序客户端数量(NoC, Number of Clients) : 在一定的系统开销和应用程序客户端平均响应时间限制下, RFID 中间件能够同时处理发送操作请求的客户端数量。测试方法与NoR 类似, 通过监控系统资源占用和应用程序客户端平均响应时间, 逐步增加发送操作请求客户端数量, 当系统资源占用和平均响应时间达到限制值时, 就得到了NoC。吞吐量( Throughput) : 在一定的系统开销和客户端响应时间要求下, RFID 中间件能够处理的读写器端发送标签数据的频率。类似的, 通过监控系统资源占用和应用程序客户端响应时间, 逐步增加读写器发送数据的频率, 当系统资源占用和平均响应时间达到限制值时, 就得到了Throughput。
响应时间(RT, Response Time) : 应用程序客户端发送事件请求到RFID 中间件完成操作的时间间隔。测试方法相对简单,只需要通过应用程序客户端发送需要测试的操作请求, 记录其响应时间即可。
3 RFID 中间件基准性能测试平台
对RFID 中间件的测试涉及到两方面的测试数据来源: 读写器端的标签数据和应用程序客户端的操作请求。使用实际的读写器和应用程序进行测试面临两方面的问题: 1) 测试工作需要大量的读写器设备, 这需要大量的资金; 2) 搭建这么多设备所组成的测试环境, 工作量将极其巨大、复杂。一个切实有效的解决办法就是通过软件对读写器和应用程序进行仿真, 由虚拟读写器(Virtual Reader) 和虚拟客户端(Virtual Client) 向RFID中间件发送测试数据。
3.1 总体框架
基于虚拟读写器和虚拟客户端的RFID 中间件基准性能测试平台分为以下四个模块:
1) 虚拟读写器: 对读写器进行仿真, 生成标签数据, 与RFID 中间件进行通信。
2) 虚拟客户端: 生成对RFID 中间件的操作请求, 并记录响应时间。
3) 测试控制台: 根据测试模式控制虚拟读写器和虚拟客户端的运行, 监视系统资源占用情况, 记录测试数据。
4) 报告生成器: 由测试数据生成图形化测试报告。
为了降低测试平台的运行对测试结果的影响, 系统采用分布式架构, 即虚拟读写器、虚拟客户端以及RFID 中间件分别运行在局域网的不同计算机上。虚拟读写器、虚拟客户端与测试控制台之间的通信通过Web Service 实现。系统整体软件框架如图1。
3.2 虚拟读写器
虚拟读写器是为了降低测试成本, 简化测试工作而开发的, 是整个测试平台的基础。虚拟读写器接受RFID 中间件的轮询, 解析RFID 中间件事件, 并生成标签数据, 发送给RFID 中间件, 实现对读写器的仿真。主要包括以下几个功能模块:参数设置模块: 提供给测试控制台进行虚拟读写器的参数设置的接口, 包括读写器数量、端口、发送数据频率、持续时间、标签数据格式以及启动、关闭虚拟读写器等。该模块接口设计如下:
public interface iReaderEmulatorControl
{
......
public void on();
//打开虚拟读写器
public void off();
//关闭虚拟读写器
public boolean setReaderNumber(int readerNumber); //设置
模拟的读写器数量
public boolean setReaderType(ReaderType tagType);
//设置模拟的读写器类型
public boolean setTagType(TagType tagType);
//设置模拟的标签类型
public boolean setPortRange(int minPort, int maxPort);
//设置虚拟读写器端口号区间
public boolean setTransTime(int mSec);
//设置模拟时间
.......
}
数据发生模块: 根据测试控制台设定的相关参数, 产生符合标准( EPCglobal, ISO15693 等) 的标签数据。
驱动模块: 解析与RFID 中间件的通信协议, 将数据发生模块的数据封装后传递给数据传输模块。该模块是实现虚拟读写器与RFID 中间件通讯的关键, 以ThingMagic Mercury4 为例,使用正则表达式对RFID 中间件的事件进行解析, 设计正则表达式部分如下:
......
Pattern firstCheck = Pattern.compile ("([A- Z]+)([a- zA- Z_]+)(.
*)"); //初始匹配
Pattern selectPatten = Pattern.compile ("SELECT .*? \\(?antenna_
id *= *([0- 9]+)( +OR +antenna_id *=
*([0- 9]+))?( +OR +antenna_id *= *([0- 9]+))?( +OR +antenna_
id *= *([0- 9]+))?\\)?.* time_?out *= *([0- 9]+).*"); //匹配
SELECT 方法
Pattern updatePatten = Pattern.compile ("UPDATE .* SET (.
*?) *= *(0x)?([0- 9A- Fa- f]+).*?
(time_?out *= *([0- 9]+))? WHERE .*antenna_id *= *([0- 9]
+).*"); //匹配update 方法
Pattern antenna_idPatten = Pattern.compile(".* antenna_id *=
*([0- 9]+).*"); //匹配天线id
Pattern idPatten = Pattern.compile (".* WHERE.* id *= *0x
([0- 9A- Fa- f]+).*"); //匹配id
Pattern blockNOPatten = Pattern.compile (".* block_number
*= *([0- 9]+).*"); //匹配标签块号
Pattern blockCountPatten = Pattern.compile (".* block_count
*= *([0- 9]+).*"); //匹配标签块数
......
数据传输模块: 完成与RFID 中间件的通讯。
3.3 虚拟客户端
虚拟客户端与虚拟读写器类似, 除了完成接收测试控制台参数并向RFID 中间件发送操作请求的功能外, 还需要接收RFID 中间件返回数据并记录响应时间。可以分成以下4 个功能模块:
参数设置模块: 提供给测试控制台进行虚拟客户端的参数设置, 包括连接的RFID 中间件IP 地址、端口、测试的Web 服务及并发请求数量等。
事件发生模块: 该模块根据EPCglobal 的ALE(Application Level Event) 标准提供对RFID 中间件的Web Service 调用接口, 由测试控制台根据测试计划进行选择。
监控模块: 监控测试过程中调用RFID 中间件Web Service的响应时间, 并将结果记录到相应的XML 文档。
数据传输模块: 调用RFID 中间件的Web 服务, 接受RFID中间件返回的数据。
3.4 测试控制台
测试控制台是整个RFID 中间件基准性能测试平台的指挥中心。测试控制台根据用户设定的测试需求, 设定自动测试步骤, 控制虚拟读写器和虚拟客户端的运行, 记录系统资源占用情况, 并将所有测试数据汇总, 保存为XML 文档。测试控制台从功能上分为以下几个模块:
用户界面: 提供用户操作界面。
监控模块: 监控每一个测试步骤中系统资源占用情况, 包括CPU、内存。
测试模式设置: 为了最大限度的实现测试自动化, 该模块提供预先定义的测试模式。在测试中, 用户只需要指定所要测试的RFID 中间件( IP 地址、端口等) 以及所要测试的参数(NoR,NoC, Throughput, RT) 。
数据传输模块: 将测试每一步的参数发送给虚拟读写器和虚拟客户端。
3.5 报告生成器
测试的最终目的是将测试结果供人参考, 所以一个直观、易读的测试报告是必要的。报告生成器模块根据测试控制台生成的记录测试数据的XML 文件数据, 生成图形化的测试报告。
4 测试流程
使用RFID 中间件基准性能测试平台对某一种RFID 中间进行基准性能测试的流程大体上可以分为5 个层次, 如图2 所示。
1) 配置测试参数: 在测试工作开始前需要在控制台配置所要测试的RFID 中间件相关信息( IP, 端口,Web 服务等) , 还需要在被测的RFID 中间件中配置相关读写器信息( 在测试中就是虚拟读写器, 包括虚拟读写器服务器的IP、端口) 。
2) 监控运行被测RFID 中间件: 配置完测试参数后运行RFID 中间件, 并对运行过程中的信息进行监控。
3) 测试主体模块: 记录测试过程中每一步的数据。以测试NoR 为例, 每一步需要记录的数据有测试读写器数量、发送数据频率、数据格式、CPU 占用率、内存使用率、应用程序客户端调用的Web 服务、响应时间。
4) 生成记录测试数据的XML 文件: 将测试数据整理后以XML 形式存到指定路径下。
5) 生成图形化测试报告: 这是一个相对比较独立的步骤,用户可以根据需要选择选择需要生成报告的测试数据文件。
5 结束语
RFID 中间件是RFID 系统中非常重要的一部分。RFID 中间件接收并处理读写器发送的数据, 并为上层应用程序客户端提供服务, 大大简化了RFID 系统实施的复杂性。本文针对RFID 中间件的特点, 提出了表征RFID 中间件基准性能的参数及其自动化测试方法, 并给出了测试平台的设计。该测试平台对于企业选择合适的RFID 中间件、推广RFID 技术的应用具有一定的实际价值。
本文作者创新点: 针对RFID 中间件的特性, 提出了衡量其基准性能的参数及其测试方法, 并针对测试需求, 给出了RFID虚拟读写器的设计和实现。
RFID是自动识别技术中的一种, 它利用射频方式进行非接触双向通信以达到识别的目的。RFID 技术由于其独有的优点,吸引力与日俱增。出于对市场前景的预期和简化RFID 系统建设、维护工作的需求, 一些大的软件公司( 如IBM, BEA, Microsoft等) 相继推出了各自的RFID 中间件产品。
RFID 中间件扮演的是RFID 读写器和应用程序之间的中介角色, 从应用程序端使用中间件提供的一组共通的ApplicationInterface (应用接口程序, API), 即能连到RFID 解读器, 读取RFID 标签资料。如此一来, 即使储存RFID 标签情报的资料库软件或后端应用程序增加或改由其他软件取代, 或者RFID解读器种类增加等情况发生, 应用端不需要修改也能处理, 省去多对多连结复杂维护的麻烦。
出于对RFID 中间件的重视, 为企业在实施RFID 系统时选择RFID 中间件产品提供参考, 有必要对RFID 中间件的性能进行测试。性能测试包括中间件处理下层读写器数据和支持上层应用程序调用的能力。现有的性能测试工具( 如LoadRunner, JMeter, Benchmark Factory 等) 存在着测试对象单一、测试结果不易比较等问题, 并不能满足测试的需要, 这就需要一套针对RFID 中间件基准性能的测试方法和测试平台。
2 参数选取及其测试方法
对于RFID 中间件的使用者而言, 关心的无外乎以下几个方面: 支持的读写器; 提供的应用程序接口; 并发处理的读写器数量、应用程序客户端数量; 吞吐量; 响应时间。对于一定的应用环境, 前两个是能不能使用的问题, 而后四个是使用效果的问题, 也就是本文所论述的基准性能问题。下文分别就这四个基准性能参数作了解释, 并给出了测试方法。
并发处理的读写器数量( NoR, Number of Readers) : 在一定的系统开销和应用程序客户端响应时间限制下, RFID 中间件能够同时处理的读写器数量。这里的读写器是指与RFID 中间件相连接, 且同时向RFID 中间件以一定的频率发送标签数据的读写器。在测试过程中, 监控系统资源占用( cpu 和内存使用率) 和应用程序客户端响应时间, 逐步增加发送数据的读写器数量, 当系统资源占用和响应时间达到限制值时, 就得到了NoR。
并发处理的应用程序客户端数量(NoC, Number of Clients) : 在一定的系统开销和应用程序客户端平均响应时间限制下, RFID 中间件能够同时处理发送操作请求的客户端数量。测试方法与NoR 类似, 通过监控系统资源占用和应用程序客户端平均响应时间, 逐步增加发送操作请求客户端数量, 当系统资源占用和平均响应时间达到限制值时, 就得到了NoC。吞吐量( Throughput) : 在一定的系统开销和客户端响应时间要求下, RFID 中间件能够处理的读写器端发送标签数据的频率。类似的, 通过监控系统资源占用和应用程序客户端响应时间, 逐步增加读写器发送数据的频率, 当系统资源占用和平均响应时间达到限制值时, 就得到了Throughput。
响应时间(RT, Response Time) : 应用程序客户端发送事件请求到RFID 中间件完成操作的时间间隔。测试方法相对简单,只需要通过应用程序客户端发送需要测试的操作请求, 记录其响应时间即可。
3 RFID 中间件基准性能测试平台
对RFID 中间件的测试涉及到两方面的测试数据来源: 读写器端的标签数据和应用程序客户端的操作请求。使用实际的读写器和应用程序进行测试面临两方面的问题: 1) 测试工作需要大量的读写器设备, 这需要大量的资金; 2) 搭建这么多设备所组成的测试环境, 工作量将极其巨大、复杂。一个切实有效的解决办法就是通过软件对读写器和应用程序进行仿真, 由虚拟读写器(Virtual Reader) 和虚拟客户端(Virtual Client) 向RFID中间件发送测试数据。
3.1 总体框架
基于虚拟读写器和虚拟客户端的RFID 中间件基准性能测试平台分为以下四个模块:
1) 虚拟读写器: 对读写器进行仿真, 生成标签数据, 与RFID 中间件进行通信。
2) 虚拟客户端: 生成对RFID 中间件的操作请求, 并记录响应时间。
3) 测试控制台: 根据测试模式控制虚拟读写器和虚拟客户端的运行, 监视系统资源占用情况, 记录测试数据。
4) 报告生成器: 由测试数据生成图形化测试报告。
为了降低测试平台的运行对测试结果的影响, 系统采用分布式架构, 即虚拟读写器、虚拟客户端以及RFID 中间件分别运行在局域网的不同计算机上。虚拟读写器、虚拟客户端与测试控制台之间的通信通过Web Service 实现。系统整体软件框架如图1。
3.2 虚拟读写器
虚拟读写器是为了降低测试成本, 简化测试工作而开发的, 是整个测试平台的基础。虚拟读写器接受RFID 中间件的轮询, 解析RFID 中间件事件, 并生成标签数据, 发送给RFID 中间件, 实现对读写器的仿真。主要包括以下几个功能模块:参数设置模块: 提供给测试控制台进行虚拟读写器的参数设置的接口, 包括读写器数量、端口、发送数据频率、持续时间、标签数据格式以及启动、关闭虚拟读写器等。该模块接口设计如下:
public interface iReaderEmulatorControl
{
......
public void on();
//打开虚拟读写器
public void off();
//关闭虚拟读写器
public boolean setReaderNumber(int readerNumber); //设置
模拟的读写器数量
public boolean setReaderType(ReaderType tagType);
//设置模拟的读写器类型
public boolean setTagType(TagType tagType);
//设置模拟的标签类型
public boolean setPortRange(int minPort, int maxPort);
//设置虚拟读写器端口号区间
public boolean setTransTime(int mSec);
//设置模拟时间
.......
}
数据发生模块: 根据测试控制台设定的相关参数, 产生符合标准( EPCglobal, ISO15693 等) 的标签数据。
驱动模块: 解析与RFID 中间件的通信协议, 将数据发生模块的数据封装后传递给数据传输模块。该模块是实现虚拟读写器与RFID 中间件通讯的关键, 以ThingMagic Mercury4 为例,使用正则表达式对RFID 中间件的事件进行解析, 设计正则表达式部分如下:
......
Pattern firstCheck = Pattern.compile ("([A- Z]+)([a- zA- Z_]+)(.
*)"); //初始匹配
Pattern selectPatten = Pattern.compile ("SELECT .*? \\(?antenna_
id *= *([0- 9]+)( +OR +antenna_id *=
*([0- 9]+))?( +OR +antenna_id *= *([0- 9]+))?( +OR +antenna_
id *= *([0- 9]+))?\\)?.* time_?out *= *([0- 9]+).*"); //匹配
SELECT 方法
Pattern updatePatten = Pattern.compile ("UPDATE .* SET (.
*?) *= *(0x)?([0- 9A- Fa- f]+).*?
(time_?out *= *([0- 9]+))? WHERE .*antenna_id *= *([0- 9]
+).*"); //匹配update 方法
Pattern antenna_idPatten = Pattern.compile(".* antenna_id *=
*([0- 9]+).*"); //匹配天线id
Pattern idPatten = Pattern.compile (".* WHERE.* id *= *0x
([0- 9A- Fa- f]+).*"); //匹配id
Pattern blockNOPatten = Pattern.compile (".* block_number
*= *([0- 9]+).*"); //匹配标签块号
Pattern blockCountPatten = Pattern.compile (".* block_count
*= *([0- 9]+).*"); //匹配标签块数
......
数据传输模块: 完成与RFID 中间件的通讯。
3.3 虚拟客户端
虚拟客户端与虚拟读写器类似, 除了完成接收测试控制台参数并向RFID 中间件发送操作请求的功能外, 还需要接收RFID 中间件返回数据并记录响应时间。可以分成以下4 个功能模块:
参数设置模块: 提供给测试控制台进行虚拟客户端的参数设置, 包括连接的RFID 中间件IP 地址、端口、测试的Web 服务及并发请求数量等。
事件发生模块: 该模块根据EPCglobal 的ALE(Application Level Event) 标准提供对RFID 中间件的Web Service 调用接口, 由测试控制台根据测试计划进行选择。
监控模块: 监控测试过程中调用RFID 中间件Web Service的响应时间, 并将结果记录到相应的XML 文档。
数据传输模块: 调用RFID 中间件的Web 服务, 接受RFID中间件返回的数据。
3.4 测试控制台
测试控制台是整个RFID 中间件基准性能测试平台的指挥中心。测试控制台根据用户设定的测试需求, 设定自动测试步骤, 控制虚拟读写器和虚拟客户端的运行, 记录系统资源占用情况, 并将所有测试数据汇总, 保存为XML 文档。测试控制台从功能上分为以下几个模块:
用户界面: 提供用户操作界面。
监控模块: 监控每一个测试步骤中系统资源占用情况, 包括CPU、内存。
测试模式设置: 为了最大限度的实现测试自动化, 该模块提供预先定义的测试模式。在测试中, 用户只需要指定所要测试的RFID 中间件( IP 地址、端口等) 以及所要测试的参数(NoR,NoC, Throughput, RT) 。
数据传输模块: 将测试每一步的参数发送给虚拟读写器和虚拟客户端。
3.5 报告生成器
测试的最终目的是将测试结果供人参考, 所以一个直观、易读的测试报告是必要的。报告生成器模块根据测试控制台生成的记录测试数据的XML 文件数据, 生成图形化的测试报告。
4 测试流程
使用RFID 中间件基准性能测试平台对某一种RFID 中间进行基准性能测试的流程大体上可以分为5 个层次, 如图2 所示。
1) 配置测试参数: 在测试工作开始前需要在控制台配置所要测试的RFID 中间件相关信息( IP, 端口,Web 服务等) , 还需要在被测的RFID 中间件中配置相关读写器信息( 在测试中就是虚拟读写器, 包括虚拟读写器服务器的IP、端口) 。
2) 监控运行被测RFID 中间件: 配置完测试参数后运行RFID 中间件, 并对运行过程中的信息进行监控。
3) 测试主体模块: 记录测试过程中每一步的数据。以测试NoR 为例, 每一步需要记录的数据有测试读写器数量、发送数据频率、数据格式、CPU 占用率、内存使用率、应用程序客户端调用的Web 服务、响应时间。
4) 生成记录测试数据的XML 文件: 将测试数据整理后以XML 形式存到指定路径下。
5) 生成图形化测试报告: 这是一个相对比较独立的步骤,用户可以根据需要选择选择需要生成报告的测试数据文件。
5 结束语
RFID 中间件是RFID 系统中非常重要的一部分。RFID 中间件接收并处理读写器发送的数据, 并为上层应用程序客户端提供服务, 大大简化了RFID 系统实施的复杂性。本文针对RFID 中间件的特点, 提出了表征RFID 中间件基准性能的参数及其自动化测试方法, 并给出了测试平台的设计。该测试平台对于企业选择合适的RFID 中间件、推广RFID 技术的应用具有一定的实际价值。
本文作者创新点: 针对RFID 中间件的特性, 提出了衡量其基准性能的参数及其测试方法, 并针对测试需求, 给出了RFID虚拟读写器的设计和实现。