如果我做一个基准测试,例如我发现以下内容:
- 在1个并发用户的情况下,api给出150请求/秒。(9000点播/分钟)
- 超过300个并发用户,api开始抛出异常
- 应用程序每30分钟执行一次请求1。
如果我说:
- 最好的情况是api可以处理(30 * 9000 = 270.000用户)。在30分钟内,将有270.000个顺序请求,每个请求都来自不同的用户
- 最糟糕的情况是同时有300个用户发布请求。
如果这是真的,有没有办法计算出平均情况呢?是否与计算算法的最坏情况、平均情况复杂度相同?
回答这些问题的一个理论工具是http://en.wikipedia.org/wiki/Queueing_theory。它说您不太可能获得您所假设的性能水平,因为应用于系统的负载是波动的,因此有繁忙时期和安静时期。如果系统在静默期无事可做,它就会被迫进入闲置状态,而这是您没有考虑到的。另一方面,在繁忙时期,它通常会为待处理的工作建立长长的队列,直到队列太长以至于客户离开,或者队列变得超出系统的支持范围而崩溃,或者两者兼而有之。
http://pages.cs.wisc.edu/~dsmyers/cs547/lecture_12_mm1_queue.pdf的图1第3页的图表显示了响应时间与应用负载的图表,这可能是最乐观的情况,甚至是模糊的现实情况。您可以看到,当您接近最大负载时,响应时间会变得非常长。
到目前为止,最明智的做法是运行测试,将实际负载应用到应用程序中——这对于构建http://jmeter.apache.org/之类的东西来说非常重要。如果你想要一个经验法则,我会说不要计划对系统的压力超过你最初计算的理论容量的50%。