【问题标题】:Best practices for withstanding launch day traffic burst抵御发布日流量突发的最佳实践
【发布时间】:2025-11-27 20:00:01
【问题描述】:

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

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

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

【问题讨论】:

    标签: php mysql linux apache lamp


    【解决方案1】:

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

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

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

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

    祝发布顺利。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我个人会做一些事情

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

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

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

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

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

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

        Linux Format 写了一篇关于“如何在斜线点中幸存下来”的好文章……我在过去发现它很有用。我是available online as a PDF

        【讨论】:

          【解决方案4】:

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

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

          祝你好运。这将是一次学习体验!

          【讨论】:

            【解决方案5】:

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

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

            【讨论】:

              【解决方案6】:

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

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

              【讨论】:

                【解决方案7】:

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

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

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

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

                【讨论】:

                • 在昂贵的 CDN 上购买空间之前先进行衡量。你可能需要也可能不需要它,即使你得到了它,你也可能用错了。测量!