在异常高流量高峰期存活的好方法是什么?
我的想法是,在某些触发器上,我的网站应暂时切换到“低带宽”模式:切换到基本HTML页面,最小图形,禁用可能会对数据库施加不必要负载的小部件,等等。 / p>
我的想法是:
编辑:我熟悉缓存,切换到静态内容或内容投放网络等选项,以此作为生存手段,所以也许问题应该更多地关注于如何检测当网站即将变得超载。 (虽然其他生存方法的答案当然仍然非常受欢迎。)让我们说网站在Linux和PHP上运行Apache。这可能是最常见的配置,应该允许最大数量的人从答案中获得帮助。让我们假设购买另一台服务器和负载平衡等昂贵的选项是不可用的 - 至少对于我们大多数人来说,提及Slashdot将是一次千载难逢的事情,而不是我们可以花钱准备的事情
答案 0 :(得分:22)
答案 1 :(得分:21)
答案 2 :(得分:13)
值得一提的是,如果您的连接上没有足够的带宽,那么聪明的缓存和低带宽模式将毫无用处,因此请确保与服务器的连接足够胖。例如,不要将它托管在家庭DSL连接上。
我是从被抨击的经历中说出来的。当你无法访问互联网时,这并不好玩,因为成千上万的人同时试图下载你的室友安装在George Foreman烤架内的电脑的照片。没有多少防火墙可以帮助您。
答案 3 :(得分:11)
基础知识:
真正的答案:
答案 4 :(得分:9)
Here's一篇相当冗长但内容丰富的文章,关于幸存的“闪光人群”。
以下是他们提出的解决方案所针对的情况:
在本文中,我们考虑通过我们称之为车库创新者的角色来扩展的问题。车库创新者具有创造力,技术精湛,雄心勃勃。她对Web上的Next Big Thing有很好的想法,并使用一些备用服务器来实现它。该服务已启动并正在运行,不时吸引新访问者,并从广告和订阅中获得微薄的收入。也许有一天,她的网站将获得大奖。 也许它会到达Slashdot或Digg的头版;也许Valleywag或纽约时报会提到它。
我们的创新者可能只有一次机会 广泛的宣传。如果那样的话 发生了,成千上万的人 将访问她的网站。既然她的想法是 如此新颖,很多都会成为 创收客户并参考 朋友。但一瞬间就是人群 众所周知的善变;结果不会 如果该网站几乎是田园诗般的 在它的负载下崩溃。很多人 如果该网站将不会打扰返回 第一次不起作用。它仍然 很难证明支付数十美元 数千美元的资源 以防万一该网站经历过 突然负载峰值。闪光的人群是 车库创新者的祸根和祸根 她的目标。
摆脱这个难题的一个方法是 由当代实用程序启用 计算
然后,文章提出了车库创新者可以采取的一些步骤,例如使用存储传送网络和实现高度可扩展的数据库。
答案 5 :(得分:7)
我重写了几个热门网站引用的所有网址,以便通过coralCDN重定向。
Apache的一个例子:
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_USER_AGENT} !^Googlebot
RewriteCond %{HTTP_USER_AGENT} !^CoralWebPrx
RewriteCond %{QUERY_STRING} !(^|&)coral-no-serve$
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?digg\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?slashdot\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?fark\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?somethingawful\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?kuro5hin\.org [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?engadget\.com [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?boingboing\.net [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?del\.icio\.us [OR]
RewriteCond %{HTTP_REFERER} ^http://([^/]+\.)?delicious\.com
RewriteRule ^(.*)?$ http://example.com.nyud.net/$1 [R,L]
</IfModule>
答案 6 :(得分:6)
除非你对它进行压力测试,否则根本无法知道你的网站是否会承受重负荷。使用siege之类的内容,查看性能问题所在。它在内存中增长得太快了吗?是否通过一堆并发连接开始减速?是否开始永远访问数据库?
一旦你知道性能问题在哪里,那就变成了摆脱它们的问题。不幸的是,如果不了解更多关于你的具体情况的话,很难进入更多的细节,但请记住,你在谈论优化。因此,只有当您知道存在性能问题时才应该采取行动。
我认为你不一定只是准备一生一次的事件。 DOS攻击仍然会发生,所以即使您的网站没有被删除,也可以进行准备工作。
在几乎所有情况下,我能想到的唯一可以帮助你的东西就是如果你gzip你的内容。这将节省大量带宽,所有现代浏览器都会支持它,而不会产生太多的性能问题。
答案 7 :(得分:5)
我认为前提是错误的:你真的非常希望得到slashdotted,否则你首先就不会有一个网站。一个更好的问题是你如何处理额外的流量?甚至那是两个问题:
答案 8 :(得分:5)
真正的问题是“什么是最有效的Slashdotted方式”
如果这是一个真正的问题,请将流量重定向到我的网站。
答案 9 :(得分:4)
不要撰写内容或提供可能吸引极客的服务;)
答案 10 :(得分:2)
对于体验高流量的网站,Akamai是一个很好的解决方案,可以使网站快速,可扩展,并且可靠,无论您拥有自己的基础架构。 Akamai是一项服务(非免费),可以将您的网站缓存到世界各地。在我上一份工作中,我们的电子商务目录通过它们缓存,我们的服务器可能会关闭,除非他们尝试添加到购物车,否则没有人会知道。此外,我们的图像服务器已经关闭一次,而Akamai的缓存又让我们失望了。
答案 11 :(得分:2)
把它放在云端!
这可能与个人博客等无关,但对于较大的网站,云托管将解决这个问题。例如亚马逊EC2,关于这个策略的事情是,它将花费你一大笔钱。
在较小的范围内,对所有图像/静态内容使用CDN可能会有所帮助,再次评估价格非常重要。亚马逊S3是我听到的最多的CDN。
答案 12 :(得分:1)
近乎可信的网络是一个半云,可以说是在这种情况下有所帮助。如上所述,分层缓存有很大帮助。从memcached而不是数据库中提取信息块,在你面前有一个反向代理(或者分布式反向代理,也就是CDN,Panther Networks很便宜)。
答案 13 :(得分:1)
您还可以使用Nagios来监控服务器运行状况。根据您的要求,在某些情况下,您可以触发现有的SQL文件来切换您网站的模式。
例如,添加“UPDATE settings_table SET bandwidth ='low';”进入该SQL文件并在mysql中运行它,并在条件恢复正常时执行相反的操作。
答案 14 :(得分:1)
netstat -plant | awk '$4 ~ /:80\>/ {print}' | wc -l
这将显示与Apache服务器的所有连接。您可以创建一个cgi脚本来计算Apache服务的总连接数,并在达到某个阈值时发出警告。那时该做什么是另一个问题。
希望您的服务器已做好准备。
答案 15 :(得分:1)
提高数据库的缓存级别,以便内容可能稍微过时但访问速度更快。当然,这仅适用于内容不必100%一致的情况。
答案 16 :(得分:1)
使用缓存!
如果您正在使用WordPress(例如),则可以使用WP-Super-Cache之类的内容。如果您使用常规PHP,仍然可以使用许多选项,包括memcache。或者您可以使用常规的squid代理样式缓存。
您使用的任何缓存都有助于您的网站防弹(或slashdot / digg-proof): - )
答案 17 :(得分:1)
缓存......很难。记录命中,如果发生尖峰,请写出被击中的页面的完全静态副本,然后提供。使用良好的缓存系统将数据库查询从100减少到2可以在弱斜线下生存,但是根本没有任何数据库查询仍会导致严重负载的死站,而您还没有准备好。
答案 18 :(得分:1)
有很多方法可以做到,或者至少有所帮助。在Google上搜索“slashdot-proof”,你会发现其中的一些:
等
答案 19 :(得分:1)
永远不会变得流行。
虽然这样可行,但并不是真的有用。您需要什么样的基础设施可以在很短的时间内扩展像谷歌Gears或亚马逊的网络服务似乎是理想的,因为即使Slashdot也不会压倒谷歌或亚马逊。如果您需要自己的服务器,请确保您的网络提供商不会在任何预设的带宽限制下切断您。购买足够的硬件,这样你就不会因为正常的交通而没有任何松懈来处理突然的尖峰。
答案 20 :(得分:0)
没有人提到负载均衡... haproxy等。优化,缓存和负载平衡几乎可以存活。话虽这么说,我不确定stackoverflow是否落后于负载均衡器;)
答案 21 :(得分:0)
关于幸存你是对的:将slashdotted链接切换或重定向到没有图形的静态html页面。 您甚至可能希望将此页面放在其他Web服务器上,因此您的原始服务器不会占用太多负载。
我会为此使用临时重定向,并在流量消失时删除重定向。
但如何检测到这一点,我也想知道!只计算过去几秒内的命中率可能还不够?
答案 22 :(得分:0)
一个字:Knipex
答案 23 :(得分:0)
htaccess的:
RewriteEngine on
RewriteCond %{HTTP_REFERER} slashdot\.org [NC]
RewriteRule .* - [F]
答案 24 :(得分:0)
确保您的网页支持Last-Modified&amp; If-Modified-Since和/或ETag&amp; If-None-Match标头。有了这些,你可以完全避免许多计算和转移。
搜索HTTP条件GET以获取更多信息。
答案 25 :(得分:0)
有很多方法可以做到,或者至少有所帮助。在Google上搜索“slashdot-proof”,你会发现其中的一些:
等
答案 26 :(得分:0)
自动重定向到Coral CDN,除非请求来自coral cdn。
答案 27 :(得分:0)
缓存数据。
对数据库进行不必要的访问以显示每次加载显示相同内容的内容是杀死服务器的内容。将其输出写入文件并使用它。大多数CMS和框架都内置了缓存(但你必须打开它),但滚动自己并不是最具挑战性的任务。
答案 28 :(得分:0)
确保您构建的所有页面都是静态的,没有数据库,并且不使用图像。
实际上,这个地方并没有那么糟糕。
答案 29 :(得分:0)
我知道Digg你可以联系他们并要求他们将你的网站列入黑名单。你可以用Slashdot做同样的事。