什么时候是添加单独的数据库服务器、添加更多 Web 服务器的正确时机?

什么时候是添加单独的数据库服务器、添加更多 Web 服务器的正确时机?

通常,Web 项目都是从小规模开始的,所有东西都在一台服务器上。但是,如果网站变得流行,一台服务器就不够了。
因此,由于我在这方面没有任何经验,我想了解一下:
1. 什么样的负载意味着我需要将 MySQL DB 移动到单独的服务器以及如何测量这种负载?
2. 什么样的负载意味着我需要添加另一台 Web 服务器以及如何测量它?
3. 一台服务器大约可以为多少用户提供服务?

我说的是 LAMP 服务器上的简单 PHP 应用程序,如下所示:
* CPU:Athlon 3800+
* CPU 详细信息:2 x 2.0 GHz
* RAM:1 GB RAM
* 硬盘:2 x 160 GB(RAID 1 软件)

答案1

这一切都取决于......数据集的大小、使用模式。

衡量最终用户体验。设置可接受的页面加载时间,每 5-10 分钟测试一次,绘制图表。这完全取决于您的业务可以容忍什么以及何时变得不可接受。

在 mysql 中启用 slow_query,可能您不希望每天有超过 5-10 个耗时超过 10 秒的查询。或者也许您有一些夜间报告并且您可以容忍这些?

您可能想要生成一些统计数据 - 例如穆宁通过 CPU 使用率、iostats、系统负载、网络流量、http 进程数、mysql 线程数、页面生成时间,查看这些在一天/一周内的变化情况。您可以用它来精确定位高峰时间,并可以看到例如添加更多内存/调整 mysql 如何改变您的页面加载时间。

在你的情况下,平均负载> 2 或 3 意味着系统超载[但这是值得讨论的]

这里获得一些提示。

答案2

当您坐下来制定规格时,就该开始计划更多的服务器和可扩展的架构了(您希望拥有一个具有模块化功能的代码库,这样很容易将事物分开,但至少拥有一个“Web 前端”和一个“数据库后端”是某种程度的模块化)。

一旦完成这些并在一台服务器(数据库和前端)上运行,您就可以监控不同操作所需的时间以及机器上的负载。一旦负载开始超过“CPU 数量”,您肯定会陷入“我们应该拆分”的境地。如果您保存了历史数据,您可以推断未来的情况,并决定一次增加更多容量,此时容量大致与所需容量相当。

在 unix 机器上,“平均负载”是(大约)运行队列的平均长度(即,准备运行但等待时间段的进程;通常不按机器中物理 CPU 的数量缩放)。如果该值持续高于您拥有的 CPU 数量,则至少表明机器超负荷工作。这不是唯一的衡量标准,但作为硬性指导,它并不太糟糕,系统会为您计算。

答案3

除了负载之外,还需要考虑的另一件事是100%正常运行时间。如果您需要您的网站在服务器重启期间保持正常运行,那么您需要一些冗余/聚类

我们的网络服务器以虚拟机的形式运行,因此我们只使用两个(约 200 个站点)来实现冗余,并且可以增加“服务器资源”如果需要处理负载,则无需引入第三个网络服务器(在一定程度上)。

如果需要提高性能,最简单的事情就是分离你的 MySQL放在一个单独的盒子上。然而,这也意味着你的网站宕机次数将增加一倍(即当任一服务器重新启动或发生故障时,它们将会关闭)

答案4

您还应该查看 mod_proxy 和 mod_disk_cache 以考虑您的规划。将其放置在单独的分区上,应用程序发送正确的标头(Cache-Control 等),这是一种非常好且简单的方法,可以提高 apache 上的应用程序性能,因为任何缓存(和可缓存)页面都可以像静态页面一样提供。

不要尝试使用mod_mem_cache,因为由于缓存共享的原因,它的性能较差。

它使我运行的大规模虚拟主机系统的负载降低了约 20-30%。但要小心使用 mod_disk_cache 参数,因为如果设置错误,它们可能会显著增加您的 iostats。

相关内容