正确的负载测试方法如何使Roger's Sporting Goods脱颖而出
在在线零售中,从黑色星期五和网络星期一之前的假期一直延伸到假期的购物季节可能会非常有成效。如果您的电子商务网站运行不正常,也会给您带来很大的压力。多年来,罗杰(Roger)的体育用品商店都有着旺盛的购物季节,而且每年都在增长。但是,即使在购物者努力改善的情况下,他们的电子商务网站每年在此高峰购物者时段仍处于关闭状态。
罗杰体育用品公司的唐纳德·麦考密克(Donald MacCormick)不仅要进行改进,还希望阻止网站崩溃。为了改善网站的基础架构,并为购物旺季准备了很多时间,Classy Llama帮助Roger迁移了托管服务提供商,并部署了功能更强大的新硬件。但是,即使有了新的硬件,Classy Llama仍然无法预测基础架构可以承受的容量,以及它是否有能力在即将到来的季节中应对大量的购物者。为了尝试准确确定什么是基础架构容量以及它可以承受的容量,需要进行负载测试。此外,该测试必须在Roger的体育用品生产站点上进行,从而限制了在任何测试中可以模拟的内容。
唐纳德向Classy Llama寻求帮助。 优雅的骆马小组提出了一项负载测试计划,其中应包括分析Roger的Sporting Goods往年的高峰购物流量。该分析提供了有关过去几年中导致站点崩溃的流量级别和类型的基准。该数据用于创建负载测试计划,以对新的基础架构进行适当的测试,以确保它已准备好进入购物季节。
历史分析是根据前一年的“网络星期一”数据进行的。分析着眼于正在访问哪些页面以及每小时高峰。数据按照访问页面的主要类别进行存储,以了解需要在新基础架构中重新创建和测试的内容。类别包括:
模拟添加到购物车中的项目以及在生产环境中下订单既困难又会引入大量的测试订单,我们必须弄清楚如何避免在其他系统中运行,因此我们决定首先关注更简单的系统浏览访问量可以提供大多数见解的流量。
上一年的“网络星期一”期间,该网站达到了高峰时段,平均每秒浏览5.1次。该数据点提供了有关基础架构需要处理的数量的基准。通过与罗杰(Roger's)讨论即将到来的购物旺季的计划,我们确定了计划中的营销活动带来的预期流量增加意味着每秒需要处理的预期网页浏览量将增加一倍。但是,最终计划是确保基础架构不会超出预期的流量增加,因此我们设定了一个目标,即每秒具有15次页面浏览量。
负载测试已获批准,Classy Llama使用JMeter开发了一些测试来模拟交通负载。初始测试只是模拟了最常见的浏览行为:
类别的基本浏览是负载测试的关键组成部分,因为前几年的分析证明这是他们流量的主要来源。
为了提供一个简单的指标来粗略评估服务器的容量,Classy Llama使用了服务器可以按CPU使用率百分比交付的每秒页面数。页面请求是当前和历史记录(通过Google Analytics(分析))收集的简单指标,CPU使用率是Web服务器的最大瓶颈。事实证明,这是指示整个基础架构资源使用情况的一个不错的指标。从Google Analytics(分析)中获取一个小时内的最近浏览量指标,以及在同一时间段内看起来新的基础架构每秒能够承受大约10次浏览量的服务器CPU使用率。
有了这个估计的负载之后,执行了一个完整的15分钟负载测试,将2台Web服务器中的1台提高了85%的CPU使用率。负载测试表明,在一台服务器上每秒可以处理3.82次页面浏览。罗杰(Roger)的基础架构运行着两台相似的服务器,这相当于每秒经过全面测试的总加载能力为7.65页浏览量。这足以满足上一年的需求;但是,还不足以达到15个浏览量目标。
优雅的骆马希望从未缓存的页面看到一些初始负载,然后在对缓存的页面进行重复的页面请求之后有了显着改善。实际上,团队在同一页面的每个请求上看到一致的加载时间。这表明全页缓存功能存在一些问题。团队注意到TTFB(第一个字节的时间)为2–在大多数页面上,预计TTFB在缓存后不到1秒的时间为4秒。 优雅的骆马建议调查并解决全页缓存问题,因为它对于负载情况下的服务器性能以及改善客户体验非常重要。固定了整页缓存后,Classy Llama相信他们可以在现有的2台Web服务器中实现每秒15次网页浏览的所需性能。
调查全页缓存问题揭示了预期的操作外观,但是未实现所缓存页面的性能改进。 优雅的骆马发现,当Magento系统在建立页面空值后保存完整页面缓存时,该值被保存在缓存存储器中。这导致看起来像是缓存命中。但是,当它返回空值时,由于缓存未命中整个页面的重建而处理了请求。发现了核心代码如何在缓存的页面中执行打孔的问题。解析页面内容时,实现达到了一个模糊的限制。
对服务器配置的简单调整增加了限制,以允许缓存正确运行。此调整将TTFB(到第一个字节的时间)的产品页面加载时间从4秒降低到0.7秒,从而产生了显着的结果。以前指示两台服务器每秒可以处理7.6个页面浏览量的负载测试现在也计划将新的容量提高到每秒89.9个页面浏览量。
罗杰斯不想冒险,决定不仅调查整个页面缓存问题,而且在接下来的几个月中将服务器数量增加一倍。这是通过与托管服务提供商安排另外两个相同的Web服务器安装3个月来实现的。这样一来,Web服务器就增加了一倍,总共提供了4个以解决需求。还使用DataDog建立了更好的监视工具,以帮助诊断基础结构性能问题,并在进行调整时识别违规情况。加上两个额外的Web服务器,预计可提供每秒194次页面浏览的容量,在相同的负载测试下,与所有四个Web服务器的容量相比,其容量将增加一倍。
在解决了整个页面缓存问题并将服务器数量增加一倍之后,Roger计划进行大规模促销,以在“网络星期一”之前测试这些改进。促销活动取得了巨大成功,大大打破了Roger每小时,每天的订单,收入和平均订单价值的销售记录。促销活动在高峰时段每秒产生6.9次页面浏览,这仅使基础结构承受的压力达到CPU使用率达到14%的程度。此外,整个促销期间都没有问题。罗杰准备参加网络星期一
网络星期一的流量发布后,罗杰在当月第二次创下新的销售记录。罗杰(Roger)在“网络星期一”的高峰时段提供了每秒10.11的页面浏览量,并且所有网络服务器上的CPU使用率平均仅为27%。在“网络星期一”的高峰时段,对20秒进行更细致的分析后发现,峰值每秒达到14次页面浏览量,使所有Web服务器的CPU使用率达到56%。另一个系统报告的是,在该时间段内,到达该网站的流量中有20%以上是机器人流量,而该流量不会报告给Google Analytics(分析)或用于确定每秒浏览量的New Relic浏览器指标。 优雅的骆马发现该应用程序(PHP-FPM)在相同的流量高峰下每秒处理28个请求。
根据《网络星期一》的测量,对基础设施的85%容量的新预测是每秒32.43次页面浏览量。尽管这不是在合成负载测试中确定的“每秒194页浏览量”指标,但这仍然是一个重大改进。
除了由于在站点高负载期间执行缓存刷新而造成的短暂中断之外,Roger的Sporting Goods站点在公司经历的最大购物季节中从未放缓。达到了目标,交付了页面,交换了金钱,并创造了新的记录。