抵御发射日流量突发的最佳做法
我们正在为一个网站工作,希望该客户(一次)将在第一天获得大量流量。有新闻稿,人们在博客上写博客,等等。我有点担心,我们在第一天会面目全非。我们将要考虑的主要内容是(确保在没有实际流量数据的情况下)在大型发射后保持原状。
详细信息:这是一个L / A / M / PHP堆栈,使用内部开发的MVC框架。目前,这是在一台服务器上启动的,同时安装了Apache和MySQL,但如果需要,我们可以将其分解。我们已经在安装memcached并进行我们可以想到的尽可能多的PHP级缓存。有些页面查询量很大,我们将Smarty用作模板引擎。请记住,没有时间更改这些主要方面中的任何一个,这只是设置。我们应该注意哪些事情?
解决方案
为了准备或者处理峰值(或者峰值)性能,我将首先通过使用jmeter之类的简单性能测试来确定我们是否准备就绪。
它很容易设置和入门,并且会为我们提供早期指标,确定我们是否将处理预期的峰值负载。
但是,考虑到时间限制,要采取其他步骤是准备吸引最高关注度的静态内容版本(例如新闻稿,如果我们是发布日)。另外,还要确保充分利用客户端缓存(对服务器的请求减少1个就可以发挥全部作用)。在这些情况下,我们已经为实现极高的可伸缩性和有效使用内容缓存而设计的Web是我们最好的朋友。
当形势变得平静时,在新版《卫报》网站的设计中,有一个关于软件工程无线电的高可扩展性的出色播客。
祝发射顺利
首先进行测量,然后进行优化。你做过负载测试了吗?瓶颈在哪里?
一旦知道了瓶颈,我们就可以明智地决定是否需要其他数据库盒或者Web盒,现在我们只是在猜测。
另外,负载测试结果如何与预期流量进行比较?我们可以应付预期流量的2倍吗? 5倍?我们如何轻松/快速地获取和发布额外的硬件?我确定业务需求是在启动期间不会失败,因此请确保我们有很多可用容量,可以在负载稳定并且知道需要什么之后再释放它。
我个人会做一些事情
1)放入某种负载平衡器/数据库复制系统
这意味着我们可以将服务分布在多个服务器上。不能永久拥有多个服务器?使用Amazon E3非常适合放置这样的东西(打开更多服务器以处理负载)
2)代码中有一些"高负载"限制
例如,如果搜索效率低下,则当负载达到一定水平时将其关闭。 "很抱歉,我们很忙,请稍后再搜索"
3)负载测试...使用类似ApacheBench的工具对服务器进行压力测试。
4)就个人而言,我认为关闭" Keep-Alive"连接会更好。它可能会略微降低整体性能,但是这意味着,如果网站无法达到少数人可以正常工作的状态,而其他人会超时,则每个人都将获得不一致的服务(如果达到该水平)
Linux格式在"过去如何生存"方面做了一篇不错的文章……我发现它过去很有用。可以在线以PDF格式获得
我至少会考虑所有静态内容。在其他地方设置另一个虚拟主机,然后将所有图形/ css / js加载到该虚拟主机。我们可以购买一些额外的周期来卸载此类内容的服务。如果我们确实有兴趣,可以注册并使用内容分发服务。现在有很多类似于Akamai的东西,而且很便宜。
另一个想法可能是利用apache mod_proxy在特定时间段内保持生成的页面输出。 APC也将非常有用。我们可以使用输出缓冲捕获+页面上相关数据的最后修改时间,并使用APC缓存版本。如果该页面不再有效,则重新生成并再次存储在APC中。
祝你好运,这将是一次学习的经历!
在Beta版中,我们可以允许尽可能多的用户使用,衡量网站的性能,在上线之前找出错误。
我们可以在私人测试版中明确控制用户的数量,也可以在Google风格的半公开测试版中控制每个用户的推荐数量,这些推荐可以提供给他们的朋友。
研究使用Varnishit的缓存反向代理服务器(如squid,但更多用途)。我在它后面经营着一些非常大的网站,它似乎运行得很好。
加强网站流量的基本第一步。
1)使用https://browsermob.com/之类的低成本工具对网站进行负载测试。至少我们应该每小时要吸引10万唯一身份访问者。如果我们从MSN主页上获得广告,则希望每小时可以处理500K个唯一身份。
2)将所有静态图形/视频内容移动到CDN。 Edgecast和Amazon是两个很好的选择。
3)使用Jet Profiler来分析MySQL服务器,以分析任何执行缓慢的查询。微小的变化可以带来巨大的好处。