zoukankan      html  css  js  c++  java
  • 读写分离 & 缓存 & 水平切分

    一、读写分离

    1、什么是读写分离

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

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

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

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

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

    2、分组架构解决的问题

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

    3、读写分离的不适用性

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

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

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

    • 潜在主从一致性问题。

    二、缓存

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

    缓存的应用场景:

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

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

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

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

    三、水平切分

    1、水平切分概念

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

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

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

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

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

    2、水平切分解决的问题

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

    四、小结

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

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

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

  • 相关阅读:
    [汇编与C语言关系]1.函数调用
    深入理解计算机系统
    设计模式
    深度探索C++对象模型
    More Effective C++
    MySQL必知必会
    数据结构与算法分析
    Java编程思想(后)
    Java编程思想(前十章)
    Java 入门
  • 原文地址:https://www.cnblogs.com/horacle/p/15701287.html
Copyright © 2011-2022 走看看