当一个web系统的用户不断增长时,其数据量也会随之飞速增长。当数据量达到一定级别后,如数据表已达亿或十亿级别,系统会涉及到一些容量、性能以及分布式方面的问题。此时如在使用Oracle,它也会出现瓶颈,如逻辑读写非常高、CPU一度飙升到四五十、对数据请求不断延时(体现在TPS和QPS不断下降)、数据容量的扩展性差等。
使用MySQL集群是一个很好的解决办法,因为这样,通过线性地增加机器就可以满足使用要求。将Oracle的数据拆分到MySQL集群上。这样的一个过程涉及到分库分表操作。有水平拆分和垂直拆分2种,一般是使用水平拆分,业务性较强的数据可使用垂直拆分,视数据的特点而定。使用的工具推荐使用阿里的Cobar产品。
提供多种数据源供系统使用,也是一种提高系统数据性能的手段。可以根据业务数据的特点,把数据存储在不同的数据源。如关系性强的数据储存传统的关系型数据库里,其他数据存储在KV-Store或NoSQL系统中,可达到数据分布的合理性。这种多存储方案是与系统的业务有着紧密关系的。
缓存系统在整个系统架构中的地位还是相当高的,完善的缓存结构是提高系统性能的利器。缓存是分级别的,从用户发起HTTP请求,到最后访问数据库,都可以在这个过程中设置缓存,包括图片的缓存、静态页面的缓存、动态页面的缓存、JS和CSS文件的缓存以及数据库的数据缓存。缓存系统分为前端缓存和后端缓存,前端缓存的命中率一般都很高,后端的缓存为分Local Cache和Remote Cache。那些不经常变化的数据往往是重点缓存对象,如用户的性别、生日、身高等。而web系统中,缓存的操作往往是把动态页面静态化,以及数据库层自带的缓存功能。缓存系统要关注的问题主要是:缓存的对象、缓存的生命周期、缓存的命中率。
原文:http://www.cnblogs.com/soodo/p/4045428.html