Windows平台高性能站点手册
2011-12-13 16:20 莫耶 阅读(447) 评论(0) 编辑 收藏 举报一、 服务
1、 Web服务与数据库服务分离
2、 图片、样式表、JavaScript等静态内容,单独放置在静态服务器上
3、 对Web做负载均衡,提升系统的可用性和可扩展性
a) Microsoft Windows Server NLB(网络负载平衡
参考资料:http://tianzt.blog.51cto.com/459544/163800)
b) Nginx (参考资料:http://www.xueit.com/html/2009-11-11/34-116884196140.html )
Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,兼具负载平衡功能。其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页伺服器中表现较好.目前中国大陆使用nginx网站用户有:新浪、网易、 腾讯,另外知名的微网志Plurk也使用nginx。
Nginx可以处理上万并发,所以绝对是个非常不错的选择。如果网站访问量非常大,可以专门用一台服务器跑Nginx,其它服务器跑网站程序(几台服务器的程序都是一样的),这样负载就没有太大问题,如果再不行,把网站一些栏目做一个2级域名,2级域名同样做负载。
Nginx软件在linux上跑性能比在windows上跑要好,所以做负载可以用linux跑nginx,.net开发的网站放到windows服务器IIS上。
4、 代理服务器(缓存静态内容/容灾/镜像)
a) Squid
Squid是一款流行的代理服务器和Web缓存服务器。Squid有广泛的用途,从作为网页服务器的前置cache服务器缓存相关请求来提高Web服务器的速度,到为一组人共享网络资源而缓存万维网,域名系统和其他网络搜索,到通过过滤流量帮助网络安全,到局域网通过代理上网。Squid主要设计用于在Unix一类系统运行。
b) Nginx
Nginx做为HTTP服务器,有以下几项基本特性:
1.处理静态文件,索引文件以及自动索引;打开文件描述符缓冲;
2.无缓存的反向代理加速,简单的负载均衡和容错。
Nginx在功能和性能上全面超越了Squid。
c) Lighttpd (参考资料: http://spiritfrog.iteye.com/blog/600229 )
如其名,Lighttpd是一款轻量级的Web服务器软件。
适用场景:在不考虑搭建流媒体服务器的情况下,搭建一个视频播放之用的http server。
二、 数据存储
a) 拥有一名对特定数据库系统通晓的DBA:
一行SQL语句能跑通和能跑得很快,是有很大区别的。
例如,DBA会告诉你,在存储过程中使用sp_executesql 而不是直接写SQL语句跑作业,能提高100倍以上的速度。如下范例:
--直接查询,使用聚集索引查找
SELECT * FROM dbo.test WHERE id=345632;
--使用参数化SQL 执行,避免意外的表扫描
DECLARE @i int;
SET @i = 845632;
DECLARE @SQL NVARCHAR(MAX);
SET @SQL=N'SELECT * FROM dbo.test WHERE id = @i';
EXEC sp_executesql @SQL,N'@i int',@i;
b) 列加上索引(聚集索引 和 非聚集索引,
参数资料: http://www.cnblogs.com/qqq88zz/archive/2011/05/17/2048300.html)
c) 数据库分区分表,散列(垂直、水平分割,散列,
参考资料:http://blog.csdn.net/dongxiaohui2008/article/details/6583798)
d) 减少锁的发生(行级别控制,
参考资料:http://blog.csdn.net/king_idea8848/article/details/4674664)
e) 永无止境的优化(查询优化、索引优化、算法优化
参考资料:http://www.cnblogs.com/chuncn/archive/2009/04/21/1440233.html )
三、 缓存
高并发的快速解决方案,有时,就是缓存。针对动态数据进行缓存,在数据库和Web服务之间,建立起一道屏蔽,在第一次请求过后,不再请求数据库,尽量避免因高并发带来的数据库死锁情况发生。缓存服务器配合前面介绍的负载与代理软件,能很好的为Web应用减压。
a) memcached分布式缓存快取系统
(配置资料:http://www.cnblogs.com/luluping/archive/2009/01/14/1375453.html)
Memcached是由Danga Interactive开发的,高性能的,分布式的内存对象缓存系统,用于在动态应用中减少数据库负载,提升访问速度。
b) Apache Cassandra
Apache Cassandra是一套开源分布式Key-Value存储系统。它最初由Facebook开发,用于储存特别大的数据。Facebook目前在使用此系统。
主要特性:
分布式
基于column的结构化
高伸展性
c) Mongo、Redis、VelocityCache…
四、 站点
a) 参照Yahoo前端优化原则去做(
参考资料:http://www.websbook.com/Operate/Seo/yahoowzdyhyz_20529.html)
1、尽量减少HTTP请求个数——须权衡
2、使用CDN(内容分发网络)
3、为文件头指定Expires或Cache-Control,使内容具有缓存性。
4、避免空的src和href
5、使用gzip压缩内容
6、把CSS放到顶部
7、把JS放到底部
8、避免使用CSS表达式
9、将CSS和JS放到外部文件中
10、减少DNS查找次数
11、精简CSS和JS
12、避免跳转
13、剔除重复的JS和CSS
14、配置ETags
15、使AJAX可缓存
16、尽早刷新输出缓冲
17、使用GET来完成AJAX请求
18、延迟加载
19、预加载
20、减少DOM元素个数
21、根据域名划分页面内容
22、尽量减少iframe的个数
23、避免404
24、减少Cookie的大小
25、使用无cookie的域
26、减少DOM访问
27、开发智能事件处理程序
28、用<link>代替@import
29、避免使用滤镜
30、优化图像
31、优化CSS Spirite
32、不要在HTML中缩放图像——须权衡
33、favicon.ico要小而且可缓存
34、保持单个内容小于25K
35、打包组件成复合文本
b) 为IIS搭配一个唤醒模块,解救不幸的第一个访客(参考资料:
http://www.cnblogs.com/shanyou/archive/2010/12/21/1913199.html)
c) 将静态服务器配置为Cookieless
五、 测试
针对性能和应用,选择不同的工具做压力测试(参考资料:
http://www.cnblogs.com/junzhongxu/archive/2010/03/02/1676508.html)
欢迎转载,但必须保留文章的署名老莫的帐本子
并保留此链接:http://moye.cnblogs.com/
如有疑问请发邮件:moyerock@gmail.com