系统架构解析-读写分离,水平切分及缓存架构对比
最近在研究一些系统架构方案,学习到读写分离的时候,对于读写分离应用场景有了一些自己的理解:
一. 读写分离
1. 什么是数据库读写分离
首先我们看一个读写分离架构图:
读写分离就是:一主多从,读写分离,主动同步,是一种常见的数据库架构,一般来说:
- 主库:提供数据库写服务;
- 从库:提供数据库读服务;
- 主从之间:通过某种机制同步数据,比如MySOL的binlog
2. 分组架构能够解决的问题
在大部分互联网业务场景中,读操作的比例远远大于写操作,数据库的读往往最先成为数据库的新能瓶颈,如果想要完成下面的目标:
- 线性提升数据库读性能;
- 通过消除读写锁冲突提升数据库写性能
二. 水平切分
1. 水平切分
水平切分,也是一种常见的数据库架构,一般来说:
- 每个数据库之间没有数据重合,没有类似binlog同步的关联;
- 所有数据并集,组成全部数据;
- 会用某些算法,来完成数据分割,例如取模运算
2. 水平分片架构解决的问题
大部分互联网业务数据量很大,单库容量容易称为瓶颈,如果希望解决下面的问题:
- 线性降低单库数据容量;
- 线性提升数据库写性能
三 读写分离的不适用性
对于互联网,大数据量、高并发量、高可用性、高一致性、前段面向用户的业务场景,如果数据库读写分离:
- 数据库连接池需要区分:读连接池、写连接池;
- 如果要保证高可用性,读连接池要实现故障自动转移;
- 有潜在的主从一致性问题。
四. 缓存架构
缓存的架构图如上图,应用场景包括:
- 如果面临的是“读性能瓶颈”问题,增加缓存可能来的更直接,更容易一点;
- 关于成本,从库的成本比缓存高了很多;
- 对于云上的架构,主库提供高可用服务,从库不提供高可用服务
五.小结
- 读写分离,解决“数据库读性能瓶颈”问题;
- 水平切分,解决“数据库数据量大”问题;
- 对于互联网大数据量、高并发量、高可用要求、高一致性、前段面向用户的应用场景,微服务缓存架构,可能比读写分离架构更加合适。