Web应用程序的可伸缩性和性能,方法?

时间:2009-01-11 20:41:46

标签: performance web-applications web scalability

您使用了哪些方法和技术来成功解决网站的可扩展性和性能问题?我是一个ASP.NET Web开发人员,使用带有SQL集群的WCF探索.NET远程处理,并且对于存在其他方法(例如“云”)感到好奇。在哪些情况下,您会应用各种方法(例如,大约x个“活跃”用户的方法a。)

我的意思的一个例子,一个myspace案例研究:http://highscalability.com/myspace-architecture

3 个答案:

答案 0 :(得分:15)

这是一个非常广泛的问题,很难回答,但我会尝试提供一些一般性的建议。

1 - 除非你做了一些严重错误的事情,否则在你达到大量流量(每月超过100万的页面浏览量)之前,你可能不需要担心性能或规模。

2 - 您最初遇到的最大性能问题可能是来自其他国家/地区的页面加载时间。试试Gomez Instance Site Test查看来自世界各地的页面加载时间,并使用YSlow作为优化指南。

3 - 当您开始遇到性能问题时,首先很可能是由于数据库工作。使用SQL Server Profiler检查SQL流量,查找长时间运行的查询以尝试优化,并使用dm_db_missing_index_details查找应添加的索引。

4 - 如果您的Web服务器开始成为性能瓶颈,请使用分析器(例如ANTS Profiler)来寻找优化网页代码的方法。

5 - 如果您的Web服务器经过优化并且仍然运行得太热,请寻找更多缓存机会,但您可能只需要添加更多Web服务器。

6 - 如果您的数据库经过优化并且仍然运行得太热,那么请查看添加分布式缓存系统。这可能不会发生,直到你每个月的页面浏览量超过1000万。

7 - 如果您的数据库即使使用分布式缓存也开始不堪重负,那么请查看分片架构。这可能不会发生,直到你每个月的页面浏览量超过1亿。

答案 1 :(得分:8)

我曾在几个网站上工作,每月可获得数百万次点击率。以下是一些基础知识:

  1. 缓存,缓存,缓存。缓存是减少Web服务器和数据库负载的最简单,最有效的方法之一。缓存页面内容,查询,昂贵的计算,I / O绑定的任何内容。 Memcache简单而有效。
  2. 最大限度地使用多台服务器。您可以拥有多个Web服务器和多个数据库服务器(具有复制功能)。
  3. 减少对网络服务器的整体请求数。这需要使用expires头缓存JS,CSS和图像。您还可以将静态内容移动到CDN,这将加快用户的体验。
  4. 措施&基准。在生产计算机上运行Nagios并在dev / qa服务器上加载测试。你需要知道什么时候你的服务器会着火,所以你可以防止它。
  5. 我建议阅读Building Scalable Websites,它是由Flickr工程师之一编写的,是一个很好的参考。

    查看我关于可扩展性的博文,它有很多关于使用多种语言和平台进行扩展的演示文稿的链接: http://www.ryandoherty.net/2008/07/13/unicorns-and-scalability/

答案 2 :(得分:1)

来自MS的velocity以及MEMCache现在有一个到.NET的端口,还有indeXus.Net