很早前看过Jacki的理发店模型,有一天在51上回帖的时候就突发奇想,写了饮水机做模型,最近正好有空,于是把这个思路记下来,方便以后调用。

是由这样的一个问题引发的:
事务的最大响应时间和最小响应时间相差很大,那是什么原因??
其实这个问题问的很简单,但不好回答,因为原因可能太多了。于是我们把问题转化一下:有什么办法可以提高事务的响应时间?

举个饮水机的例子:
屋子里面只有1个饮水机,10个用户同时去倒水,每个人倒水都要用1分钟时间;

那么第一个用户只要1分钟就完成了这个事务,但是第9个用户完成这个事务就需要9分钟。
因为大家都要排队。(这一点很象WebLogic里面的队列)

但是这桶水里面的容量总共只有9杯,倒完之后就要换水。所以第10个人等了20分钟才喝到水,因为他换水的时间比较长。(很象是JVM的垃圾收集)

这个例子里面,10个用户并发,并发同样的事务,分别需要1到20分钟。事务的最大响应时间和最小响应时间相差很大,那是什么原因呢?

可以从以下几个角度出发思考问题,发现原因所在。啥角度呢,就是问一下:有什么办法可以提高我的事务请求的时间呢?

1、增加饮水机;(类似于集群,效率提高是非常明显的)
2、增加饮水机容量;(类似于提高HeapSize了,在WebLogic中,提高HeapSize的另外一个代价就是GC的时间会变长,在GC这个时间段内,任务都是挂起的。废话,在换水的时候当然所有人只能等待了啊)
3、减少每个用户倒水的时间;(比如调整SQL语句,在历次的性能测试过程中,如果硬件条件不变的话,没有比这招更能带来效果的了)
4、减少每个用户请求的水资源;(比如优化业务逻辑,这需要测试人员对代码非常熟悉,目前能做到这点的恐怕还只有开发人员)
5、增加饮水机的出水率;(提高了单位时间内的ThroughOut,那TPS肯定是提高了)
等等;

那么这样子之后就可以回答上面的问题了:
有可能是SQL语句效率不高,有可能是业务逻辑太复杂了,也有可能是有可能是硬件条件实在太差。

当然,假如有人非要让你回答,事务的最大响应时间和最小响应时间相差很大,那是什么原因?这时候可以很大声的说,因为要排队啊。

呵呵,另外发现我们公司的食堂是一个非常有意思的性能测试环境。每天11:20起,每20分钟并发1000多号人去吃饭,共计5拨,另外食堂有10个排队窗口,可容纳1200人同时就餐。

嗯,思路还没整理好,这篇先这样,以后再来看看。