学习如何处理asp.net mvc网站流量大的资源?

时间:2010-12-27 18:53:22

标签: c# asp.net sql-server asp.net-mvc-2 iis

交通流量多少?什么是学习繁忙交通网站开发的最佳资源?...有什么方法?

3 个答案:

答案 0 :(得分:9)

有很多原则适用于任何网站,与底层堆栈无关:

  • 使用HTTP缓存工具。一个是用户代理缓存。其次,整个Web主干充满了可以缓存您的请求的代理,因此可以充分利用它。甚至落在您的服务器上的请求将为您的负载增加0,您无法优化得更好:)
  • 就上述问题而言,使用CDN(内容分发网络,如CloudFront)作为静态内容。可以从CDN提供CSS,JPG,JS,静态HTML和更多页面,从而从Web请求中保存Web服务器。
  • 第一点的第二个推论:为动态内容添加过期缓存提示。即使短暂的缓存生命周期(如10秒)也可以节省大量的命中,而这些命中将由客户端和服务器之间的所有代理服务。
  • 最小化HTTP请求的数量。看似基本,但可能是最容易被忽视的优化。实际上,雅虎最佳实践将此作为最重要的优化,请参阅Best Practices for Speeding Up Your Web Site。这是他们的投注实践清单:
    • 最小化HTTP请求
    • 使用内容分发网络
    • 添加过期或缓存控制标头
    • Gzip Components
    • ...(列表实际上很长,只需阅读上面的链接)

现在,在您从多余的点击中尽可能地消除之后,您仍然可以优化实际命中服务器的任何请求。一旦你的ASP代码开始运行,与数据库请求相比,一切都会变得苍白:

  • 减少每页数据库调用次数。显然,可能的最佳优化不是首先向DB提出请求。有人说每次4次读取和1次写入是高负载服务器应该处理的最多,其他人说每页一次数据库调用,还有一次说每页10次调用就可以了。关键在于,总是越少越好,写入的成本远远高于读取。检查您的UI设计,也许在页面一角看不到任何人看到的准确的点击计数......
  • 确保您发送到SQL服务器的每个数据库请求都已优化。查看每个查询计划,确保您有适当的covering indexes,确保不进行任何表扫描,查看您的clustered index design策略,查看所有IO负载,存储设计,等等。真的,没有捷径你可以带她,你必须分析和优化你的数据库,它成为你的chocking点。
  • 消除争用。没有读者等待作家。对于您的堆栈,SNAPSHOT ISOLATION是必须的。
  • 缓存结果。通常这是饼干崩溃。设计一个好的缓存实际上很难实现。我建议你观看Facebook SOCC主题演讲:Building Facebook: Performance at Massive Scale。在幻灯片47的某处,它们显示了典型的内部Facebook API的样子:

cache_get (
  $ids,
  'cache_function',
  $cache_params,
  'db_function',
  $db_params);
从缓存中请求

Everything ,如果没有找到,则从MySQL后端请求。你可能不会以60000 servers想到的开始:)

在SQL Server堆栈上,最佳缓存策略是基于Query Notifications的策略。您可以几乎将其与LINQ ...

混合

答案 1 :(得分:4)

我会将大量流量定义为流量,从而触发资源密集型工作。这意味着,如果一个Web请求触发了多个sql调用,或者它们都计算了带有大量小数的pi,那么它很重。

如果你要返回静态html,那么你的带宽问题比现在的好服务器(或多或少)要处理的问题更多。

无论您是否使用MVC,在优化速度方面,原则都是相同的。

  1. 拥有解耦的架构 通过添加更容易扩展 更多服务器等
  2. 使用存储库 数据检索模式(make 更容易添加缓存)
  3. 缓存数据 查询费用很高
  4. 数据到 写的可以写成 缓存,以便客户端没有 等待实际的数据库 提交
  5. 也可能有更多的基本规则。也许您可以说一下应用程序的体系结构,以及需要计划多少负载?

答案 2 :(得分:0)

MSDN有一些资源。 This particular article已过时,但却是一个开始。

我建议也不要局限于阅读有关MVC堆栈的内容:许多原则都是跨平台的。