您如何进行网站的负载测试和容量规划?


113

这是有关网站容量规划的典型问题

有关:

网站和Web应用程序容量规划的一些推荐工具和方法是什么?

请随意描述用于不同Web服务器,框架等的不同工具和技术,以及适用于一般Web服务器的最佳实践。

Answers:


127

简短的答案是:除了你,没有人可以回答这个问题。

长的答案是,基准测试特定的工作量是您需要自己进行的工作,因为这有点像问“一条字符串要持续多久?”。

一个简单的一页静态网站可以托管在Pentium Pro 150上,并且仍然每天提供数千次展示。

回答此问题所需的基本方法是尝试一下,看看会发生什么。您可以使用许多工具来使系统承受压力,以查看系统在哪里弯曲。

对此的简要概述是:

  • 放好方案
  • 添加监控
  • 增加流量
  • 评估结果
  • 根据结果​​进行补救
  • 漂洗,重复直到足够开心

放好方案

基本上,为了测试某些负载,您需要测试一些东西。设置要测试的环境。如果可能的话,这应该是对生产硬件的相当接近的猜测,否则您将只能推断数据。

设置服务器,帐户,网站,带宽等。即使在VM上执行此操作,只要您准备扩展结果就可以。

所以,我要建立一个中期供电虚拟机(双核,512 MB RAM,4 GB HDD)和安装我最喜爱的负载均衡器,haproxy里面的Red Hat Linux的虚拟机。

我还将在负载均衡器后面有两个Web服务器,这些服务器将用于对负载均衡器进行压力测试。这两个Web服务器的设置与我的实时系统相同。

添加监控

您将需要一些指标进行监视,因此在用户开始获得超过两秒钟的响应时间之前,我将测量多少个请求到达我的Web服务器,以及每秒可以压缩多少个请求。

我还将监视haproxy实例上的RAM,CPU和磁盘使用情况,以确保负载均衡器可以处理连接。

如何执行此操作在很大程度上取决于您的平台,超出了此答案的范围。您可能需要查看Web服务器日志文件,启动性能计数器或依靠压力测试工具的报告功能。

您始终要监视的几件事:

  • CPU使用率
  • RAM使用
  • 磁盘使用情况
  • 磁盘延迟
  • 网络利用率

您可能还选择查看SQL死锁,查找时间等,具体取决于要测试的内容。

增加流量

这是事情变得有趣的地方。现在您需要模拟一个测试负载。有很多工具可以执行此操作,并提供可配置的选项:

选择一个数字,任何数字。假设您要查看系统如何响应每分钟10,000次点击。选择哪个数字都没有关系,因为您将重复此步骤很多次,向上或向下调整该数字以查看系统如何响应。

理想情况下,您应该将这10,000个请求分布在多个负载测试客户端/节点上,以使单个客户端不会成为请求的瓶颈。例如,JMeter的远程测试提供了一个中央接口,从该接口可以从受控的Jmeter机器启动多个客户端。

按下神奇的Go按钮,观察您的Web服务器崩溃并崩溃。

评估结果

因此,现在您需要返回到在步骤2中收集的指标。您会发现,在具有10,000个并发连接的情况下,您haproxy的设备几乎没有汗水,但是两台Web服务器的响应时间只有五秒钟。那不是很酷-请记住,您的响应时间目标是两秒钟。因此,我们需要进行一些更改。

整治

现在,您需要将网站速度提高两倍以上。因此,您知道您需要向上扩展或向外扩展。

要扩大规模,请使用更大的Web服务器,更多的RAM和更快的磁盘。

要横向扩展,请获取更多服务器。

使用第2步中的指标并进行测试,以做出此决定。例如,如果您在测试期间发现磁盘延迟很大,则知道需要扩大规模并获得更快的硬盘驱动器。

如果您在测试过程中看到处理器处于100%占用状态,则可能需要扩展以添加其他Web服务器,以减轻现有服务器的压力。

没有通用的对与错答案,只有适合您的东西。尝试扩大规模,如果不起作用,请扩大规模。是否可以,这取决于您和一些在框外进行思考。

假设我们要扩大规模。因此,我决定克隆两个Web服务器(它们是VM),现在有四个Web服务器。

冲洗,重复

从步骤3重新开始。如果发现事情没有按预期进行(例如,我们将Web服务器增加了一倍,但响应时间仍然超过2秒),则请查看其他瓶颈。例如,您将Web服务器增加了一倍,但仍然拥有笨拙的数据库服务器。或者,您克隆了更多的VM,但是由于它们位于同一台物理主机上,因此您只能在服务器资源上实现更高的竞争。

然后,您可以使用此过程来测试系统的其他部分。尝试直接访问Web服务器或使用SQL基准测试工具访问SQL Server,而不是点击负载均衡器。


1
这对于负载测试非常有用,但是很少涉及容量规划。谁能撰写有关Google的可扩展架构(这是很早就构想的)或使用越来越少的昂贵盒子的替代方案的文章。
rleir

10

容量规划从测量开始,在这种情况下是响应时间与负载的关系。一旦知道了程序随着负载减慢的程度(不是线性函数),就可以选择响应时间目标,然后发现在给定的负载量下要达到该目标将花费哪些资源。

绩效评估始终以时间单位完成,因为

  • 他们是用户关心的
  • 它们可以按比例放大和缩小

诸如%CPU和IOPS之类的事情是特定于系统的,因此仅在计划系统并在生产前对其进行测量时才使用它们,以充当您所关心的事情的“代理”。


8

容量规划是一个麻烦的野兽。科学和艺术一样多(如果绝对是一门黑暗的话)。

最好的情况是,您做出明智的决定,运气/运气会使现实满足您的假设,从而使您受益。如果您的能力需求假设与现实相符,那么您看起来就像是神秘的瑜伽士。不幸的是,如果您的假设超出了现实,那么您似乎会显得过头和过头。更不幸的是,如果您的假设低于最终的现实(或不正确的假设),则您将缺乏所需的能力,并且将不得不加紧努力以减轻不断增长的基础架构的失败,这使您看起来缺乏能力。

无压力...

不幸的是,容量规划的黑暗技巧远远超出了合理地提炼为单个Server Fault答案的范围。确实,这是一个值得一书的话题。

幸运的是,有一本书:“ 能力规划的艺术


5

为了扩展Mark Henderson的文章,我正在专门针对Apache编写此文章。重申他的话:“简短的答案是:除了你,没有人可以回答这个问题。” 该答案的文本是我对有关Drupal网站性能的类似问题的大量借鉴。

使用Mod_Prefork配置Apache

Apache可以说是(如果不是)最流行的Web服务器之一。它是开源的,仍在积极维护中。您可以在Linux和Windows操作系统上运行它,但是在Linux / Unix世界中更受欢迎。

永远不要使用现成的Apache配置。您始终需要将Apache调整到您的站点。CentOS上的主要Apache配置文件位于/etc/httpd/conf/httpd.conf,而Ubuntu系统上的主要Apache配置文件通常位于/etc/apache2/apache2.conf。其他配置文件用于诸如虚拟主机之类的东西。

像许多软件一样,Apache可以根据特定网站的需求灵活地进行定制。可以将Apache配置为使用多种不同的多处理模块来绑定到网络端口并接受和处理请求。

大多数时候,在CentOS和Ubuntu服务器随附的默认Apache安装中,使用的是MPM“ mod_prefork ”。假设您使用的是mod_prefork(如果不确定,那么可能性更大,但只有您可以确定),这是如何配置它的基础知识:

  • 找出您希望Apache可以使用的最大内存量。
  • 大量测试您的网站,并确定每个Apache进程使用多少内存(使用top)。
  • 首先使用内存最多的Apache进程,为它增加一点点,以达到良好的效果,然后将第一个数字(希望Apache使用的最大内存量)除以这个新数字。
  • 您得到的数字应为MaxClientsServerLimit变量。

这当然不是最终答案。调整Apache服务器需要花费时间,并且需要经验才能使其正确。


1
仅基于上面的内存使用情况是略有瑕疵,请检查FE stackoverflow.com/questions/7880784/...另外你可能想使用Python脚本,而不是顶部内存使用“ps_mem.py”,甚至使用附值directy到/ proc下的过程
Dennis Nolte 2015年

1
整个答案是值得的,因为您添加了以下注释:“您绝不应该使用现成的Apache配置”。我们永远不能对此施加太大压力。
ezra-s

0

我还建议与设计/构建应用程序的建筑师和工程师进行交流,以尝试确定瓶颈,单点故障和许可限制。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.