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


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

有关:

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

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


111
2018-01-16 22:49






答案:


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

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

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

回答这个问题需要采取的基本方法是 尝试 它看看会发生什么。您可以使用大量工具人为地将系统置于压力之下以查看其扣环的位置。

对此的简要概述是:

  • 把你的场景放到位
  • 添加监控
  • 添加流量
  • 评估结果
  • 根据结果​​进行修复
  • 冲洗,重复直到相当开心

把你的场景放到位

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

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

所以,我要设置一个中等功能的虚拟机(两个内核,512 MB RAM,4 GB硬盘)并安装我最喜欢的负载均衡器, haproxy 内 红帽Linux 在VM上。

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

添加监控

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

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

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

您总想要监控的一些事项:

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

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

添加流量

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

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

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

按魔术  按钮,看你的网络服务器融化和崩溃。

评估结果

因此,现在您需要回到在步骤2中收集的指标。您会看到10,000个并发连接,您的 haproxy 盒子几乎没有出汗,但是两个网络服务器的响应时间超过五秒。这并不酷 - 记住,你的响应时间是两秒钟。所以,我们需要做一些改变。

修复

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

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

要扩展,获得更多服务器。

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

如果您在测试期间看到处理器处于100%的位置,则可能需要向外扩展以添加其他Web服务器以减轻现有服务器的压力。

没有通用的正确或错误的答案,只有适合你的东西。尝试扩展,如果不起作用,请缩小。或者不是,这取决于你和一些开箱即用的想法。

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

冲洗,重复

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

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


119
2018-04-29 14:05



这非常适合负载测试,但对容量规划几乎没有说明。谁可以撰写关于谷歌早期构想的可扩展架构,或使用更少和更昂贵的盒子的替代品。 - rleir


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

性能测量总是在 时间 单位,如

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

像%CPU和IOPS这样的东西是系统特定的,所以你只有在计划好系统并在预生产中测量它时才使用它们,作为你所关心事物的“代理”,时间。


9
2018-04-21 22:32





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

最好的情况是你做出明智的决定  财富/运气通过让现实符合你的假设而有利于你。如果你的容量需要假设与现实相符,你看起来像一个神秘的瑜伽士。不幸的是,如果你的假设超过现实,你将会出现超调和超支。更不幸的是,如果您的假设低于最终现实(或者其他方面不正确),您将缺乏所需的容量,并且必须争先恐后地减少您的呻吟基础设施的失败,这使您看起来缺乏能力。

无压力...

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

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


8





为了扩展Mark Henderson的帖子,我正在写这篇特定于Apache的文章。重申他所说的,“简短的回答是:除了你,没有人能回答这个问题。”这个答案的文字大量借用了我对类似问题的回答 Drupal网站的表现

使用Mod_Prefork配置Apache

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

你应该 决不 使用开箱即用的Apache配置。您始终需要将Apache调整到您的站点。主要的 Apache配置 CentOS上的文件位于 /etc/httpd/conf/httpd.conf,Ubuntu系统上的主要Apache配置文件通常位于 /etc/apache2/apache2.conf。其他配置文件用于类似的事情 虚拟主机

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

大部分时间都是在CentOS和Ubuntu服务器附带的默认Apache安装上,MPM“mod_prefork“使用。假设你正在使用mod_prefork(如果你不确定,那就更有可能,但只有你可以确定)以下是如何配置它的基础知识:

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

这当然不是最终答案。 调整Apache服务器 需要时间并需要经验才能做到正确。


5



仅基于顶部的内存使用有轻微缺陷,请查看f.e. stackoverflow.com/questions/7880784/... 另外你可能想使用python脚本“ps_mem.py”而不是top用于内存使用,甚至可以使用附加到/ proc下的进程的值directy - Dennis Nolte
整个答案是值得的,因为您添加的注释:“您永远不应该使用开箱即用的Apache配置”。我们永远不能强调这一点。 - ezra-s


此外,我建议与设计/构建应用程序的架构师和工程师交谈,以尝试识别瓶颈,单点故障和许可限制。


0