抵御发布日流量突破的最佳做法

时间:2008-09-22 22:17:01

标签: php mysql linux apache lamp

我们正在为一个客户的网站工作(一次)预计会在第一天获得相当数量的流量。有新闻稿,人们正在写关于它的博客等等。我有点担心在第一天我们会落在脸上。您将看到哪些主要内容(事先没有真实的交通数据),您可以在大型发布后保持站立状态。

详细信息:这是一个L/A/M/PHP堆栈,使用内部开发的MVC框架。目前正在一台服务器上启动,Apache和MySQL都在其上,但如果需要,我们可以解决这个问题。我们已经安装了memcached,并且正在考虑尽可能多的PHP级缓存。有些页面相当查询,我们使用Smarty作为模板引擎。请记住,没有时间更改任何这些主要方面 - 这只是设置。我们应该注意哪些事情?

7 个答案:

答案 0 :(得分:9)

先测量,然后优化。你做过任何负载测试吗?瓶颈在哪里?

一旦你知道了你的瓶颈,那么你可以聪明地决定是否需要额外的数据库盒或网箱,现在你只是猜测。

此外,您的负载测试结果与预期流量相比如何?你能处理2倍的预期流量吗? 5倍?您可以轻松/快速地获得&发布额外的硬件?我确信业务要求是在发布期间不会失败,因此请确保您拥有 lot 的容量,之后当负载稳定并且您知道需要什么时,您可以随时将其释放。 / p>

答案 1 :(得分:3)

我至少会考虑所有静态​​内容。在其他地方设置另一个vhost并将所有graphics / css / js加载到它上面。您可以购买一些额外的周期来卸载该类型内容的服务。如果您真的担心您可以注册并使用内容分发服务。现在有很多类似于Akamai并且相当便宜。

另一个想法可能是利用apache mod_proxy来保持生成的页面输出一段特定的时间。 APC也很有用..你可以使用输出缓冲捕获+页面上相关数据的最后修改时间,并使用APC缓存版本。如果页面不再有效,则重新生成并再次存储在APC中。

祝你好运,这将是一次学习经历!

答案 2 :(得分:2)

有一个测试版期限,允许尽可能多的用户处理,测量网站的性能,在您上线之前解决错误。

您可以在私人测试版中明确控制用户数量,也可以控制Google风格的半公开测试版,其中每个用户都可以向他们的朋友提供一些推介。

答案 3 :(得分:1)

为了准备或处理峰值(或峰值)性能,我首先要确定您是否准备通过jmeter之类的简单性能测试。

它易于设置和开始使用,并为您提供是否能够处理预期峰值负载的早期指标。

然而,考虑到您的时间限制,其他步骤将是准备能引起最高关注的静态内容版本(例如新闻稿,如果您的发布日)。还要确保您充分利用客户端缓存(减少对服务器的请求可以产生重大影响)。在这些情况下,已经设计用于极高可扩展性和有效使用内容缓存的Web是您最好的朋友。

当事情平静下来时,software engineering radio on the design of the new Guardian website上有一个关于高可扩展性的优秀播客。

发布会好运

答案 4 :(得分:1)

我个人会做一些事情

1)加入某种负载均衡器/数据库复制系统

这意味着您可以将服务分布在多个服务器上。永久不能拥有多台服务器?使用Amazon E3 - 这对于这样的事情很有用(开启几台服务器来处理负载)

2)某些“高负荷”限制中的代码

例如,如果您的搜索效率低下 - 请在负载达到某个级别时将其关闭。 “对不起,我们很忙,稍后再试一次”

3)负载测试...使用类似ApacheBench的内容来对服务器进行压力测试。

4)就个人而言,我认为关闭“保持活动”连接更好。它可能会略微降低整体性能,但是 - 这意味着,如果网站适用于少数人,并且其他人获得超时,那么每个人都会得到不一致的服务,如果达到那个水平那么

Linux Format做了一篇关于“如何生存slashdotting”的好文章...我过去发现它很有用。这是available online as a PDF

答案 5 :(得分:1)

基本的第一步加强网站流量的步骤。

1)使用https://browsermob.com/等低成本工具对您的网站进行加载测试。至少你应该每小时看100K独立访客。如果您从MSN主页上获得广告,则希望每小时能够处理500K唯一身份。

2)将所有静态图形/视频内容移动到CDN。 Edgecast和亚马逊是两个很好的选择。

3)使用Jet Profiler配置MySQL服务器以分析任何执行速度慢的查询。微小的变化可以带来巨大的好处。

答案 6 :(得分:0)

研究使用Varnish - 它是一个缓存反向代理服务器(如鱿鱼,但更多的单一用途)。我在它背后运行了一些非常大的网站,它似乎工作得非常好。