一提到性能模型, 可能大多数人马上就想到网站。 网站的性能模型属于“在线交易处理“模型(On-Line Transaction Processing Model),这是最常见的性能模型。
不同的性能测试模型类型,其测试方法, 性能指标都会很不一样。 比如对于OLTP模型, Response Time是一个关键性能指标, 但对于 流水线模型, Response time就并不是一个关键性能指标。
在开始性能测试项目的第一步就应该识别出其性能测试模型的类型。这样你的测试才可以有的放矢。
这是最常见的类型. 所有的Web网站都是这种类型. 银行, 股票等的交易系统也是这种类型. 这种类型的特点是客户发起一个Request, 然后等待Request被处理完成, 如下所示。 这种模型的特点是
1)对于Client来说, Request是阻塞执行的, 也就是在发起下一个Request之前, 必须得到上一个Request的Response。
2)信息的流动式封闭的, 也就是信息从Client发出, 回归于Client
+-------------+
request | Server |
+-----+ +------->| |
|Client | |
| | response | |
+-----+<---------+ |
| |
+-------------+
流水线模型最常见的就是监控服务器. Agent采集数据然后发往服务器. 服务器在收到数据后, 马上告诉Agent数据已经收到. 但是这个时候该数据的处理才刚刚开始, 比如数据会被存到数据库, 数据可能会trigger一封Email, 等. 这种模型的特点是
1) 对于Source端来说, request的执行是异步的。也就是说无论上一次的Request是否已经完全处理,Source端都可以发起第二次request。
2) 信息的流动式开放的。也就是信息的起点和终点不是同一个。
3) 一般来说这种系统内部的信息处理模块有多个,而且模块间都是异步的, 通过Queue来串联. 就像流水线一样. 如果某一个模块处理能力慢了, 它的前端并不会受到直接影响.
+----------------+
|Server |
+-------+ | +---+ +--+ +--+| +-------+
|Source |+--->| |M1 | |M2| |M3||+-->|Target |
| | | +---+ +--+ +--+| | |
+-------+ | | +-------+
| |
+----------------+
现实生活, 快递物流系统就是典型的流水线模型的体现. 当你把物品交到快递公司的工作人员手里时, 你马上就能就能收到一张回执, 但是物品并没有到达目的地. 物品会先存放在本地仓库, 然后运输到目的地的仓库, 然后由目的地所在的快递人员吧物品派送到对方手中.
+----------------------------------+
|Express Company |
| |
| |
| +-------+ |
+---------+ | |Local | +---------+ |
|Customer||+->|Branch | |Warehource |
| | | | | +---------+ |
+---------+ | +-------+ |
| +--------+ |
| |Logistics |
| |Company | |
| | | |
| +--------+ |
| +---------+|
| +----------+ |Remote || +------+
| |Warehource| |Branch +->|Target|
| +----------+ | || | |
| +---------+| +------+
| |
| |
+----------------------------------+
静态数据压力型(Static Data Load Model)
静态数据压力型和前两种不一样. 它并没有一个所谓的输入端. 下面是两个例子
l 在Console展现一个包含非常多元素的页面.
l 提交一个非常耗时的产生Report的Request.
这种类型的性能模型看上去并不像我们通常理解的性能模型, 它也不能被前面两种模型所覆盖. 所以单独定义为静态数据压力模型.
值得指出的是, 这种压力模型往往被软件开发或者测试人员所忽略, 但是它却是客户非常关心的, 因为客户会去真正使用这些功能.