这是有关网站容量规划的一个
有关的:
有哪些针对网站和网络应用程序容量规划的推荐工具和方法?
请随意描述针对不同网络服务器、框架等的不同工具和技术,以及适用于一般网络服务器的最佳实践。
5 个回答
5
简短的回答是:除了你之外没有人可以回答这个问题。
长话短说,对你的具体工作量进行基准测试是你需要自己做的事情,因为这有点像问“一根绳子有多长?”。
一个简单的单页静态网站可以托管在 Pentium Pro 150 上,并且每天仍然可以提供数千次展示。
回答这个问题的基本方法是尝试一下,看看会发生什么。有很多工具可以用来人为地给系统施加压力,看看它会在何处弯曲。
简要概述如下:
- 将您的场景放在适当位置
- 添加监控
- 添加流量
- 评估结果
- 根据结果进行补救
- 冲洗,重复,直到满意为止
将您的场景放在适当位置
基本上,为了测试一些负载,您需要一些测试对象。设置一个测试环境。如果可能的话,这应该是与您的生产硬件相当接近的猜测,否则您将只能推断您的数据。
设置您的服务器、帐户、网站、带宽等。即使您在虚拟机上执行这些操作也是可以的,只要您准备好扩展您的结果。
因此,我将设置一个中等功率的虚拟机(双核、512 MB RAM、4 GB HDD)并在虚拟机上的中安装我最喜欢的负载平衡器。
我还将使用两台 Web 服务器来对负载均衡器进行压力测试。这两台 Web 服务器的设置与我的实时系统完全相同。
添加监控
您需要一些指标来监控,因此我将测量有多少请求到达我的 Web 服务器,以及在用户开始获得超过两秒的响应时间之前每秒我可以挤过多少个请求。
我还将监控haproxy
实例上的 RAM、CPU 和磁盘使用情况,以确保负载均衡器可以处理连接。
如何做到这一点很大程度上取决于您的平台,超出了本回答的范围。您可能需要查看 Web 服务器日志文件、启动性能计数器或依赖压力测试工具的报告功能。
您始终需要监视以下几件事:
- CPU 使用率
- RAM 使用情况
- 磁盘使用情况
- 磁盘延迟
- 网络利用率
根据具体测试的内容,您可能还会选择查看 SQL 死锁、寻道时间等。
添加流量
事情开始变得有趣了。现在您需要模拟测试负载。有可以做到这一点,并具有可配置的选项:
- (Web、LDAP)
- (Web)
- (网状)
- (网络)
- (网络)
- Visual Studio 负载测试 (Web)
- (SQL 服务器)
选择一个数字,任意数字。假设您要查看系统在每分钟 10,000 次点击下如何响应。选择什么数字并不重要,因为您要重复此步骤多次,上下调整该数字以查看系统如何响应。
理想情况下,您应该将这 10,000 个请求分布到多个负载测试客户端/节点上,这样单个客户端就不会成为请求的瓶颈。例如,JMeter 的提供了一个中央接口,可以从控制 Jmeter 计算机启动多个客户端。
按下神奇的“Go”按钮,然后观察你的网络服务器是否崩溃。
评估结果
因此,现在您需要返回到您在步骤 2 中收集的指标。您会发现,在 10,000 个并发连接的情况下,您的haproxy
机器几乎不会出任何问题,但两个 Web 服务器的响应时间却超过了五秒。这可不妙 – 请记住,您的响应时间目标是两秒。因此,我们需要进行一些更改。
补救
现在,您需要将网站速度提高一倍以上。因此,您知道您需要扩大规模或扩展规模。
要扩大规模,需要获取更大的网络服务器、更多的 RAM 和更快的磁盘。
要扩展,请获取更多服务器。
使用步骤 2 中的指标和测试来做出此决定。例如,如果您在测试期间发现磁盘延迟很大,则您知道需要扩大规模并获得更快的硬盘。
如果您发现处理器在测试期间处于 100%,则可能需要扩展以添加其他 Web 服务器,以减轻现有服务器的压力。
没有通用的正确或错误答案,只有适合您的答案。尝试扩大规模,如果不行,则扩大规模。或者不扩大规模,这取决于您和一些跳出框框的思维。
假设我们要扩展。因此我决定克隆我的两个 Web 服务器(它们是虚拟机),现在我有四个 Web 服务器。
重复
从第 3 步重新开始。如果您发现事情没有按预期进行(例如,我们将 Web 服务器数量增加了一倍,但响应时间仍然超过两秒),则请查看其他瓶颈。例如,您将 Web 服务器数量增加了一倍,但数据库服务器仍然很差。或者,您克隆了更多虚拟机,但由于它们位于同一物理主机上,因此您只会对服务器资源产生更高的争用。
然后,您可以使用此过程测试系统的其他部分。不要访问负载平衡器,而是尝试直接访问 Web 服务器,。
1
-
1这对于负载测试来说非常好,但对容量规划却没有多大帮助。谁能写写 Google 早期构想的可扩展架构,或者使用更少、更昂贵的设备的其他方案。
–
|
容量规划从测量开始,在本例中是响应时间与负载的关系。一旦您知道程序在负载下变慢的程度(这不是一个线性函数),您就可以选择一个响应时间目标,然后发现在给定负载量的情况下需要哪些资源才能达到该目标。
绩效衡量总是以时间单位进行,因为
- 它们是用户关心的
- 它们可以放大或缩小
%CPU 和 IOPS 之类的东西是系统特定的,因此只有在规划系统并在预生产中测量时才使用它们,以作为您关心的时间的“替代品”。
但是,高 CPU 或 I/O 通常表示索引不良和/或查询表述不良。使用“slowlog”来跟踪哪些查询是“最差的”。
|
容量规划是一件麻烦事。它既是一门科学,也是一门艺术(当然,它也算得上是一门黑暗艺术)。
最好的情况是,你做出了明智的决定,而幸运之神眷顾你,让你的假设符合现实。如果你的能力需求假设与现实相符,你看起来就像一个神秘的瑜伽士。不幸的是,如果你的假设超出了现实,你就会显得超支了。更不幸的是,如果你的假设低于最终的现实(或不正确),你将缺乏所需的能力,并且必须努力减轻你呻吟的基础设施的故障,这会让你看起来缺乏能力。
没有压力…
不幸的是,容量规划的黑暗艺术无法合理地提炼成单个服务器故障答案;确实,这是一个值得写书的主题。
幸运的是,有这样一本书:《》
|
为了扩展 Mark Henderson 的帖子,我专门针对 Apache 写了这篇文章。重申一下他的话:“简短的回答是:除了你,没有人能回答这个问题。”这个答案的文本大量借鉴了我对有关 Drupal的类似问题的回答。
使用 Mod_Prefork 配置 Apache
可以说是目前最流行的 Web 服务器之一(如果不是最流行的)。它是开源的,并且仍在积极维护。您可以在 Linux 和 Windows 操作系统上运行它,但在 Linux / Unix 世界中更受欢迎。
您永远不应该使用现成的 Apache 配置。您始终需要根据站点调整 Apache。CentOS 上的主要文件位于/etc/httpd/conf/httpd.conf
,Ubuntu 系统上的主要 Apache 配置文件通常位于/etc/apache2/apache2.conf
。其他配置文件用于等。
与许多软件一样,Apache 的设计非常灵活,可根据特定网站的需求进行定制。Apache可以,以绑定到网络端口并接受和处理请求。
大多数情况下,在 CentOS 和 Ubuntu 服务器附带的默认 Apache 安装中,都会使用 MPM“ ”。假设您使用的是 mod_prefork(如果您不确定,那么这更有可能,但只有您才能确定)以下是如何配置它的基本方法:
- 确定您希望 Apache 能够使用的最大内存量。
- 大量测试您的网站,并确定每个 Apache 进程使用了多少内存(使用 top)。
- 取出顶部使用最多内存的 Apache 进程,向其添加一点点以获得更好的效果,然后用您的第一个数字(您希望 Apache 使用的最大内存量)除以这个新数字。
- 您得到的数字应该是您的
MaxClients
&ServerLimit
变量。
这当然不是最终答案。需要时间,并且需要经验才能做到恰到好处。
2
-
1仅基于 top 的内存使用情况略有缺陷,请检查 fe 另外,您可能希望使用 python 脚本“ps_mem.py”而不是 top 来获取内存使用情况,甚至使用直接附加到 /proc 下进程的值
– -
1整个答案很有价值,因为你添加了注释:“你永远不应该使用现成的 Apache 配置”。我们再怎么强调这一点也不为过。
–
|
此外,我建议与设计/构建应用程序的建筑师和工程师交谈,以尝试找出瓶颈、单点故障和许可限制。
|
|