读写分离 & 缓存 & 水平切分

一、读写分离

1、什么是读写分离

读写分离其实就是将数据库分为了主从库,一个主库用于写数据,多个从库完成读数据的操作,主从库之间通过某种机制进行数据的同步,是一种常见的数据库架构。

  • 主库:提供写服务的数据库。

  • 从库:提供读服务的数据库。

  • 主从之间:通过某种机制同步数据,比如MySQLbinlog

  • 分组:一组从同步集群。

2、分组架构解决的问题

大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用分组架构(即读写分离架构)。用一句话概括,读写分离是用来解决数据库的读性能瓶颈的,在数据库无法胜任当前的读要求时,就可以进行读写分写,通过增加从库线性提升系统读性能。

3、读写分离的不适用性

在互联网的应用场景中,常常数据量大、并发量高、高可用要求高、一致性要求高,如果使用读写分离,就需要注意这些问题:

  • 数据库连接池要进行区分,哪些是读连接池,哪个是写连接池,研发的难度会增加。

  • 为了保证高可用,读连接池要能够实现故障自动转移。

  • 潜在主从一致性问题。

二、缓存

缓存,也是互联网中常常使用到的一种架构方式,同读写分离不同,读写分离是通过多个读库,分摊了数据库读的压力,而存储则是通过缓存的使用,减少了数据库读的压力。他们没有谁替代谁的说法,但是,如果在缓存读写分离之间进行二选一时,还是应该首先考虑缓存

缓存的应用场景:

  • 如果面临的是读性能瓶颈问题,增加缓存可能来的更直接,更容易一点。

  • 关于成本,从库的成本比缓存高了很多。

  • 对于云上的架构,主库提供高可用服务,从库不提供高可用服务。

这几类场景就建议使用缓存架构来加强系统读性能,代替数据库主从分离架构。当然缓存架构的潜在问题:如果缓存挂了,流量全部压到数据库上,数据库会雪崩;同样缓存会有缓存穿透、缓存一致、缓存雪崩、缓存并发等问题。

三、水平切分

1、水平切分概念

水平切分,也是一种常见的数据库架构,一般来说:

  • 每个数据库之间没有数据重合,没有类似binlog同步的关联。

  • 所有数据并集,组成全部数据。

  • 会用某些算法,来完成数据分割,例如取模运算。

一个水平切分急群众的每个数据库,通常称为一个分片。

2、水平切分解决的问题

大部分的互联网业务,数据量都非常大,单库容量最容易成为瓶颈,当单库的容量成为了瓶颈,我们希望提高数据库的写性能,降低单库容量的话,就可以采用水平切分了。

四、小结

  1. 读写分离,解决数据库读性能瓶颈问题;

  2. 水平切分,解决数据库数据量大问题;

  3. 对于大数据量、高并发量、高可用要求、高一致性的互联网业务,微服务缓存架构,可能比读写分离架构更加合适。

原文地址:https://www.cnblogs.com/horacle/p/15701287.html