浅谈服务器压力解决方案

优化服务器性能,从后往前说归根结底不外乎以前几种情况:

  1. 优化数据库
  2. 优化代码
  3. 使用静态数据

下面就分别做下介绍。

一、数据库优化

  1. 尽可能的使用SP,而不是让sql语句裸奔;
  2. 表结构设计要合理,起码要遵守三范式;
    数据库设计三范式:
    第一范式:原子性。表中不能套表
    第二范式:有主键
    第三范式:引用通过主键.
  3. 合理地设计索引,正确地使用索引;
  4. 对于超极大表(千万级别)最好采用分区表的方式存放,Oralce、SqlServer和Mysql都支持。

二、业务代码优化

  1. 减少数据库往返,
    数据库连接是很重要且宝贵的资源,尽量避免没调用一次方法就读取一次数据库的情况,别小看这一条,我在项目就看到有同事在一个for循环中都次读取数据库。
    尤其避免绑定的时候都次执行存储过程;
  2. 合理正确的使用缓存,通过全局变量来保存一些设定,或是页面级缓存、站点级别缓存来减少服务器压力;
    如果是大内存服务器,我见过最大96G内存的服务器,可以把一些重要数据放在内存中,利用Nosql做成内存缓存,当然这是另一个话题了;
  3. 多用Ajax和客户端js、html代码,少用服务器控件,减少刷新和生成冗余的viewstate;
  4. 采用好的数据结构和算法;
    哈系类性能最好,查找的复杂度是O(1),例如Dictionary<K,V>
    二叉树查找复杂度O(logn),排序O(n*logn),List和ArrayList自带的排序速度接近O(n*logn),
    数组类的线性查找O(n),如果你用冒泡排序O(n*n),那么你不是优秀的程序员。
    StringBuilder 性能好于 string+=,不过提升的有限,不是本质的数量级别的提升。 
  5. 及时关闭非托管资源;
    除了上面提到的数据库connection,文件IO等也要注意。

三、使用静态数据

  1. 使用静态数据也很重要,可以提升速度2个数量级(百倍),例如门户网站、大型网站的首页,引用由特定服务生成的静态数据(js、txt、html等)速度会很快;
  2. 图片、文件、数据服务器分流,可以提升1个数量级(十倍)
    web服务器1台或多台;
    图片服务器1台或多台;
    文件服务器1台或多台;
    数据库服务器1台或多台;
  3. CDN
posted on 2013-09-29 22:48  Frank.Fan  阅读(2969)  评论(2编辑  收藏  举报