这是有关网站容量规划的典型问题。数据库的负载测试和容量规划吗?


网站和Web应用程序容量规划的一些推荐工具和方法是什么?
请随意描述不同的工具适用于不同Web服务器,框架等的技术,技术以及通常适用于Web服务器的最佳实践。

#1 楼

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

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

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

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

对此的简要概述是:


放入您的方案就位
添加监控
增加流量
评估结果
根据结果进行补救
冲洗,重复直到满意为止

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

设置服务器,帐户,网站,带宽等。只要您准备好扩展结果,虚拟机就可以了。

因此,我将设置一个中等功率的虚拟机(两个内核,512 MB RAM,4 GB HDD )并在虚拟机上的Red Hat Linux中安装我最喜欢的负载均衡器haproxy。负载均衡器。这两个Web服务器的设置与我的实时系统完全相同。

添加监视

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

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

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

您始终需要监视以下几件事: >
CPU使用率
RAM使用率
磁盘使用率
磁盘延迟
网络利用率

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

增加点击量

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



JMeter(Web,LDAP)

Apache Benchmark(Web) br />
Grinder(Web)

httperf(Web)

WCAT(Web)
Visual Studio负载测试(Web)

SQLIO(SQL Server)

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

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

因此,现在您需要返回在步骤2中收集的指标。您看到,通过10,000个并发连接,您的haproxy框几乎不费吹灰之力,但是两台Web服务器的响应时间只有五秒钟。那不是很酷-请记住,您的响应时间目标是两秒钟。因此,我们需要进行一些更改。

修复

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

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

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

使用第2步中的指标并进行测试,以做出此决定。例如,如果您在测试期间发现磁盘延迟很大,则知道需要扩大规模并获得更快的硬盘驱动器。测试,也许您需要扩展以添加其他Web服务器,以减轻现有服务器的压力。

没有通用的对或错答案,只有适合您的东西。尝试扩大规模,如果不起作用,请扩大规模。还是不,这取决于您,并且需要一些思考。

我们要扩展一下。因此,我决定克隆两个Web服务器(它们是VM),现在我有四个Web服务器。发现事情并没有按照您的预期进行(例如,我们将Web服务器增加了一倍,但响应时间仍超过2秒),然后查看其他瓶颈。例如,您将Web服务器加倍,但是数据库服务器仍然很笨拙。或者,您克隆了更多的VM,但是由于它们位于同一物理主机上,因此您只能在服务器资源上实现更高的竞争。

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

评论


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

– rleir
2012年4月27日在9:09

#2 楼

容量规划从测量开始,在这种情况下是响应时间与负载的关系。一旦知道了程序随着负载减慢的程度(不是线性函数),就可以选择一个响应时间目标,然后发现在给定负载量下达到该目标所需要的资源。 />
性能测量始终以时间单位完成,因为


用户关心的是它们,
它们可以按比例缩放

%CPU和IOPS之类的东西是特定于系统的,因此仅在计划系统并在生产前进行测量时才使用它们,以充当您关心的时间的“替代”。 br />

#3 楼

容量规划是一个麻烦的野兽。科学和艺术一样多(如果绝对是一门黑暗的话)。如果您的能力需求假设与现实相符,那么您看起来就像是神秘的瑜伽士。不幸的是,如果您的假设超出了现实,那么您似乎会显得过头和过头。更不幸的是,如果您的假设低于最终的现实(或不正确的假设),您将缺乏所需的能力,并且将不得不加紧努力以减轻不断增长的基础架构的失败,这使您看起来缺乏能力。

没有压力。确实,这是一个值得学习的主题。

幸运的是,有一本书:“容量规划的艺术”

#4 楼

为了扩展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可以配置各种不同的Multi-Processing Modules来绑定到网络端口并接受和处理请求。
大多数时候,CentOS和Ubuntu服务器随附的默认Apache安装中,MPM“使用mod_prefork”。假设您使用的是mod_prefork(如果不确定,那么可能性更大,但只有您可以确定)。这是配置方法的基本知识:
您希望Apache能够使用的内存。
大量测试您的网站,并确定每个Apache进程使用多少内存(使用顶部)。
将使用最多内存的Apache进程放在顶部,添加稍作调整,然后将您的第一个数字(您希望Apache使用的最大内存)除以这个新数字。
得到的数字应该是MaxClientsServerLimit变量。

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

评论


仅基于顶部的内存使用存在轻微缺陷,请检查f.e。 stackoverflow.com/questions/7880784/…另外,您可能想使用python脚本“ ps_mem.py”而不是top来占用内存,甚至使用/ proc下直接附加到进程的值

–丹尼斯·诺尔特
15年4月16日在10:57

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

– ezra-s
17年1月10日在10:11

#5 楼

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