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

gWa*_*ldo 122 load-testing web-server capacity-planning benchmark

这是一个关于网站容量规划的规范问题

有关的:

有哪些推荐的网站和网络应用程序容量规划工具和方法?

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

Mar*_*son 130

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

长的答案是,对您的特定工作负载进行基准测试是您需要自己承担的事情,因为这有点像问“一段字符串有多长?”。

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

回答这个问题需要采取的基本方法是尝试一下,看看会发生什么。有很多工具可以用来人为地将系统置于压力之下,以查看它在哪里弯曲。

对此的简要概述是:

  • 放置您的场景
  • 添加监控
  • 添加流量
  • 评估结果
  • 根据结果​​进行补救
  • 冲洗,重复直到合理快乐

放置您的场景

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

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

因此,我将在 VM 上的Red Hat Linuxhaproxy内设置一个中等功率的虚拟机(两个内核、512 MB RAM、4 GB HDD)并安装我最喜欢的负载平衡器。

我还将在负载平衡器后面安装两个 Web 服务器,我将用它们来对负载平衡器进行压力测试。这两个 Web 服务器的设置与我的实时系统相同。

添加监控

您需要一些指标来监控,因此我将测量有多少请求通过我的 Web 服务器,以及在用户开始获得超过两秒的响应时间之前我每秒可以挤压多少请求。

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

如何做到这一点在很大程度上取决于您的平台,并且超出了本答案的范围。您可能需要查看 Web 服务器日志文件、启动性能计数器或依赖压力测试工具的报告能力。

您总是想监控的一些事情:

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

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

添加流量

这就是事情变得有趣的地方。现在您需要模拟一个测试负载。有很多工具可以做到这一点,并带有可配置的选项:

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

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

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

评估结果

所以,现在您需要返回到您在第 2 步中收集的指标。您会看到,当有 10,000 个并发连接时,您haproxy的机器几乎没有出汗,但使用两个 Web 服务器的响应时间却超过了 5 秒。这并不酷 - 请记住,您的响应时间目标是两秒钟。所以,我们需要做一些改变。

修复

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

要扩大规模,请获得更大的 Web 服务器、更多 RAM、更快的磁盘。

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

使用步骤 2 和测试中的指标来做出此决定。例如,如果您在测试期间发现磁盘延迟非常大,您就知道需要扩大规模并获得更快的硬盘驱动器。

如果您在测试期间看到处理器处于 100% 的状态,那么您可能需要向外扩展以添加额外的 Web 服务器以减少对现有服务器的压力。

没有通用的正确或错误答案,只有适合您的。尝试扩大规模,如果这不起作用,则改为扩大规模。或者不,这取决于你和一些跳出框框的想法。

假设我们要扩展。所以我决定克隆我的两个 Web 服务器(它们是 VM),现在我有四个 Web 服务器。

冲洗,重复

从第3步重新开始。如果发现事情没有按预期进行(例如,我们将Web服务器增加了一倍,但响应时间仍然超过两秒),然后查看其他瓶颈。例如,您将 Web 服务器增加了一倍,但仍然有一个糟糕的数据库服务器。或者,您克隆了更多 VM,但由于它们位于同一物理主机上,因此您只会对服务器资源产生更高的争用。

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


小智 11

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

性能测量总是以时间单位完成,因为

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

诸如 %CPU 和 IOPS 之类的东西是特定于系统的,因此您只有在计划系统并在预生产中对其进行测量时才使用它们,作为您关心的事情时间的“替代品”。


gWa*_*ldo 8

容量规划是一头麻烦的野兽。它既是艺术又是科学(如果绝对是黑暗的)。

最好的情况是,您做出明智的决定,并且通过让现实满足您的假设幸运/运气对您有利。如果您的能力需求假设与现实相符,那么您看起来就像一个神秘的瑜伽士。不幸的是,如果您的假设超出现实,您将显得超支和超支。更不幸的是,如果您的假设低于最终现实(或在其他方面不正确),您将缺乏所需的能力,并且将不得不争先恐后地减轻基础设施的故障,这使您看起来缺乏能力。

无压力...

不幸的是,容量规划的黑暗艺术不仅仅是可以合理地提炼成单个服务器故障答案;真的,这是一个值得一书的话题。

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


Dav*_*d W 6

为了扩展 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. 额外的配置文件用于诸如Virtual Hosts 之类的东西。

与许多软件一样,Apache 的构建非常灵活,可以根据特定网站的需求进行定制。Apache 可以配置不同的多处理模块来绑定到网络端口并接受和处理请求。

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

  • 确定您希望 Apache 能够使用的最大内存量。
  • 大量测试您的网站,并确定每个 Apache 进程使用多少内存(使用 top)。
  • 取顶部使用最多内存的 Apache 进程,添加一点以进行良好测量,然后将您的第一个数字(您希望 Apache 使用的最大内存量)除以这个新数字。
  • 你得到的数字应该是你的MaxClients&ServerLimit变量。

这当然不是最终的答案。调整您的 Apache 服务器需要时间,并且需要经验才能恰到好处。