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

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

有关:

  • 你能帮我做我的容量计划吗?
  • 你如何做数据库负载testing和容量规划?

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

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

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

长久的答案是,你需要自己做一些事情来衡量你的具体工作量,因为这有点像问“一串串有多长时间?”。

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

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

对此的简要概述是:

  • 把你的scheme到位
  • 添加监控
  • 添加stream量
  • 评估结果
  • 根据结果​​进行修复
  • 冲洗,重复,直到合理愉快

把你的scheme到位

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

设置你的服务器,帐号,网站,带宽等等。即使你在虚拟机中这样做也行,只要你准备好扩展你的结果。

因此,我要build立一个中等功率的虚拟机(两个内核,512 MB内存,4 GB硬盘),并在VM上的Red Hat Linux中安装我最喜欢的负载均衡器haproxy

我还将在负载均衡器后面有两个Web服务器,我将使用它们来强调testing负载均衡器。 这两个Web服务器的设置与我的实时系统完全相同。

添加监视

你将需要一些指标来监测,所以我要测量有多less请求通过我的networking服务器,以及每秒钟可以挤压多less次请求,然后用户开始获得超过两秒钟的响应时间。

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

如何做到这一点取决于你的平台,并超出了这个答案的范围。 您可能需要查看Web服务器日志文件,启动性能计数器或依靠压力testing工具的报告function。

你总是想要监控的几件事情:

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

你也可以select查看SQL死锁,寻找时间等,这取决于你正在testing的东西。

添加stream量

这是事情得到乐趣的地方。 现在你需要模拟一个testing负载。 有很多工具可以做到这一点,可configuration选项:

  • JMeter (Web,LDAP)
  • Apache基准 (Web)
  • 研磨机 (Web)
  • httperf (networking)
  • WCAT (networking)
  • Visual Studio负载testing(Web)
  • SQLIO (SQL Server)

select一个号码,任何号码。 假设您将会看到系统每分钟响应10000次的情况。 您select的号码并不重要,因为您要多次重复此步骤,上下调整该号码以查看系统如何响应。

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

按魔术Gobutton,看你的Web服务器融化和崩溃。

评估结果

因此,现在您需要返回您在步骤2中收集的指标。您看到,使用10,000个并发连接时, haproxy框几乎不会出汗,但对两台Web服务器的响应时间超过五秒。 这不是很酷 – 记住,你的响应时间是瞄准两秒钟。 所以,我们需要做一些改变。

修复

现在,你需要加快你的网站两次以上。 所以你知道你需要扩大规模,或扩大规模。

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

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

使用第2步中的指标和testing来做出这个决定。 例如,如果您在testing过程中看到磁盘延迟很大,则需要进行扩展并获得更快的硬盘驱动器。

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

没有通用的正确或错误的答案,只有适合你的东西。 尝试扩大规模,如果这不起作用,请扩大规模。 或者不是,这取决于你和一些在盒子外面思考。

假设我们要扩大规模。 所以我决定克隆我的两个Web服务器(他们是虚拟机),现在我有四个Web服务器。

冲洗,重复

从步骤3开始。如果发现事情没有按预期进行(例如,我们将Web服务器翻了一倍,但响应时间仍超过两秒钟),然后查看其他瓶颈。 例如,您将Web服务器加倍,但仍然有一个糟糕的数据库服务器。 或者你克隆了更多的虚拟机,但是因为它们在同一个物理主机上,所以你只能争取更高的服务器资源。

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

容量规划从测量开始,在这种情况下响应时间与负载的关系。 一旦知道程序在负载下变慢的程度(这不是一个线性函数),您可以select一个响应时间目标,然后发现在给定的负载量下要达到目标的资源。

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

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

像CPU和IOPS这样的东西是系统特定的,所以只有当您计划好系统并在预生产阶段进行测量时,才能使用它们,作为您所关心的事物的时代的“替代品”。

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

你最好的情况是你做出明智的决定财富/运气有利于你的现实符合你的假设。 如果你的能力需要假设符合现实,你看起来像一个神秘的瑜伽士。 不幸的是,如果你的假设超出了现实,你会看起来超出了超支。 更不幸的是,如果你的假设低于最终的现实(或者是不正确的),那么你将缺乏你需要的能力,并且将不得不争取减轻你呻吟的基础设施的失败,这使你看起来像缺乏能力。

无压力…

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

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

为了扩展Mark Henderson的post,我正在写这个特定的Apache。 重申他所说的话:“简单的回答是:除了你,没有人能回答这个问题。” 这个答案的文本很大程度上借鉴了我对一个关于Drupal网站性能的类似问题的回答。

使用Mod_PreforkconfigurationApache

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

你不应该使用一个开箱即用的Apacheconfiguration。 你总是需要调整Apache到你的网站。 CentOS上的主要Apacheconfiguration文件位于/etc/httpd/conf/httpd.conf系统上的主要Apacheconfiguration文件通常位于/etc/apache2/apache2.conf 。 其他configuration文件用于像虚拟主机这样的东西。

就像许多软件一样,Apache的构build也是根据特定网站的需求灵活定制的。 Apache可以configuration不同的多处理模块来绑定到networking端口,并接受和处理请求。

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

  • 找出您希望Apache能够使用的最大内存量。
  • 严重testing你的网站,并确定每个Apache进程使用多less内存(使用顶部)。
  • 以最多使用最多内存的Apache进程为参考,向其中添加一点点,然后用这个新数字除以第一个数字(您希望Apache使用的最大内存量)。
  • 你得到的数字应该是你的MaxClientsServerLimitvariables。

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

另外,我会build议与devise/构build应用程序的架构师和工程师进行沟通,以确定瓶颈,单点故障和许可限制。