我问的原因是 Stack Overflow 已经被Slashdotted和Redditted。
首先,这对支持网站的服务器有什么影响?其次,系统管理员可以做些什么来确保他们的站点尽可能保持正常运行?
我问的原因是 Stack Overflow 已经被Slashdotted和Redditted。
首先,这对支持网站的服务器有什么影响?其次,系统管理员可以做些什么来确保他们的站点尽可能保持正常运行?
不幸的是,如果您在它发生之前没有计划好,那么可能为时已晚,您的用户体验会很差。
可扩展性是您最关心的问题。您可能开始每秒获得的点击次数超过每月获得的点击次数。您的第一道防线是良好的编程和设计。确保您没有做任何愚蠢的事情,例如每个请求多次从数据库重新加载数据而不是缓存它。在峰值发生之前,您需要进行一些相当现实的负载测试以查看瓶颈在哪里。
对于高得离谱的流量,请考虑将一些动态页面切换到静态页面的能力。
拥有可扩展的服务器架构也有帮助。共享主机通常不会扩展。单个专用机器通常无法扩展。使用类似 Amazon 的 EC2 之类的东西来托管会有所帮助,特别是如果您从一开始就计划一个服务器集群(即使您的集群是单台计算机)。
您的下一个主要问题是安全性。你突然成为坏人更大的目标。确保您有一个良好的安全计划。这是您应该始终拥有的东西,但随着使用率的提高,它变得更加重要。
首先,询问您是否真的想花数周和数千美元来计划甚至可能不会发生的事情,如果确实发生了,则持续大约 5 个小时。
最简单的解决方案是有一个很好的方法来切换到一个页面,只需允许注册。人们会注册,当风暴过去时,您可以通过电子邮件向他们发送电子邮件。
更精细的解决方案依赖于能够快速扩展。这首先是一个软件问题(你可以连接到另一台服务器上的数据库,你可以做负载平衡吗)。其次,您的托管解决方案需要支持快速扩展。想到了 Amazon EC2,或者可能是 slicehost。使用这两种服务,您可以轻松启动新实例(“让我们将数据库移动到不同的服务器”)并扩展您的实例(“让我们将数据库服务器升级到 4GB RAM”)。
如果您将所有数据(包括会话)保存在数据库中,您可以轻松拥有多个前端服务器。对于数据库,我通常会尝试使用可用资源最多的单个服务器,但这只是因为我没有使用过数据库复制,而且过去很难做到,至少使用 mysql。情况可能有所改善。
应用程序设计人员需要考虑扩展(具有更多内核和更高性能的大型机器)和/或扩展(跨多个系统分配工作负载)。IT 人员需要弄清楚如何最好地支持这一点。网络是您首先看到的,因为显然一切都在它之上。从边界开始,这通常意味着网络负载平衡器和冗余路由器由多个提供商提供服务。您还可以查看地理缓存服务和应用程序,例如 cachefly。
你想尽可能地减少你的瓶颈。您还希望设计环境,使其可以根据需要进行横向扩展,而无需做太多工作。提前做好设计工作,当你得到挖掘时,这将意味着更少的头痛。
一些想法(我在过去和当前项目中使用的):为了提高性能(如果需要),您可以在服务器前面放置一个反向代理、缓存 squid。当然,只有当您没有会话密钥并且页面有些静态(意味着:它们每小时只更改一次左右)并且没有个性化时,这才有效。使用 squid,您可以提升像typo3 这样臃肿而缓慢的 CMS,从而拥有静态网站的性能和 CMS 的舒适度。
您可以将大型文件外包给 Amazon S3 等外部服务,从而节省服务器的带宽。
如果你能花一些(每月三位数)的钱,你也可以使用内容交付网络。有了这些,您就可以自动为您的用户提供可扩展性、高可用性和低延迟。当然,您的页面必须是可缓存的,因此会话密钥和个性化页面是禁止的。如果精心设计并考虑到 CDN,您至少可以缓存一些内容,例如图片和视频以及静态内容。
正如其他答案所提到的,负载上升。
您还会从只对破坏行为真正感兴趣的无聊人那里获得大量新用户/博客评论/投票。对于允许完全匿名评论的博客来说,这主要是一个问题,其中将输入一些可怕的东西。博客平台可能有足以阻止它的垃圾邮件过滤器,但经常需要手动干预来清理剩余的乱码。
即使是一点点进入障碍,例如即使没有进行验证也需要用户名或电子邮件地址,也会大大减少破坏行为的数量。