服务型网站应注意哪些优化
1 数据库链接
在讨论数据库链接前,我们首先思考一下数据库链接为我们做了些什么?首先,大家都知道数据链接需要调的函数是mysql_init(host, user, pwd, option_param)。因此数据库链接首先需要链接对应的soket,另外还需要为我们验证用户和密码的有效性,这是需要代价的。另外数据库链接为我们做的事远不止这些,比如字符集、链接属性等都会为我们做好,这些同样是需要代价的。所以,在使用数据库的时候尽量避免多次链接是有意义的。最后还有一点不容乎视,就是处理数据库的并发问题,如果N个处理同时对数据库进行链接,这对数据库是有一定压力的。虽说数据库可以配置最大链接数,但链接需要代价,另外没有对链接进行缓存,因此会有一批请求会被拒绝掉。
由如上讨论,我们可以看出设计一个维持数据数链的的池,是十分必要的。因此,系统的架构可能有如下变化:

这样,proxy维持N个与数据库的链接,处理上层应用的请求,就可以很好地解决以上所提出的问题了。
2 数据库分库分表
如果服务器处理的数据量特别大,用户请求也特别多,那处多台服务器及多台数据库服务器共同对外提供服务的方案就必然的浮出水面。一个好的这种处理策略可以即便捷又快速地处理用户请求,给用户一个很好的体验。
分库分表的策略有两方面决定:1 数据量的大小;2 服务器限制。如果服务器数量有限但数据量比较大,那么适当的分表,可以处理请求对单个表的压力。另外在查询的时候也可以减小扫表的代价。如果服务器资源充足,则可以考虑多分库的方案,这样可以每台服务器安置一个或N个库,可也有效地分散对数据库的压力。
分库分表可以有很多方案,比如HASH方案,比如取模或数学分式等,但一个重要原则就是近量使数据均匀地落在每个数据库和表上。
3 数据库查询优化
对数据库的查询的优化也有许多方面,首先要想到的就是sql语句的优化。基本的原则就是前面的结果集越小,那么该方案越有利于效率的提高。第二点就是数据库索引的使用,可以很好使用数据库索引,可以使对数据很方便地定位结果集。但是索引不可烂用,因为索引过多了,每次更新的时候需要同时更新索用,那么更新的代价就大了。因此这里需要有一个均衡点,要好好把握。对不敏感或只读数据进行缓存,也是一个很好的方案。
4 数据主从应用
mysql对数据主从的支持比较好,也很方便搭建,因此可以从主从方面考虑个别的应用。比如可以写操作在主库操用,个别的写操作在从库来操用。但需要注意的是,主从可能有时差,所以更新后立即查的时候,需要特别小心。
5 资源管理
对于有些静态资源,采用特殊管理的方式也可以提高服务器的效率。比如对于gif,swf,jpg,js,css等资源根本不用到apache处理,直接使用lighttpd反回当前资源即可。资源不仅仅包含这个具休的资源,其实url的管理和服务器的处理时间同样是一种资源。
6 缓存
对一些数据的使用缓存技术是很明智的。比如在apache + memcached + mysqld是一种很好的组合。其实很多东西可以用来缓存,比如用户登录信息等。但缓存不是所有信息都可缓存,比如对机密或实时要求较强的数据就不适合用来缓存。
7 稳定性
后台架构做的再好,前台页面做的体验再美,没有一个稳定的服务是不可取的。记的前两天一个朋友的网站出了问题,竟然两天后才恢复,这对用户的伤害实在是太大了。
做服务的,稳定压倒一切!
thx
张久安
If you enjoyed this post, make sure you subscribe to my RSS feed!









No Comments, Comment or Ping
Reply to “服务型网站应注意哪些优化”
You must be logged in to post a comment.