应对上线日流量激增的最佳实践

17
我们正在为客户制作一个网站,预计在第一天就会有相当数量的访问量。有新闻发布,人们也在博客上谈论这个网站等等。我有点担心我们在第一天就会失败。你会关注哪些主要因素以确保(在没有真实流量数据的情况下提前)你能够在大规模启动后保持稳定?
详情:这是一个 L/A/M/PHP 堆栈,使用一个内部开发的 MVC 框架。目前在一个服务器上进行启动,其中 Apache 和 MySQL 都在上面,但如果需要,我们可以将其分开。
我们已经安装了 Memcached 并尽可能地进行了 PHP 级别的缓存。一些页面需要较多的查询,我们使用 Smarty 作为模板引擎。请记住,没有时间更改任何这些主要方面--这只是设置。我们应该注意哪些事项?
7个回答

10

先衡量,再进行优化。你进行过任何负载测试吗?瓶颈在哪里?

一旦确定了瓶颈,就可以理智地决定是否需要增加数据库或Web服务器。现在你只能猜测。

此外,你的负载测试结果与预期流量相比如何?你能处理两倍的预期流量吗?五倍?你能多快地获取和释放额外的硬件资源? 我确信业务需求是在启动时不要失败,因此请确保有大量的可用容量。当负载稳定并且你知道自己需要什么时,总是可以在之后释放它。


3
我建议至少将所有静态内容分离出来。在其他地方设置另一个虚拟主机,并将所有图形、CSS和JavaScript加载到其中。这样可以节省一些额外的计算资源,减轻此类内容的负载。如果您真的很关心,可以注册并使用内容分发服务。现在有很多类似于Akamai的服务,而且价格相当便宜。
另一个想法是利用Apache mod_proxy在特定时间内保留生成的页面输出。APC也非常可用...您可以使用缓冲捕获+页面相关数据的最后修改时间,然后使用APC缓存版本。如果页面不再有效,则重新生成并再次存储在APC中。
祝你好运。这将是一次学习经历!

2

在正式上线之前,建议您进行一个测试期,尽可能地让更多的用户使用您的网站,测试其性能并解决问题。

您可以通过私人测试或者类似Google的半公开测试方式来控制用户数量。在半公开测试中,每个用户可以邀请一定数量的朋友参与测试。


1

加强网站以应对高流量的基本第一步。

  1. 使用低成本工具,如https://browsermob.com/来进行负载测试。最少应该考虑每小时100K个独立访客。如果你从MSN首页获取广告,则需要考虑每小时500K个独立访客。

  2. 将所有静态图形/视频内容移至CDN。Edgecast和Amazon是两个优秀的选择。

  3. 使用Jet Profiler来分析MySQL服务器中任何慢查询的性能。微小的更改可以带来巨大的好处。


1
在购买昂贵的CDN空间之前,先进行测量。你可能需要它,也可能不需要,即使你得到了它,你可能使用不当。一定要先进行测量! - Zan Lynx

1

为了准备或处理高峰期的性能,我首先会通过一些简单的性能测试来确定你是否准备好,可以使用类似 jmeter 的工具。

这很容易设置和开始,并且会提供早期指标,以确定你是否能够应对预期的高负载。

然而,考虑到你的时间限制,其他需要采取的步骤包括准备内容的静态版本,以吸引最高关注度(例如,如果是发布日,则是新闻稿)。此外,确保你充分利用客户端缓存(少一个请求发送至服务器可能会产生重大影响)。网络已经被设计成极高可扩展性,并且在这些情况下,有效地使用内容缓存是你最好的朋友。

当一切平静下来时,有一段关于高可扩展性的优秀播客,讲述了 Software Engineering Radio 上的新 Guardian 网站设计

祝你的发布顺利。


1

个人而言,我会做几件事情:

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

这意味着您可以将服务分布在多台服务器上。无法永久拥有多台服务器?使用 Amazon E3 - 它适用于类似于此类的事情(打开更多的服务器以处理负载)

2)编写一些“高负载”限制的代码

例如,如果您的搜索不够高效,则在负载达到某个水平时关闭它。“对不起,我们很忙,请稍后再试搜索”

3)进行负载测试... 使用类似 ApacheBench 的东西来压力测试您的服务器。

4)个人认为关闭“Keep-Alive”连接更好。它可能会略微降低总体性能,但是这意味着站点对于少数人有效,其他人则超时,每个人都得到不一致的服务,如果达到那个级别。

Linux Format杂志曾经发表过一篇关于“如何应对Slashdot效应”的好文章,我在过去中也从中受益匪浅。它可以在线获取PDF格式


0

考虑使用Varnish - 它是一个缓存反向代理服务器(类似于Squid,但更加单一)。

我曾经在它后面运行过一些非常大的网站,它似乎工作得非常好。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接