1. 引言
传统的IOE(IBM,Oracle,EMC)解决方案,使用和扩展的成本越来越高,使得互联网企业不得不思考新的解决方案。开源软件 加廉价的PC Server的分布式架构,利益于社区的支持。在成本节约的同时,也给系统带来了良好的扩展能力,并且由于开源软件的代码透明,使用企业能够以更低的代价定制更符合自身使用场景的功能,以提高系统的整体性能。
Mysql作为传统的关系数据库(RDBMS),Mysql提供了完整的ACID操作,支持丰富的数据类型、强大的关联查询、where语句等,能够非常容易的建立查询索引,执行复杂的内连接、外连接、求和、排序、分组等操作,并且支持存储过程、函数等功能,产品成熟度高,功能强大。对于大多数中小规模的应用来说,关系型数据库拥有强大完整的功能,以及提供的易用性、灵活性和产品成熟度,地位很难被完全替代。但是对于需要应对高并发访问并且存储海量数据的场景来说,出于性能的考虑,不得不放弃很多传统关系型数据库的功能,如:关联查询、事务、数据一致性(由强一致性降为最终一致性);并且由于对数据存储进行拆分,如分库分表,以及进行反范式设计,以提高系统的查询性能,使得我们放弃了关系型数据库大部分原本强大的功能,牺牲了系统的易用,并且使得系统的设计和管理变得更为的复杂。
2. MYSQL扩展
随着互联网行业的高速发展,使得采用IOE等商业存储解决方案的成本不断攀升,越来越难满足企业调整发展的需要;因此,开源的存储解决方案开始受到业界的青睐,并成为互联网企业数据存储的首选方案之一。
以MYSQL为例,作为开源的关系型数据库的典范,越来越广泛地被互联网企业所使用。企业可以根据自身的业务规模和不同阶段,选择采用不同的系统架构,以应对逐渐增长的访问压力和数据量;并且随着业务的发展,需要提前做好系统的容量规划,在系统的处理能力未达到极限时,对系统进行扩容,以免带来损失。
2.1 业务拆分
业务发展初期便于快速迭代,很多应用都采用集中式的架构。但随着业务规模的发展,使用系统变得越来越复杂,越来越难以维护,开发效率越来越低,并且系统的资源消耗也越来越大,通过硬件提升性能的成本也越来越高。因此,系统业务的拆分是在所难免的。
举例来说,假设某家门户网站 ,它包含了新闻,用户,帖子,评论等几大块内容,对于数据库来说,它可能包含这样几张表,如:news,users,posts,comments,如下图所示:
随着业务的不断发展,单个库的访问压力越来越大,因此,不得不对业务进行拆分。每一块业务都使用单独的数据库来进行存储,前端不同的业务访问不同的数据库,这样原本依赖单库的服务,变成4个库同时承担压力,吞吐能力自然提高了。
值得一提的是,业务的拆分不仅仅提高了系统的可扩展性,也带来了开发效率的提升。原来一次简单的修改,工程启动和部署可能需要较长的时间,更别说开发测试了。随着系统的拆分,单个系统复杂度降低,减轻了应用多个分支开发带来的分支合并冲突解决的麻烦,不仅大大提高了开发测试的效率,同时也提升了系统的稳定性。
2.1 复制策略
当然架构变化的同时,业务也在不断地发展,可能很快就会发现,随着访问量的不断的增加,拆分后的某个库压力越来越大,马上就会遇到性能的瓶颈,数据库地架构不得不再次进行变更,这时可以使用MYSQL的Replication复制策略对系统进行扩展。
通过数据库的复制策略,可以将一台MYSQL数据库服务器中的数据复制到其它MYSQL数据库服务器上。当各台数据库服务器上都包含相同的数据时,前端应用通过访问MYSQL集群中任意一台服务器,都能够读取到相同的数据,这样每台MYSQL服务器所需要承担的负载就会大降低,从而提高整个系统的承载能力,达到扩展的目的。