【百度分享】Socket通讯模块压力及大数据对比工具开发之aperlib(三)
3. 压力工具代码重用,大数据对比工具轻松开发,快速进行大数据对比
Aperlib提供大数据对比工具的开发框架库,和压力工具框架相类似,它提供不同模块的大数据对比工具的共同部分的功能代码,将不同部分用虚函数的形式提供给开发者,通过对虚函数的重写,来实现不同大数据对比工具的不同部分的功能。
图3 Aperlib大数据对比的功能及重用接口说明图示
由上面的图示我们可以看到,大数据对比工具的很多功能部分是和压力工具是一致的,特别是一些需要重写的虚函数,在实质上这些代码是可以重用的,我们通过重用这些代码能够减少很多的工作量,在有压力工具的基础上进行大数据对比工具的开发的速度是非常快的。
Aperlib提供的大数据对比工具实现的是以压力方式发送请求,并在内存中对结果进行对比,将请求的和结果相对应,因而大数据对比的效率很高,而且各种信息提供的很全面,进行问题的定位也很方便,另外由于模块升级时很有可能会有接口上的变化,因而aperlib支持对于不同接口的socket通讯的模块的大数据对比
3 aperlib的程序逻辑及组成
aperlib中有压力和大数据对比两个功能,下面我们分别介绍一下:
1. 压力工具的基本逻辑及组成
压力工具的基本逻辑见下图:
这里有两个pool:data_pool和connection_pool,分别用来管理压力的请求信息和连接。有三个线程来实现数据读取,发送请求,检测连接和接收结果数据的功能。读取数据线程从压力词表中读取请求的文本信息,并将这些信息转化为被测模块所需要的请求格式(如二进制数据结构等),然后将数据放到data_pool中。发送线程分别从data_pool和connection_pool中获取请求数据和可写的连接,将请求数据通过可写连接发送给被测模块,并修改连接状态,放回到connection_pool中,并控制压力大小。check和接收数据线程从connection_pool 中获取可读连接句柄,将结果数据读取回来,并根据设定将结果写入到文件或者丢弃,另外通过check连接的状态,将可用连接法如 connection_pool,并将超时或者错误连接重建。
针对上面的功能,aperlib提供了如下的类来实现相对应的功能:readdata类实现请求数据管理的功能,cepoll_ctl类实现连接管理相关功能,stress_ctl类实现压力控制功能,stress_template类通过调用上面三个类的接口函数实现三个线程的具体功能。
------解决方案--------------------z这么多,,减下去。。
------解决方案--------------------学习、。。。。。
------解决方案--------------------太难 不会
------解决方案--------------------学习学习