读写分离 & 缓存 & 水平切分
1、什么是读写分离
读写分离
其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。
-
主库:提供写服务的数据库。
-
从库:提供读服务的数据库。
-
主从之间:通过某种机制同步数据,比如
MySQL
的binlog
。 -
分组:一组从同步集群。
2、分组架构解决的问题
大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用分组架构
(即读写分离架构
)。用一句话概括,读写分离是用来解决数据库的读性能瓶颈的,在数据库无法胜任当前的读要求时,就可以进行读写分写,通过增加从库线性提升系统读性能。
3、读写分离的不适用性
在互联网的应用场景中,常常数据量大、并发量高、高可用要求高、一致性要求高,如果使用读写分离
,就需要注意这些问题:
-
数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加。
-
为了保证高可用,读连接池要能够实现故障自动转移。
-
潜在主从一致性问题。
二、缓存
缓存,也是互联网中常常使用到的一种架构方式,同读写分离
不同,读写分离
是通过多个读库,分摊了数据库读的压力,而存储则是通过缓存
的使用,减少了数据库读的压力。他们没有谁替代谁的说法,但是,如果在缓存
和读写分离
之间进行二选一时,还是应该首先考虑缓存
。
缓存的应用场景:
-
如果面临的是
读性能瓶颈
问题,增加缓存可能来的更直接,更容易一点。 -
-
对于云上的架构,主库提供高可用服务,从库不提供高可用服务。
这几类场景就建议使用缓存架构来加强系统读性能,代替数据库主从分离架构。当然缓存架构的潜在问题:如果缓存挂了,流量全部压到数据库上,数据库会雪崩;同样缓存会有缓存穿透、缓存一致、缓存雪崩、缓存并发等问题。
三、水平切分
1、水平切分概念
水平切分,也是一种常见的数据库架构,一般来说:
-
每个数据库之间没有数据重合,没有类似
binlog
同步的关联。 -
所有数据并集,组成全部数据。
-
会用某些算法,来完成数据分割,例如取模运算。
一个水平切分急群众的每个数据库,通常称为一个分片。
2、水平切分解决的问题
大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。
四、小结
-
读写分离,解决
数据库读性能瓶颈
问题; -
水平切分,解决
数据库数据量大
问题; -
对于大数据量、高并发量、高可用要求、高一致性的互联网业务,微服务缓存架构,可能比读写分离架构更加合适。