大流量负载下的 LAMP 堆栈性能

Posted

技术标签:

【中文标题】大流量负载下的 LAMP 堆栈性能【英文标题】:LAMP stack performance under heavy traffic loads 【发布时间】:2013-02-11 05:43:27 【问题描述】:

我知道我的问题的标题相当模糊,所以我会尽量澄清。请随时审核此问题,使其对社区更有用。

假设标准 LAMP 堆栈具有或多或少的默认设置(允许进行一些调整,客户端和服务器端缓存已打开),在现代硬件(16Gb RAM、8 核 CPU、无限磁盘空间)上运行等),部署一个相当复杂的 CMS 服务(一个 Drupal 或 Wordpress 项目以供争论) - 在我必须开始考虑性能之前,我可以合理地期望容纳多少流量、SQL 查询和用户请求?

注意:我知道具体细节很大程度上取决于项目的细节,即优化 mysql 查询、索引内容、最小化文件系统命中 - 假设 Web 开发人员做了专业的工作 - 我真的在寻找一个 非常粗略的数字,包括每天的访问量、高峰访问时间的流量、(事务性)MySQL 出错之前的记录数等等。

我知道真正回答我的问题的唯一方法是在真实项目上运行负载测试,我担心我的问题可能会被视为部分离题。

我想从有第一手经验的人那里得到一组数据,例如“我们运行了这样那样的设置,它至少处理了这么多负载[在这样那样之后问题开始浮出水面]”。我也对任何确信(我的时间很短)阅读我可以做的以更好地理解这件事非常感兴趣。

附:我明天要见一位客户讨论他的项目,如果他的项目结果类似于 FourSquare,我想准备好推理性能。

【问题讨论】:

【参考方案1】:

显然,这个问题没有“正确”的答案,但我想关闭它并提供一些反馈。客户会议已经召开,性能确实很重要,他们的托管平台竟然是在亚马逊云上:)

根据我独立完成的研究:

Memcache 是必须的; MySQL(或您正在运行的任何持久存储实例)通常是第一个使用的。解决方案包括运行多个虚拟实例并在它们之间复制数据、分配负载; http://highscalability.com/ 读起来不错:)

【讨论】:

【参考方案2】:

正如您所指出的,如果没有具体细节,很难回答。如果我的任务是你必须做的事情,我会依次处理每个组件(网络接口、CPU/内存、物理 IO 负载、SMP 锁定等)并获得最大可用容量,除以每个请求的粗略估计使用量。

例如网络 io。您可能有 1 个 1Gb 卡,可能达到 100Mbytes/sec。 (我倾向于使用理论最大值的 80%)。典型的“打击”有多大?对于 html、图像等,可能平均 3kbytes,这意味着您可以在物理级别出现瓶颈之前每秒实现 33k 请求。这些数字是绝对最大值,具体取决于您可能无法获得的工具和技能,但没有人可以超过这些最大值。

对每个组件重复上述操作,也许稍微改变一下您的数字,您将快速了解可能存在的问题。然后,考虑一下如何在每个组件中快速获得更多容量,您是否可以只使用 $$ 并获得更多性能(例如,使用 SSD 驱动器而不是 HD)?或者你会达到一个不重新架构就无法移动的限制吗?还要考虑您有哪些可用资源,您是否有大量熟练的程序员时间、DBA 或大量现金?如果您拥有大量资源,您可以在沿着经验曲线移动时更轻松、更快速地减少这些限制。

也不要忘记外部组件,防火墙对于持续流量的限制可能低于预期。

抱歉,我无法提供真实数字,我们的工作负载使用自定义服务器、高内存缓存和其他技巧,而不是使用您列出的所有产品。但是,我将主要关注 IO/SQL 查询和可能的网络 IO,因为这些往往是比 CPU/内存更硬的限制,尽管我相信其他人会有不同的看法。

【讨论】:

以上是关于大流量负载下的 LAMP 堆栈性能的主要内容,如果未能解决你的问题,请参考以下文章

高流量大并发Linux TCP 性能调优

如何实现高性能负载均衡设计?

高并发大流量网站 10 个解决方法

CentOS6.5下编译安装LAMP环境

网站高并发大流量访问解决方法

如何架设高性能负载均衡