为流量激增做准备


35

我们的公司将在本周的黄金时段电视节目中露面,他们告诉我们,我们一次可以在我们的网站上吸引大约200,000位访问者。

我们通常每天只能访问100次,因此我不知道我们是否可以处理那么多的访问量。我们由主持1and1.co.uk

有什么预防措施可以防止我们的网站瘫痪?


3
你读过这个吗?我绝对建议启用像CloudFlare这样的服务,以至少处理静态资产。webmasters.stackexchange.com/questions/14394/…–
richhallstoke

10
您应该尽快与1and1.co.uk通话!他们可以将您的网站移至具有较高cpu / ram /带宽比率的VPS服务之一,从而实现峰值!之后他们可以减少CPU / RAM来节省您的钱
Simon Hayter

1
您是否正在与1&1共享共享托管计划?如果是这样,您确实需要尽快寻找替代解决方案(功能非常强大的VPS或基于云的托管)。我非常怀疑任何共享托管环境都可以处理这种流量。
肖恩

3
我曾经是一个虚拟主机。如果大多数主机事先知道,便可以相当轻松地处理此类峰值问题,并且可以为您提供通常不提供的全部选项。这样做的原因是简单的。他们可能手头上有设备,例如硬件缓存,额外的服务器,负载平衡选项,故障转移选项等。其想法是看起来好像它们可以优雅地处理任何事情。这对企业有好处。大多数将免费设置这些选项。这实际上是业务的正常部分。
closetnoc

您想知道有一些工具可以测试服务器的繁重负载。我不知道任何名字,但是很容易找到它们。调整设置,当真实的人出现时,您可以进行自我控制的试驾而无需冒充:)
Martijn

Answers:


26

在高流量期间,您的服务器应该能够处理网站访问者提出的所有请求。但是服务器处理的并发连接有一些限制。因此,最好尽快处理页面请求。

在这些情况下,请考虑以下建议:

应用程序级别的改进:

1.最小化HTTP请求以加快页面加载时间。

a)将所有JS文件合并到一个合并的JS文件中,并将所有CSS文件合并在一个合并的CSS文件中。

b)缩小JS和CSS文件的大小,以便减小文件大小并加快下载速度。

c)使用CSS Sprites-当您将大部分或全部图像组合成一个sprite时,您会将多个图像请求变成一个。然后,您只需使用background-image CSS属性显示所需图像的部分。

d)通过延迟加载延迟图像下载,这将有助于减少http请求。

2.准备希望访问更多的轻量级页面:

a)尽可能排除图像或Flash等装饰元素;在网站导航和镶边中使用文本而不是图像,并将大部分内容放入HTML。

b)使用静态HTML页面而不是动态HTML页面;后者给服务器增加了负载。您还可以缓存动态页面的静态输出以减少服务器负载。


服务器级别的改进:

1.通过咨询您的托管服务提供商来减少服务器超时值(不要太低)。

当超时降低时,连接将很快释放,因此服务器将能够处理更多连接。

2.使用 CloudFlare之类的第三方服务进行静态数据缓存,并保护您的网站免受恶意用户和DDOS之类的攻击。

3.升级服务器硬件 -如果需要,升级物理和虚拟内存,增加I / O和进入过程的限制。您的托管服务提供商将能够为您提供更好的帮助。

4.缓存动态代码 -使用APC缓存PHP操作码。

5.负载平衡 -在多个负载平衡服务器之间分配负载。


  • 当采取了所有必需的措施后,现在该检查网站是否已准备好应对巨大的流量高峰。

    有一些第三方服务(例如loadimpact.com)提供模拟流量的负载测试。该分析将帮助您了解您的网站可以处理的负载量以及可以改进的负载量。

  • 另外,在流量高峰期,请避免占用大量CPU使用率的操作,例如网站备份cronjobs等。


3
这些都是与网站相关的事情,非常好!但是,除非您一次有200,000个请求全部命中服务器,否则这可能还不够。作为以前的Web主机,我曾经喜欢建立一个大型的硬件缓存,并在整个站点中加载缓存。我还将在多个服务器上复制站点,即使它们是共享的也可以使用代理或防火墙来实现负载平衡。通常就足够了。大多数人没有意识到最大的瓶颈实际上是HD I / O。增加内存并将其用于Apache和MySQL缓存确实也有帮助。
closetnoc

2
欢迎您改善答案!:)
Nikhil Supekar 2015年

1
我喜欢你的答案!我投票赞成。请不要被冒犯。我只是想从虚拟主机的角度指出一些事情。只是一个评论。不是大满贯。再次,您的回答很好!!我经常建议与主机联系,因为这些事情会不时出现,并且主机可以提供一些可以帮助您的选择,而不会花费任何费用。多数房东都很高兴得到关注!对我来说,这是一个简单的过程,因为硬件已经就位。我花了很长时间为这个事件做准备站点。;-) 谢谢你的邀请。
closetnoc

1
没有冒犯。实际上,我们真的可以利用您的服务器硬件经验。
Nikhil Supekar

1
除了研究信任网络外,我已经退休了十多年。我喜欢做的一件事是增加Apache和MySQL或类似应用程序的缓存,以减少钉住I / O子系统。我在这里做了,它真的可以工作。我还警告说自后备存储以来系统上的内存过多。交换文件等的维护可以从根本上增加I / O请求,而这些请求往往会变慢。有一个最佳的地方,但是我不知道那个最佳的地方了。我怀疑您比我更是专家。;-)
closetnoc 2015年

7

首先,我建议使用Cloudflare。您可以创建一个免费的基本帐户,该帐户将通过本地数据中心路由流量,以最大程度地减少服务器跳数。Cloudflare还非常适合缓存内容,并具有DDOS保护。

除此之外,请尝试减少服务层中的脂肪。确保您没有任何过分膨胀的数据库查询使您的代码成为瓶颈,或者没有任何可以简化的CPU密集型逻辑。

还尝试缓存所有数据库查询。Redis或Memcache是​​查询缓存的不错选择。如果您使用的是非编译语言,则需要考虑OpCaching。

但是,最重要的可能是使静态内容(即CSS,JS和图像)尽可能优化。压缩所有Javascript,并尽可能将它们合并到一个文件中。请记住,站点中包含的每个文件都必须经过几次服务器跃点才能到达最终用户。

也不要低估通过压缩图像可以节省多少带宽和加载时间!

最后,考虑使用诸如New Relic之类的工具监视性能。

祝你好运!

资料来源:Alexa称,它是英国第12大最受欢迎网站的开发商之一。


5

考虑对您的站点进行负载测试。有一些免费工具,如JMeterThe GrinderGatling,它们可以模拟大量访问您网站的访客。

通过提前测试繁忙流量的影响,您可以确定所做的任何调整是否有效,如果无效,请查看进一步的调整。


3

如果您使用的是1and1,则可能正在寻找便宜的托管服务。廉价的托管服务意味着您倾向于在一箱内做所有事情。托管的一个主要痛点是,当您将所有内容托管在同一个盒子中时,您会将资源分配到站点的重要部分:

  • 您的网络服务器(Apache,Nginx等)
  • 您的数据库(MySQL,PostGreSQL等)

而成为1and1,则很有可能会使用Plesk或cPanel等控制面板,这意味着您需要多一层争夺资源。还有棺材里最后的钉子?您没有很多资源。您可能只有1个CPU(或虚拟CPU)和很少的RAM(如果您有超过2GB的内存,我会感到惊讶)。

当我们放弃1and1时,我们选择了一个可扩展的托管服务提供商(在本例中为Amazon Web Services),我们做了很多以前无法做到的事情

  1. 亚马逊拥有自己的数据库实例(RDS),因此我们的数据库拥有丰富的资源。大多数RDBMS系统都在RAM上生活和呼吸,这是我们可以得到的很多东西。现在,您还可以配置具有高I / O的SSD,从而减轻了其他DB阻塞点(写入数据)的痛苦。
  2. 我们有一个带有2个Web服务器的负载均衡器。在庞大的数据库后端中,我们不需要高端前端,因此我们有两个低端服务器。
  3. 我们切换到可以使完全配置的计算机按需启动的功能。使用Chef或Puppet之类的工具,您可以轻松添加新的Web服务器,如果操作正确,它对最终用户是100%透明的。AWS还具有Opsworks,因此您可以直接将脚本构建到AWS中。
  4. 根据需要更改实例大小。这是我们的关键。如果数据库陷入困境,我可以将其关闭,然后在几分钟内重新启动为更大的数据库。是的,这将涉及停机时间,但是几分钟的停机时间比一个极其缓慢的站点的小时数要好。完全害怕停机?将读取的副本保留在机翼中,然后将其关闭,将其切换到更大的实例,升级为母版,这样就可以避免因额外机器而造成的停机。

AWS不是市面上唯一的游戏(Azure,Rackspace等),但请确保1and1可以扩展以满足您的需求。


1

请与您的ISP联系,以查看您的带宽是否有上限。如果带宽不足以容纳您期望的流量,请升级您的托管计划。您不想向您的访问者显示“超出带宽限制”消息。


1

从我的亲身经历,我知道即使最好的VPS也有其局限性。我要去真正的外行。

我们的体育网站之一托管在VPS上。在巴基斯坦和印度的比赛中,我们收到了超过7万次点击。我们有一个Inmotinghosting VPS,具有4GB RAM和2.something GHz处理能力,1TB带宽,SSD存储以及其他附带的功能。我们还激活了Cloudflare的付费版本。

比赛进行到一半时,网站就关闭了。比赛期间从来没有直播过,我们因此失去了超过70,000的访客。后来,我们知道带宽已被消耗,并且在源主机无法正常工作的情况下,CDN通常是无用的。

课程:除了获得VPS并调整为Cloudflare之类的CND之外,还应最小化页面大小。越小越好。您可以利用页面缓存和代码压缩来处理流量。


1

您尚未很好地定义“一次全部”。假设您在半小时内看到200,000位唯一身份访问者。那是每秒111个请求,没有考虑点击并打开更多页面的访问者(您想要的,对吗?)。

我要做的第一件事是Google讲述人们处理类似流量的故事。许多人会在自己的博客上写自己的经历,以帮助他人。您会发现,很难找到有关某人在共享主机上执行此操作的故事,这是有原因的。对于初学者,请使用与您的受众最接近的数据中心来研究诸如Digital Ocean或Amazon Web Services之类的解决方案。我同意将所有静态资源卸载到CloudFlare(甚至是免费帐户)是一个好主意。

除此之外,假设计时脚本是动态的,请在页面的顶部和底部添加计时脚本来测试您的代码。假设我对数字的假设是正确的,那么您将需要能够在10毫秒内为每个页面提供服务,以保持任何可接受的性能。如果默认情况下通过SSL服务所有请求,请在风暴过去后将其禁用几天。

同样,200,000个声音听起来很吓人,但请记住,您不必害怕(尽管您应该有点害怕)。例如,根据本文(SFW),当Paper杂志发布NSFW的Kim Kardashian的照片时,仅用四个中型Web服务器和Amazon ELB来处理负载。我绝对不认为您当前的设置可以解决此问题,但是您不应该确切地需要16个具有48个核的Web服务器,每个服务器都由自己的小型核发电机供电。


1

知道这个古老但很好的问题,并希望几年前我能获得有关该主题的良好信息...

我们有时会在电视网络上开设(与学校活动相关的)网站。由于我们的预算非常紧张,因此“负载平衡”是解决方案。如今,VPS盒的价格可能非常便宜,我们只是在其中的2-3个上镜像/复制了内容。

查看本文并阅读有关“循环”的信息。

有关负载测试的更多信息,请参见此处

刚开始尝试处理峰值时,我们只是将内容放在2-3个VPS盒中,并将其NS放在注册商设置中。



0

祝您好运,您可以在不到一周的时间内重写您的网站,切换提供商并将内容迁移到CDN。

正如您从其他答案中已经意识到的那样,这些是您需要做的最低限度的工作,可以使您的网站为流量的大量增长做好准备。尽管如果您当前在1and1.co.uk上运行,则可能没有强大的网络工程师,DBA,程序员和前端优化器团队为您服务。

这不太可能发生,是吗?

您没有说您对网站做什么,是否运行购物车或是否可以使用静态内容来实现。如果是后者,那么,如果您将整个站点都刮成静态文件并发布到常规站点的位置,则可能会幸免于海啸(首先备份当前版本)。

您还应该与1and1(使用您的信用卡)通话。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.