- 论坛徽章:
- 0
|
本帖最后由 yanyangtian4502 于 2012-01-17 23:07 编辑
基本可以从以下几个方面进行考虑:
1.如何使得服务器更快的处理请求
2.如何使得响应更快的发送到客户端
3 减少不必要的请求
首先我们从站点本身的设计来看:
1.如何使得服务器更快的处理请求:那么就要充分的利用服务器的每一点资源:内存,CPU,缓存,线程,数据库
对于内存:因为程序是用Java写的,那么就需要注意:
a. java对象的回收与释放,不要认为这不是问题,一般站点,常常有很多的对象提供功能,加上10000个对象,不多吧,现在假设,每次请求,都需要产生1000个新的临时对象处理这个请求(其余的9000个对象是所有请求都要使用的),假设每个对象占1k,1000个就约等于1M,也就说,每次请求,需要产生1M的对象内存,如果访问量就是千万级别,想想看,吓人吧。很多人认为java有垃圾回收机制,不用管,能不管吗?
b. 注意系统资源的使用。站点免不了要去操作文件,线程等系统的一些资源,那么,使用完之后,要注意释放,一是为了避免其他请求等待,也是使得内存快速回收。
c. 在使用cookie和session之前,要算笔账:性能和安全的。如果真要使用session,就要考虑很多的问题,举个数据,大家就明白了:一般session的有效时间是20mins(可以自己设置了),假设每个用户在站点停留10min,不过分吧,买票嘛,总的看看,输入信息吧。那么用户的session存活期就是30min了。
假设每秒100个请求访问站点,而每个用户发送5个请求,这个时候,站点就是100/5,每秒20个用户访问站点。假设那么,在session存活期内(30min),站点的session个数就是:60*30*20=36000个,想想看,即使每session只保存1k的数据,也是36M,这还是只有100请求的情况,如果请求是千万级别,想想看。
对于CPU:不要认为服务器CPU牛X,就随便搞。注意的请求很多:
a. 考虑多线程的使用,不要没事就开线程。线程开启需要CPU分配,调度,管理啊!
b.不要没事就try..catch到处搞。异常捕捉需要遍历调用堆栈的,那个效率~~~。
c.加密解密要注意个度,因为这些算法消耗内存和CPU,也需要CPU大量的计算
d.不要频繁读模板,该缓存的就缓,不要总是拼接,替换,要注意缓冲池的使用。
e.正则表达式要注意使用,要使用编译后的,最好是编译后缓存起来,下次直接使用。正则表达式也是一种语言,需要分法,词法分析,很复杂的,懂编译原理应该明白这个道理。
f. 注意CPU喜欢减法操作,考虑用位操作替换浮点操作,不要认为是小事,千万级别问题就大了。
...
然后我们从运维方面看:
写累了,歇一会在写
随便写写,一大堆。 |
|