17

我们正在为一个客户开发一个网站,该客户(一次)预计会在第一天获得相当多的流量。有新闻稿,人们在写博客等等。我有点担心我们会在第一天就摔倒在地。你会看哪些主要的事情来确保(在没有真实流量数据的情况下提前)你可以在大型发布后保持站立?

详细信息:这是一个L/A/M/PHP堆栈,使用内部开发的 MVC 框架。这目前正在一台服务器上启动,上面有 Apache 和 MySQL,但如果需要,我们可以将其拆分。

我们已经在安装Memcached并尽可能多地进行 PHP 级缓存。有些页面是查询密集型的,我们使用Smarty作为我们的模板引擎。请记住,没有时间更改这些主要方面中的任何一个——这只是设置。我们应该注意哪些方面?

4

7 回答 7

10

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

一旦你知道你的瓶颈,你就可以智能地决定你是否需要额外的数据库盒或网络盒。现在你只是在猜测。

此外,您的负载测试结果与您的预期流量相比如何?你能处理两倍于预期的流量吗?五次?您获得和发布额外硬件的难易程度/速度如何?我确信业务要求是在启动期间不会失败,因此请确保您有大量可用容量。当负载稳定并且你知道你需要什么时,你总是可以在之后释放它。

于 2008-09-22T22:26:30.800 回答
3

我至少会排除所有静态内容。在其他地方设置另一个虚拟主机并将所有图形、CSS 和 JavaScript 加载到它上面。您可以购买一些额外的周期,卸载该类型内容的服务。如果您真的很担心,您可以注册并使用内容分发服务。现在有很多类似于Akamai并且相当便宜。

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

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

于 2008-09-22T22:30:20.607 回答
2

有一个测试期,您可以在其中允许尽可能多的用户,衡量您网站的性能,并在上线之前解决错误。

您可以在私人测试版中明确控制用户数量,也可以在谷歌风格的半公开测试版中控制每个用户可以提供给朋友的推荐数量。

于 2008-09-22T23:54:50.963 回答
1

为了准备或处理峰值(或峰值)性能,我将首先确定您是否已准备好通过一些简单的性能测试,例如jmeter

它很容易设置和开始,并且会为您提供早期指标,以确定您是否会处理预期的峰值负载。

但是,考虑到您的时间限制,需要采取的其他步骤是准备将吸引最高关注的静态内容版本(例如新闻稿,如果您的发布日)。还要确保您充分利用了客户端缓存(对您的服务器的请求少一个就可以使一切变得不同)。Web 已经为极高的可扩展性和有效使用而设计,在这些情况下,内容缓存是您最好的朋友。

当事情平静下来时,在新的 Guardian 网站的设计中,有一个关于软件工程广播的高可扩展性的优秀播客。

祝发射顺利。

于 2008-09-22T22:25:34.267 回答
1

我个人会做一些事情

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

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

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

例如,如果您的搜索效率低下 - 当负载达到一定水平时将其关闭。“抱歉,我们正忙,请稍后再试搜索”

3) 负载测试... 使用ApacheBench 之类的工具对您的服务器进行压力测试。

4) 就个人而言,我认为关闭“Keep-Alive”连接会更好。它可能会略微降低整体性能,但是 - 这意味着如果网站达到那个水平,而不是让网站对少数人运行良好,而其他人会超时,每个人都会得到不一致的服务

Linux Format 写了一篇关于“如何在斜线点中生存”的好文章……我过去发现它很有用。它以 PDF 格式在线提供

于 2008-09-22T22:28:08.957 回答
1

加强您的网站以实现高流量的基本第一步。

  1. 使用https://browsermob.com/之类的低成本工具对您的网站进行负载测试。至少,您应该每小时查看 100K 的独立访问者。如果您从 MSN 主页获得广告,则希望每小时能够处理 500K 的独立访问者。

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

  3. 使用Jet Profiler分析您的 MySQL 服务器以分析任何执行缓慢的查询。微小的改变可以带来巨大的好处。

于 2010-06-02T19:52:16.080 回答
0

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

我已经在它背后运行了一些相当大的网站,而且它似乎工作得很好。

于 2008-09-23T00:31:17.833 回答