在繁重的流量负载下LAMP堆栈性能

时间:2013-02-25 22:35:53

标签: performance optimization lamp traffic server-load

我知道我的问题标题相当含糊,所以我会尽量澄清。请随意调整此问题,使其对社区更有用。

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

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

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

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

P.S。我明天会见一位客户来讨论他的项目,如果他的项目与FourSquare相似,我想准备推理性能。

2 个答案:

答案 0 :(得分:2)

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

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

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

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

很抱歉,我无法提供实际数字,我们的工作负载使用自定义服务器,高内存缓存和其他技巧,并且不使用您列出的所有产品。但是,我会把注意力集中在IO / SQL查询和可能的网络IO上,因为这些限制往往比CPU /内存更严格,尽管我相信其他人会有不同的看法。

答案 1 :(得分:0)

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

从研究中我独立完成了:

  • Memcache是​​必须的;
  • MySQL(或您正在运行的任何持久存储实例)通常是第一个出现的。解决方案包括运行多个虚拟实例并在它们之间复制数据,分配负载;
  • http://highscalability.com/读得很好:)。