关系型数据库的架构演变
-
单机mysql
在低数据量的访问时,我们使用单个的MySQL就可以满足我们的数据访问要求。
比如个人博客系统,后台管理系统等,我们同时在线使用的人数不多并且并发访问数量极低。
而且我们存储的数据量少,一个简单的MySQL服务已经足够满足我们的需求。
-
缓存+业务垂直分离
随着访问量的增加,高并发下的数据访问量使得我们单一的应用无法支撑高流量下的并发访问,同时,对数据库的频繁访问导致数据库性能满足不了业务需求。
为了解决应用程序上的瓶颈,将业务进行
模块化开发
,分别部署在不同的服务器上对业务需求进行支撑。对于数据库的性能瓶颈,采用在数据库层之上加上一层缓存
(Memcached)
,这样的方式来减少对数据库的访问次数。从而实现数据访问性能的提高。 -
主从数据库,读写分离
但是缓存的方式下数据库的性能瓶颈并没有本质上解决,它充其量只是减少对数据库的直接访问量。
为了真正的解决这一问题,我们利用主从复制的方法,设置一个
主数据库(master)
和一个从数据库(slave)
,其中主数据库只负责写操作,从数据库只负责读操作,主从数据库之间的同步使用主从复制方法来进行实现,它会有一定时间的延迟,对于实时响应要求高的业务不是很友好。同时,为了进一步的增强数据库层次的性能,还可以配置
一主多从数据库
,这个时候需要利用负载均衡对读操作进行转发。也可以配置多主多从数据库
,因为有多个地方可以执行写操作,需要配置我们的分布式锁来保证我们数据的一致性。而对于主从数据库的实现,我们可以采用配置多数据源的方法来进行实现,但同时,也有第三方MyCat等为我们提供了方便的操作,我们只需要配置MyCat并且应用中的数据库配置为Mycat的地址,就可以忽略主从数据库之间的差异,这个时候(对于我们来说和传统一个数据库无区别)。
-
分库分表,MySQL集群
在读写分离之后,数据库的性能确