使用我们的在线队列如何防止网站崩溃和网站崩溃 - 一个网络服务器可以处理多少个并发用户?

为什么使用基于费率的虚拟候机室?

基于费率还是一出一进?我们权衡了利弊。

我们实际上找不到一出一进的任何优点。 简而言之,这种方法的问题是,当用户是电子商务网站的访问者时,网络服务器知道它在任何时刻有多少个并发用户。 这是一个展示性的问题。 原因就在这里。

在这篇文章的后面,我们还告诉你如何使用基于价格的虚拟房间来保护你的网站。



G2上评价最高的虚拟候机室
G2是世界上访问量最大的SaaS评论网站

我们的客户对Queue-Fair的评价


负载测试 http请求 一个网络服务器在没有额外服务器资源的情况下能处理多少个请求

一个网络服务器可以处理多少个并发用户?

如果你知道一个网络服务器处理多少个并发用户,以及从交易流程中的第一个页面到订单确认页面的平均交易时间或访问时间,你就可以用利特尔定律将其转换成排队率,即用用户数除以时间长度,像这样。

排队率 = 并发用户/交易时间

基于速率的队列系统的准确性如何?

Queue-Fair将以您指定的速度向您的网站输送访客--我们拥有迄今为止最精确的队列人工智能,以确保您每分钟想要的访客数量就是您每分钟得到的访客数量,自动计算出轮到他们时不在场的人,以及晚回来的人。

这如何转化为并发用户的数量? 当然,不是每个到达你的网站的访问者都会用准确的平均交易时间来完成他们的交易,但由于大数法则,你会通过Queue-Fair获得非常稳定的并发用户数。

例如,假设你的排队率是每分钟100个访客。 我们会在每分钟向您的网站源源不断地发送100名访客--这就是我们的工作,而且我们在这方面的能力令人惊叹。 我们还假设,人们使用你的网站的平均时间为5分钟,其中70%的人从排队通过到提出最后一个页面请求(无论他们是否完成交易)的时间在4到6分钟之间。 这是一个标准偏差,即平均数的两边各1分钟。 从统计学上讲,这意味着每一个需要5.5分钟的访问者,都会有另一个需要4.5分钟的访问者,因此,当你以任何方式计算大量的访问者时,这些跨越多个会话的个人访问时间的变化往往会相互抵消。 大数法则说,涉及的人数越多,这种抵消就越精确。

操作系统的最大网络服务器资源数
并发用户的平均数字计算及置信区间

到底有多准确? 我们可以用一点统计学的方法来解决这个问题。 有一个5*100=500的样本量,这就是这里涉及的大数。 这就是你要计算的人数。 这意味着交易时间的平均值的标准误差是1(标准差,1分钟)除以样本量的平方根(所以是500的平方根),根据平均值的标准误差的统计公式,交易时间的平均值的标准误差是0.044分钟,或只是2.7秒,这还不到百分之一

这意味着,如果队列速率为100,每个访问者的交易时间为5分钟,或多或少,你应该期望你的网站在70%左右的时间里有495505个并发用户,所以计算表明,使用基于速率的队列将为你的网络服务器提供非常稳定的负载。

但是,这种计算方法准确吗? 这里有一些微妙之处--例如,每次计算并发用户时(即在任何给定的时间内),我们快乐的平方根的样本量并不总是正好是500,而且正态(高斯)分布可以给出负的交易时间,这在现实生活中并没有发生。 因此,我们使用一个逐个访问者、逐秒的模拟器来进行测量,以检查这些类型的计算,这告诉我们,根据上述数字,你应该在70%的时间内期待493到507个访问者,所以数学上非常好地保持了这一点。 测量数据还告诉我们,你的网站至少有95%的时间会有500±15个并发用户。

这可能比你的网络服务器能够测量使用你的网站的人数的准确性更稳定!这是很重要的。 更妙的是,这里真正巧妙的是,即使你不知道你的访问者的平均交易时间或标准偏差是多少,这些数学量存在,无论你是否知道它们,你都会得到一个稳定的负载。

其结果是,Queue-Fair将提供你想要的每分钟访问量,而且几乎完美无缺,从而使你的网站上有非常稳定的并发用户数,以及你可以完全控制稳定的网络服务器负载

万岁!


servers capacity can be exceeced with inaccurate queues 现在是一个警告。 值得注意的是,您网站上的并发用户数量的稳定性--因此您的服务器负载的稳定性--确实关键取决于您的虚拟候机室供应商每分钟向您发送您想要的访客数量的准确性,因此这是您选择虚拟候机室平台时的一个关键因素。因为我们提供世界上最准确的虚拟候机室,没有人比Queue-Fair更能阻止您的服务器被淹没。

计算排队率的简单方法

如果你不知道一台服务器可以处理多少个并发用户,或者交易时间,怎么办?你可以看看可能成为你瓶颈的页面--通常是点击 "立即购买 "按钮的页面。 使用谷歌分析,找到该页面的每月独立访客,或计算你的每月订单。 将此除以30 * 24 * 60 = 43,200,这是一个月的分钟数(大约)。 这是你整个月每分钟的平均访客数。 将其乘以3。 这是你在工作时间内每分钟的平均访客数(大约)。 将其翻倍。 这可能是一个用于排队率的安全数字。

例如,假设你每月处理100,000个订单--也就是100,000次点击 "立即购买 "按钮。 这就是100,000/43,200=每分钟2.31个订单。 你会期望这些订单大部分是在白天,而你的服务器在晚上会比较安静,所以用这个数字乘以3,就是每分钟7个订单,作为对你的服务器在营业时间内繁忙程度的粗略估计。 如果得出的数字小于50:需求会有高峰和低谷,所以如果你的服务器在高峰时段没有明显的缓慢,就用这个数字乘以2,得到每分钟14个活跃用户。 如果这个数字超过50:每分钟的高峰和低谷相比之下会更小,把这个数字加倍并不安全。 你最终得到的数字可能是一个安全的排队率开始的数字,相当于你可以安全地管理每秒多少个请求;如果你发现你的系统在这个速度下仍然对最终用户的性能有反应,你可以随时增加它。

计算你的网络应用的活跃用户的最大级别

如果你的订单有时间戳,你也可以看看上个月你在一分钟内的最大订单量--但要谨慎使用,因为你不知道在这一分钟内你可能因为服务器变慢而放弃了多少订单,所以要减少20%。

本文的其余部分讨论了其他一些计算队列速率的方法。

关于并发用户、并发连接、并发会话和平均会话时间的困惑

错误 #1: 并发用户 vs 并发请求 vs 并发连接 vs 并发会话

值得指出的是,在通常情况下,"并发用户 "至少有两种定义。

我们使用的定义是:"在任何时候参与交易流的人数"。 这是你需要知道的设置排队率的关键数字。 这就是现在有多少用户正在浏览你的网站。并发会话的数量通常比并发连接或并发用户的数量大一些,因为有些会话正在超时过程中,增加了平均会话时间。

与此相对应的是多少个并发请求,也就是你的网络服务器在任何时候正在处理的HTTP请求的数量。 非常令人困惑的是,很多技术人员在有多少个并发用户时,会多少个并发请求。

然后是并发连接(或并发TCP连接到你的网络接口卡上的同一个服务器端口),这是任何时候在你的服务器端口或后端服务上打开的TCP/IP套接字的数量。 在进行页面请求时,浏览器默认会保留连接,以备页面提出任何进一步的请求,或用户转到不同的页面。 这就减少了每秒钟打开新的TCP/IP连接的请求数,使服务器进程更加有效。 这些并发连接的超时因浏览器而异,从60秒到永不关闭。 你的服务器也可以在一段时间没有活动后自动关闭连接。在Linux网络服务器上,你可以用这个命令获得同一服务器端口的并发连接数。

netstat -aenp | grep ":80\|:443" | wc -l

如果你感到好奇,可以试试。同样,有些人也把这称为 "并发用户",其实它指的是并发连接。

事实上,如果你要求你的主机提供商告诉你你的网络服务器处理的最大并发用户数(多少峰值流量),他们实际上可能会给你一个并发会话、并发请求或并发连接的数字,原因很简单,他们不知道你的平均交易时间、交易流程中的页面数量,或任何其他信息,使他们能够告诉你你的网络服务器处理多少个并发用户。 所有这些数字都有不同的值。

如果你向你的主机供应商或技术团队询问有关最大流量水平的信息,你必须澄清他们指的是并发用户、并发会话、并发请求还是并发连接,这一点超级重要。

错了这一点可能会使你的网站崩溃!

原因就在这里。 每个页面都是一个单一的HTTP请求,但所有的图像、脚本和其他来自你的Web应用程序的文件,浏览器用来显示页面是HTTP请求。

让我们想象一下,你的技术团队告诉你,服务器支持500个并发用户,但他们实际上是指500个并发请求。 用你的5分钟交易时间,你使用上述公式,假设你的网站可以支持每分钟100个访问者。

可以吗?不能。

当人们通过交易流程时,他们实际上只是在每个页面加载时从你的服务器发出请求。 这影响到你的服务器每秒能处理多少流量或活跃用户。 在5分钟的交易时间中,对于一个普通用户来说,这只是几秒钟的时间。 因此,你可能认为500个并发请求意味着你可以处理更多的并发用户,但你很可能是错的。你现在能明白,以多少流量或活跃用户总数来理解你的网站容量是多么复杂的一件事吗?

在计算你的网页可能得到多少个请求时,首先要保证你的服务器资源安全,以便为每个用户提供良好的体验。

将并发请求转换为并发用户

为了从最大的并发请求总数中计算出你的最大并发用户,你需要知道

  1. 你的交易流程中的页面数量
  2. 在你的流程中,从第一页到最后一页的平均访客交易时间
  3. 每个页面平均有多少个请求构成
  4. 你的服务器处理一个HTTP请求的平均时间

你可能已经知道1)和2)--在我们的例子中是6页和5分钟。 你可以很容易地计算你在进行交易时看到的页面。如果你不知道平均交易时间,谷歌分析可能会告诉你,或者你可以检查你的网络服务器日志。

对于3)和4),火狐浏览器可以提供帮助。 在你的网站上的一个页面上点击右键,选择检查元素和网络标签。 然后点击CTRL-SHIFT-R来完全刷新页面。 你会看到列表中页面的每个元素的网络加载时间。 你要确保你能在 "已传输 "一栏中看到传输大小,否则文件可能是从缓存中提供的,这可能会扰乱你的计算。 你可能会看到一些脚本和其他资源来自你网站以外的服务器,所以你可以在左边的过滤框中输入你网站的域名。 要看持续时间栏,右击任何一栏的标题,在弹出的菜单中选择时间->持续时间。 你的屏幕应该看起来像这样。

谷歌处理一个正确配置的nginx与谷歌分析的图片上传

此页面的火狐网络标签,显示来自queue-fair.com的持续时间和请求数量。

用于显示你的网页的文件可能来自许多不同的网站,所以你也要使用左上角的过滤器,只显示来自你的网站的文件--但前提是你确定 这些来自其他网站的文件不是导致页面加载缓慢的原因,或者是你的瓶颈的一部分。

火狐在显示屏的左下方为你计算请求数,仅这一个页面就显示了36个HTTP请求

你需要对交易流程中的每一个页面都这样做--计算总数,然后除以页面数,就可以找到每一个页面的平均HTTP请求数,也就是我们列表中的第3项)。 现在你可以看到为什么每个HTML页面的子请求数是你的网络服务器能处理多少流量的一个关键因素。

对于数字4),你需要看一下持续时间一栏,找出所有页面的HTTP请求的平均数。 如果你不确定,可以假设半秒--反正这里面有很多不确定性(见下文)。

计算出在同一时间有多少个会话,有多少个用户,在你的网络应用中每秒有多少个请求,无论是单服务器还是静态内容。

进行数学计算

让我们举一些例子数字。 我们已经说过,在这个例子的服务器流程中有六个动态页面,这就是1),平均交易时间是5分钟,这就是2)。 让我们假设每个页面有36个HTTP请求,这就是3),每个HTTP请求的服务器处理时间为半秒,这就是4)。

有了这些数字,一个可以处理500个并发请求的服务器可以每秒处理500/(0.5秒)=1000个HTTP请求,也就是每分钟60,000个HTTP请求,当它完全达到极限时。

在5分钟的交易时间内,它可以处理5 * 60,000 = 300,000个HTTP请求。 似乎很多,对吗?

但是,对于每个访问者来说,有六个页面,每个页面平均有36个HTTP请求,因此,这就是6*36=216个请求。

因此,300,000个HTTP请求的容量在理论上可以处理300,000 / 216 = 1,389个并发用户

错误 #2: 网络服务器随着负载的增加而变得越来越慢

嘿,那真是太好了!我们以为我们的排队率只能是100,但1389/5分钟=每分钟278个访客,所以我们可以有更高的排队率!"。

嗯,可能不是。 首先,你的访问者不会像上述计算假设的那样,整齐地以半秒的间隔发送请求。 更重要的是,你会在网站不忙的时候测量你的输入数据。 垃圾进,垃圾出。

当网站繁忙时,服务器需要更长的时间来处理请求--你会在其他网站上注意到这一点,当事情繁忙时,你等待页面的时间更长。 这增加了你的服务器处理一个HTTP请求的平均时间(4),从而降低最大吞吐量。 因此,把每分钟278个访问者的数据减半。 然后再减半。你可能现实地看到,在最大负荷下,每分钟大约有70个新访客。

你的流量激增带来的负荷越大,机器就越慢。

其他干扰因素包括缓存,这意味着你的访问者的浏览器可能不需要对每一个页面进行每一次请求--这往往意味着服务器需要更少的资源,可以增加你的服务器每分钟可以处理的新访问者数量。 负载平衡器将负载分布在几个服务器上,并提供静态内容而不是动态页面,也可以加快你的服务器进程,因为每个服务器需要的资源更少。

你还会发现,并不是所有的页面都需要同样的时间来完成,因为有些页面需要的资源比其他页面少,以制作和服务。 数据库搜索、搜索查询和更新需要的时间最长,所以你会在流程中的某个地方出现瓶颈,人们在那里堆积,等待处理信用卡细节和存储订单,或者等待检查可用性。 每一个交易流程都有一个最慢的步骤,所以总有一个瓶颈的地方,对于一个网络服务器可以处理多少个并发用户的问题,总有一个最大值的答案--而且可能涉及几个限制。 在这种情况下,你要把你的队列速率设置得足够低,以确保你的服务器有cpu时间能力来处理足够多的人并发你的流程中最慢的步骤,这样人们就不会堆积在那里。 否则,你的网络服务器可能真的会陷入停滞状态。

不确定如何为每个用户估计服务器容量服务器资源

那么,我应该怎么做?

我们的经验是,在进行第一次销售时,每个人都高估了他们的服务器应对大流量的能力。

每个人都是如此。

准确地确定平均会话时间和终端用户在缓慢或高峰流量期间的性能,并不适合胆小的人。 最好的办法是进行适当的负载测试,让 "假 "客户在进行负载测试时,完全按照他们在现实生活中的情况,以同样的顺序进行HTTP请求,在进行负载测试时,页面之间的等待时间与你在现实生活中看到的相同,并在你增加虚拟访问者的数量时,密切关注你的处理器负载、IO吞吐量和响应时间。 你可以使用Apache JMeter(我们也喜欢K6,用于较轻的负载或较慢的机器),但无论你使用什么工具,要以完全正确的方式模仿每个用户的行为是很耗时和棘手的(特别是在缓存的复杂性方面)。 即使如此,也要把你的最大数字减半。

在没有这种情况下,要谨慎行事

你可以在任何时候使用Queue-Fair门户网站轻松改变任何Queue-Fair队列的队列速率。 从每分钟10个访问者开始,或者从你在一个比较正常的日子里的交易率开始,在你的票开始销售后看一下情况,如果一切看起来很好,你的处理器负载很低,你的sql数据库很好,(最重要的是)当你点击CTRL-SHIFT-R时,你的页面是有反应的,那就加倍,等待一下,然后重复。 你很快就会发现你在这个 "负载平衡 "过程中所需要的实际速率(看到我们在那里做了什么吗?

你要避免的是把队列速率设置得太高,然后不得不降低它,因为这a)意味着使用该网站的人经历缓慢的页面加载,和b)导致估计的等待时间增加。 所有在你的队列中的人都会叹气的

错误 #3: 在队列开放后过快地提高速率

记住,你会在你的订单流程的某个地方有一个瓶颈--每个交易都有一个最慢的步骤--你会得到多个会话堆积在那里。 你不想做的是,在你的票务销售中得到一分钟,看到你的服务器处理器负载远低于其最大数量,并提高速率。 你的访客可能还没有走到 "现在购买 "按钮。 你要等到你的sql数据库报告的新订单的速度与你的队列速度相同或相似时,再进行测量和响应性测试。 请记住,每次你提高速率时,额外的访问者需要相同的时间才能到达你的瓶颈,所以你将无法准确地评估你的服务器在新的速率下的表现,直到时间过去之后

减慢消耗服务器资源的决定
当服务器容量超过时,服务器就会自动关闭

错误 #4: 抢夺你的服务器

我们已经讨论过,一旦你的队列打开,最好逐渐增加队列速率。 你可能知道你的服务器确实有一个限制,不能超过这个限制,否则系统就会崩溃,甚至可能知道这个限制是什么 - 但你可能不知道的是,当负载接近这个限制时,通常没有什么迹象 - 通常只有一些错误或警告,或处理器负载超过80%。

当网络服务出现故障时,它们往往会很快 "断裂 "或瘫痪。 这通常是因为一旦你的系统不能再像它们进来时那样快速地处理请求,内部处理队列就会建立起来。然后,你的系统不得不做处理、管理和存储其内部队列以及请求的工作,这就是服务器崩溃的原因。 非常快。 一旦发生这种情况,你的服务器可能会在一段时间内用一个错误页面来回应,但这对你没有帮助,因为看到它的访问者会立即点击刷新,使负载更加复杂。

因此,不要把你的服务器推得比你需要的更难。追求最后20%的cpu时间容量,通常不值得冒险。 如果Queue-Fair门户中显示的队列规模(图表中的黄色等待数字和线条)正在逐分钟减少,甚至只是缓慢增加,而且显示的等待时间是50分钟或更短,那么你处理订单的速度足够快,队列最终会自动清空并停止显示队列页面,而不需要你做任何事情,也不需要你告诉老板,你把它推得太猛,破坏了它。只要队列前面的速度高于每分钟的加入人数(两者都显示在Queue-Fair门户中),你最终会达到目的--转折点通常是在每个事件的至少几分钟后。 如果你销售的是数量有限的产品,你很可能在达到转折点之前就卖完了。

好消息是,如果你不小心把队列速率设置得太高,你的服务器就会崩溃,Queue-Fair可以帮助你迅速恢复运行--只要把队列放在 "保持 "状态,直到你的服务器准备好再次处理访客。 在 "保持 "模式下,排队者会看到一个特殊的 "保持 "页面,你可以在在线活动前设计这个页面。 当队列处于 "保持 "状态时,没有人会从队列前面通过,但新的互联网访问者仍然可以在后面加入队列,一旦堵塞被清除,就会公平地排队,这将很快发生,因为Queue-Fair正在保护您的网站免受需求影响。 保持页面是比将排队率设置得很低更优越的用户体验,特别是如果你更新它,告诉访问者你期望排队重新开放的时间,用门户页面编辑器很容易做到这一点,即使数十万人已经在排队中 - 在保持模式下,如果你需要,你甚至可以用Queue-Fair独特的接纳一个按钮让他们一次通过,同时你的系统从快照中恢复。

因此,如果你发现你的服务器在你的活动期间需要休息,"保持 "页面正是你所需要的,并将帮助你的服务器更快恢复。

总结

在这篇文章中,我们已经解释了为什么基于速率的队列总是前进的方向,并给出了两种方法来计算你所需要的速率,但除非你已经对你的整个交易流做了全面和准确的虚拟访客负载测试,并且真的超级超级确定,否则我们的建议总是相同的。

  1. 开始时,排队率设置为10,或你在一个比较正常的日子里的交易率。
  2. 注意你的处理器负载和其他性能指标。
  3. 等到新的订单以与您的队列速率相同或相似的速率被记录在您的sql数据库中。
  4. 在你的网页上点击CTRL-SHIFT-R来检查响应性。
  5. 增加排队率不超过20%。
  6. 回到步骤2,再次等待
  7. 一旦队列规模减少或每分钟稳定增加的速度降低,并且显示的等待时间少于50分钟,就不需要再快了。
  8. 坐下来,放松一下! Queue-Fair为您提供服务。

如果你销售的是数量有限的产品,你也不需要注意步骤7。

这是对你的第一个队列而言,当时你不知道你的系统能支持的实际最大队列速率。 对于以后的队列,一旦你测量了你的系统实际能处理的队列速率,你也许可以再次使用相同的数字-- 但前提是你的系统没有任何变化。 在实践中,你的系统可能在不断开发和修改,你可能不知道最近的变化对你的最大队列速率有什么影响--所以为什么不从以前测量的数字的一半开始,重复上述过程?

记住,安全总是比遗憾好。


数以百计的领先组织信任
我们的队列解决方案

Customer 1 Customer 2 Customer 3 Customer 4 Customer 5 Customer 6

解决你的互联网流量激增的简单方法

开始吧