是否合乎逻辑地说:“如果请求的平均服务时间是 X,并且请求的可承受等待时间是 Y,那么要服务的最大并发请求数将是 Y / X”?
我想我要问的是,是否有任何我没有考虑到的隐藏因素!?
是否合乎逻辑地说:“如果请求的平均服务时间是 X,并且请求的可承受等待时间是 Y,那么要服务的最大并发请求数将是 Y / X”?
我想我要问的是,是否有任何我没有考虑到的隐藏因素!?
大体上是的,但是您的服务提供商(在您的情况下为网络服务器)能够并行处理多个请求,因此您应该考虑到这一点。我假设您测量了端到端的服务时间,并且还没有按并行流的数量对其进行平均。您没有也无法实际衡量的另一件事是您的网站的延迟。
您正在研究的是 Erlang 单元(不是使用相同名称的语言),它用于描述系统可以承受多少负载。Erlang 是无单位的(它只是一个数字),起源于老式电话 POTS,它用于描述每个时间段需要多少根电线来处理 X 次呼叫,并且阻塞概率很低。除了 erlang 之外,engset 更多地用于高容量系统,例如移动系统。
它还用于将昂贵的顾问报告用于实时计算机系统和数据库,以描述可能发生性能下降的点。Wikipedia 对此http://en.wikipedia.org/wiki/Erlang_(unit)有一篇文章,而“固定和移动电信、网络系统和服务”一书有一个很好的关于性能分析的章节。
在针对电话系统时,只需用 word webserver 替换它,它的行为就相同了。网络服务器是相同的概念,提供以随机间隔到达并行容量有限的系统的负载。在您的情况下,您可能可以使用负载工具比并行容量更容易计算总负载,然后再计算公式。这样做是为了获得对整个系统模型的一定程度的信心。
当您通过并行流(即 Web 请求)随机到达负载并且服务时间只能平均或估计(即它在现实生活中有所不同)时,Erlang/engsetformulas 非常有用。然后,您可以计算阻塞概率,即在为当前请求提供服务时新请求需要等待的概率,以及它将等待多长时间。它还有助于分析您是否需要并行处理更多请求,或者使每个请求更快(#lines 和 erlang 中的保持时间)
接下来您可能会研究排队系统分析,一旦请求阻塞(队列),模型就会发生轻微变化。
如果您专门谈论网络服务器,那么不,您的公式不起作用,因为网络服务器旨在处理多个同时请求,使用分叉或线程。
这使公式变得更加难以量化 - 根据我的经验,Web 服务器可以处理大量(即数百或数千)并发请求,这些请求消耗很少或不消耗时间,但随着请求消耗更多时间,往往会显着降低并发性.
这意味着“平均服务时间”并没有太大用处——它可以隐藏很大的变化,实际上对你影响最大的是异常值。
很多因素都没有考虑
也就是说,粗略估计的一种简单方法是使用 apache ab 工具(apache benchmark)
例如,一次获取 100 个请求的 1000 倍主页:
ab -c 100 -n 1000 http://www.example.com/