web服务优化感叹

最近在做一些很简单的web请求优化,web端的逻辑非常简单,就是接收用户POST上来的数据,并保存到数据库,和处理用户的GET查询请求。

web服务器:Ubuntu + Lighttpd + fastcgi + django,数据库使用mysql 5.0

为了达到海量用户并发访问的要求,几乎所有代码都尽可能简单地写,参数校验都几乎没有做。连接池、精简版的memcached,精简版的django等等,python的好处就是你可以随便修改任何源代码。

一切似乎都准备就绪,但是最终压力测试的结果令我惊讶,POST的点击率竟然比GET的还要快(1200:800),不太可能吧。尽管我如何调整lighttpd的参数,检测memcached是否生效,都没法找到原因,查询怎么会比插入数据慢呢?

 

看了代码一遍又一遍,不断反复地测试,结果依然是一样。

 

无意中看了一下django的模板语言部分,难道是django的template特别慢?

我们的响应结果有两种格式:json和xml,json是直接使用simplejson生成的,而xml是使用django的模板生成的。

于是我对比了json和xml的测试结果,原来这里就是问题所在,xml的点击率比json的满了近400.

 

终于找到了突破口,于是抛弃了django的模板,我直接用最原始的方式,组装字符串

哇啦啦。。。。用ab测试后,测试结果终于正常了,点击率达到1500。

 

后来冷静想想,django的模板肯定会慢,因为每次xml格式的reponse都会进行一次io操作读取本地模板文件,然后又要执行复杂的模板语言解析,必然速度会慢许多。

 

不要小看一些我们平时看起来不耗时的操作或逻辑代码,通常都是这些不起眼的操作,导致我们的应用的整体性能大大降低。

 

web优化依然还是那么几项:尽量避免复杂逻辑,连接池,cache,还有io操作,就连字符串拼接都要仔细考虑。

 

希望本文对你有用。 ^_^

posted @ 2009-02-03 15:14  MK2  阅读(879)  评论(0编辑  收藏  举报