我的任务是确定每月将吸引超过 1000 万独立访问者的网站的基础架构要求。这个网站将在大小内容明智的几个演出。我马上就知道所有的交互内容都会放在 CDN 上,但是后端呢?该站点还将附加一个 CMS,这意味着任何双服务器设置都需要集群,我猜也是负载平衡的。只是想要您可能有的任何建议。
添加更多细节。我们很可能会使用 webmux 负载均衡器。
我的任务是确定每月将吸引超过 1000 万独立访问者的网站的基础架构要求。这个网站将在大小内容明智的几个演出。我马上就知道所有的交互内容都会放在 CDN 上,但是后端呢?该站点还将附加一个 CMS,这意味着任何双服务器设置都需要集群,我猜也是负载平衡的。只是想要您可能有的任何建议。
添加更多细节。我们很可能会使用 webmux 负载均衡器。
可悲的是,在您上线之前,您不知道要修复什么。如果没有一些数据来支持您的决定,就很难把钱放在正确的地方。我会推荐容量规划的艺术来了解你应该做什么来规划你的容量。但一般规则是监控一切。你想要大量的图表。如果你看不到哪里出了问题,你就没有机会解决它。不要将监控留到最后一分钟。了解您的网站当前的表现以及它在过去一天、一个月或一年中的表现是多么重要,我怎么强调都不为过。我们使用 munin 进行绘图,因为它可以快速启动和运行。其他人使用 Ganglia 和 Cacti 效果很好。
但是,您可以采取各种措施来提高生存机会。
1)复制一切。很多。您希望能够在遇到问题的地方添加更多硬件。您不想购买更大的硬件来替换太慢的硬件。查看负载平衡您的应用程序服务器。看看使用主/从数据库设置,其中读取来自您的从属服务器并写入您的主服务器。您说过您将大多数媒体存储在 CDN 上。好的。
2) 避免在数据库中存储任何暂时的东西。数据库对于临时数据来说太慢了,您希望它们服务于其他请求。
3) 尽可能避免服务器端状态。对于服务器端状态,您将不得不在 Web 服务器之间进行某种共享会话复制,从而限制您添加更多硬件的能力,或者您需要使用粘性会话,这将起作用,但可能导致负载不均和会话死亡如果你的服务器死了。
4)缓存一切。使用 memcached 在数据库和应用程序之间缓存数据。如果您存储多个查询结果的数据,它会更有效。在 Web 层前使用缓存。像 apache 的 mod_cache 或反向代理模式下的 squid 之类的东西。
5) 介绍您的网站。找到慢的地方。
6)配置您的html。很大一部分用户感知到的网络速度慢是在前端。高性能网站有很多有用的技术。Yahoo 的 YSlow firefox 扩展也很有用。
我可以推荐 Building Scalable Web Sites和High Scalability博客。
有很多选择。我在类似情况下使用的一些技术是:用于负载平衡的 haproxy,用于提供静态内容的 nginx 和 lighttpd,用于代理缓存的 varnish,用于服务器之间高可用性的心跳。我仍然让 apache 使用 cms 发布静态 html 文件来提供动态内容,并试图避免连接到前端的数据库。
你知道,这取决于你在做什么......有点简单的方法可能是利用亚马逊的 CloudFront 服务之类的东西:
http://aws.amazon.com/cloudfront
通过负载平衡,我也强烈推荐: