Rem*_*anu
9
有许多原则适用于任何网站,与底层堆栈无关:
- 使用HTTP缓存工具.一个是用户代理缓存.其次,整个Web主干充满了可以缓存您的请求的代理,因此可以充分利用它.一个甚至落在你的服务器上的请求将为你的负载增加0,你不能优于那个:)
- 结果如上所述,使用CDN(Content Delivery Network,如CloudFront)作为静态内容.可以从CDN提供CSS,JPG,JS,静态HTML和更多页面,从而从Web请求中保存Web服务器.
- 第一点的第二个推论:为动态内容添加过期缓存提示.即使像10秒这样的短缓存生命周期也会节省大量的命中,而这些命中将由客户端和服务器之间的所有代理服务.
- 最小化HTTP请求的数量.看似基本,但可能是最容易被忽视的优化.事实上,雅虎最佳实践将此作为最重要的优化,请参阅加速您的网站的最佳实践.这是他们的投注实践清单:
- 最小化HTTP请求
- 使用内容分发网络
- 添加Expires或Cache-Control标头
- Gzip组件
- ...(列表实际上很长,只需阅读上面的链接)
现在,在您从多余的点击中尽可能地消除之后,您仍然可以优化实际命中服务器的任何请求.一旦你的ASP代码开始运行,与数据库请求相比,一切都会变得苍白:
- 减少每页数据库调用次数.显然,可能的最佳优化不是首先向DB提出请求.有人说每次4次读取和1次写入是高负载服务器应该处理的最多,其他人说每页一次数据库调用,还有一次说每页10次调用就可以了.关键在于,总是越少越好,写入的成本远远高于读取.检查您的UI设计,也许页面一角的点击计数没人看到不需要那么准确...
- 确保您发送到SQL服务器的每个数据库请求都已优化.查看每个查询计划,确保您有适当的覆盖索引,确保您不进行任何表扫描,检查您的聚集索引设计策略,检查所有IO负载,存储设计等.真的,没有捷径你可以带她,你必须分析和优化你的数据库,这将是你的chocking点.
- 消除争用.没有读者等待作家.对于你的堆栈,SNAPSHOT ISOLATION是必须的.
- 缓存结果.通常这是饼干崩溃.设计一个好的缓存实际上很难实现.我建议你观看Facebook SOCC主题演讲:建立Facebook:大规模的表现.在幻灯片47的某处,它们显示了典型的内部Facebook API如何:
.
cache_get (
$ids,
'cache_function',
$cache_params,
'db_function',
$db_params);
Run Code Online (Sandbox Code Playgroud)
从缓存中请求所有内容,如果没有找到,则从MySQL后端请求.你可能不会开始认为60000服务器 :)
在SQL Server堆栈上,最佳缓存策略是基于查询通知的策略.你几乎可以将它与LINQ混合......