合理利用现有技术构建高性能Web应用,兼为这两天的战帖添把火

这两天的战帖不少,包括dudu的

满园尽是503,记曾经的一次IIS 7性能考验和
压榨机器,Hack,设计极限强度的网络应用以及
对话网友 - TCP一万连接系统设计这些文章,引发不少园友的争论。

纯粹的技术争论是很好的事情,所以发此文添把火。由于这三篇文章皆和高性能Web应用或者网络引用相关,遂抛砖引玉,谈谈自己的见解。

其一、windows服务器性能堪忧

windows服务器的性能在很长时间都被人诟病,但是自2003以后我就放弃了,不知道2008的性能是不是有了质的改变,就ms坚定支持者老赵同志的意见看来说是有了非常显著的改善,这点上如果我能够申请到校园推广计划的免费2008的key就装一个来试试,到现在我已经彻底放弃了任何盗版软件了,作为一个软件行业的业内人士,我唾弃任何软件盗版以及使用盗版软件的行为。现在我的观点依旧基于windows2003的服务器,但是根据dudu同学的post看来IIS7的性能依旧堪忧,由于dudu没有给出具体的日志数据,所以根据其描述一个存在于淘宝某网店引用的图片就造成了大面积503错误的情况看来,IIS7和nginx比起来性能还远远未够班啊。微软也在使用其他公司提供的放DDOS的服务,而这些服务都构建在linux之上,可见linux是构建高性能网络多么明智的选择

 

其二、构建高性能web应用的原则

由此引申出来的一个问题,设备有限,资金有限,如何构建高性能的Web应用?

根据个人经验我认为如果做到以下几点应该能够保证基本的高可访问度,当然欢迎对此有更丰富经验的大牛们提供更加权威和专业的意见和建议:

动静分离

动静分离能够很好的解决博客园这次遇到的问题,而最终dudu所选择的解决方式也是实现动静分离。所谓动静分离就是将动态请求和静态的html,图片,脚本,css的访问分离开,因为静态文件很少改变,可以通过设置长缓存时间和采用高性能web服务器的方式来优化,同时在真实的web访问中静态文件的访问请求是动态请求的N倍,所以将静态文件和动态请求放到一起处理会降低动态请求的处理效率

合理缓存

网站的数据要有合理的缓存策略,其中包括动态访问的缓存以及静态文件的缓存策略,比如可以通过给所有的静态文件请求后面加上版本号来控制静态文件的缓存,这样当没有变化的时候不会重复请求传输静态文件(tornado内置了这个功能,非常的好用)。

 

优化进程和线程的数量,规避不必要的性能开销

服务器的CPU是有限的,并不是线程越多进程越多就跑得越快,所以不要盲目的迷信多线程的作用,nginx是很好的例子。一般来说工作进程和cpu核数相等的效率较高

 

负载均衡

当单台机器无法支撑的时候不要死撑,合理利用负载均衡来分担负载,服务器在100%负载下运用并不会比50%负荷下运行多一倍的处理量。

 

减少数据库连接数,合理复用数据库连接

哪怕是在文档里明确说明基于多线程处理,无需在意连接池的mysql,在其应对大量的连接开启关闭请求的时候仍然会力不从心,实践证明如此,所以不要频繁开启关闭数据库连接是合理的,当然有连接池的支持当然无须担心这个问题了。

其三、如何合理利用现有技术条件改善web应用性能

回到问题的关键部分,如果我在这里鼓吹.NET不行了,大家换其他技术吧,肯定会遭到大家板砖拍死,而且对于博客园这样的站点也不是短时间内就能换平台的,所以为了避免无谓的争端,所以我想谈谈在立足现有条件的情况下如何改善Web应用的性能。

首先,建议所有的网站都在前端加上反向代理,自己架设也好,租用其他公司的服务也好(微软就租用了其他公司的服务),squid或者nginx,个人倾向于nginx,好配置,好管理,性能霸道,借用绝世好bra里的一句台词,在你的动态应用down掉前,nginx是不会down的。

在配置反向代理的时候将所有的静态请求从IIS里分流出来,

其次,在动态应用里加入Memcached之类的缓存,dotnet也建议使用,如果你对dotnet自身的缓存,页面缓存,局部缓存很了然,那么也是可以的,总之有缓存好过没缓存,如果你不是乱用缓存的话。

合理配置iis的工作进程数量和回收时间,一般来说四核的机器就指定4个工作进程(这个数值没有经过严格的论证,有待商榷)。

 

最后,欢迎大家勇于尝试linux,现在的linux已经非常方便管理,且性能优秀,并且是免费得到的,不存在任何版权问题。windows不是不优秀,只不过没有优秀到我必须还钱去买它而已

ps,我的开源软件清单

操作系统1 unbuntu10.04

操作系统2 笔记本附带的xp(这个不存在版权问题)

dotnet的开发用vs2008 express系列

python开发用ulipad+spe(我把测试paypal的时候存上面的一个美刀捐给spe的作者,算是测试了支付)

ubuntu下通过apt获取了所有的软件,自动下载,不会在下载站中乱七八糟病毒。

xp下的开源软件和免费的软件也很多,建议大家不要去用破解版,很多破解版里饱含病毒和恶意软件

你可能感兴趣的:(合理利用现有技术构建高性能Web应用,兼为这两天的战帖添把火)