1分钟,啥是数据库读写分离架构?

开发 开发工具 数据库运维
数据库读写分离虽然不难,但并不是所有的“数据库扛不住”的场景,都应该用读写分离。今天花1分钟简单介绍下这个场景。

RD:数据量太大,数据库扛不住了,帮忙申请一个从库,读写分离。

DBA:数据量多少?

RD:5000w左右。

DBA:读写吞吐量呢?

RD:读QPS约200,写QPS约30左右。

[[327606]]

额,数据库读写分离虽然不难,但并不是所有的“数据库扛不住”的场景,都应该用读写分离。今天花1分钟简单介绍下这个场景。

什么是数据库读写分离?

一主多从,读写分离,主动同步,是一种常见的数据库架构,一般来说:

  • 主库,提供数据库写服务
  • 从库,提供数据库读服务
  • 主从之间,通过某种机制同步数据,例如mysql的binlog

一个组从同步集群通常称为一个“分组”。

分组架构究竟解决什么问题?

大部分互联网业务读多写少,数据库的读往往最先成为性能瓶颈,如果希望:

  • 线性提升数据库读性能
  • 通过消除读写锁冲突提升数据库写性能

此时可以使用分组架构。

一句话,分组主要解决“数据库读性能瓶颈”问题,在数据库扛不住读的时候,通常读写分离,通过增加从库线性提升系统读性能。

什么是数据库水平切分?

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

  • 每个数据库之间没有数据重合,没有类似binlog同步的关联
  • 所有数据并集,组成全部数据
  • 会用算法,来完成数据分割,例如“取模”

一个水平切分集群中的每一个数据库,通常称为一个“分片”。

水平切分架构究竟解决什么问题?

大部分互联网业务数据量很大,单库容量容易成为瓶颈,如果希望:

  • 线性降低单库数据容量
  • 线性提升数据库写性能

此时可以使用水平切分架构。

一句话总结,水平切分主要解决“数据库数据量大”问题,在数据库容量扛不住的时候,通常水平切分。

我为什么不喜欢读写分离?

对于互联网大数据量,高并发量,高可用要求高,一致性要求高,前端面向用户的业务场景,如果数据库读写分离:

  • 数据库连接池需要区分:读连接池,写连接池
  • 如果要保证读高可用,读连接池要实现故障自动转移
  • 有潜在的主库从库一致性问题
  • 如果面临的是“读性能瓶颈”问题,增加缓存可能来得更直接,更容易一点
  • 关于成本,从库的成本比缓存高不少
  • 对于云上的架构,以阿里云为例,主库提供高可用服务,从库不提供高可用服务

所以,上述业务场景下,建议使用缓存架构来加强系统读性能,替代数据库主从分离架构。

当然,使用缓存架构的潜在问题:如果缓存挂了,流量全部压到数据库上,数据库会雪崩。因此,对缓存,一般也会做水平切分,确保不会同一时间全挂。

总结

  • 读写分离,解决“数据库读性能瓶颈”问题
  • 水平切分,解决“数据库数据量大”问题
  • 对于互联网大数据量,高并发量,高可用要求高,一致性要求高,前端面向用户的业务场景,微服务缓存架构,可能比数据库读写分离架构更合适

【本文为51CTO专栏作者“58沈剑”原创稿件,转载请联系原作者】

戳这里,看该作者更多好文

 

责任编辑:赵宁宁 来源: 51CTO专栏
相关推荐

2009-11-02 18:07:58

Oracle数据库

2022-12-05 07:51:24

数据库分库分表读写分离

2021-05-17 20:13:50

数仓操作型数据库

2019-11-20 10:38:59

MySQLSQL数据库

2009-11-20 18:08:37

Oracle数据库

2019-07-05 07:50:52

数据库空值查询

2019-08-07 07:04:54

内存缓存数据库KV

2018-01-15 05:54:45

数据库读写分离互联网

2018-01-09 18:46:44

数据库架构读写分离

2018-06-26 09:37:07

时序数据库FacebookNoSQL

2022-12-15 09:44:29

数据库利器

2020-07-21 07:42:29

数据库信息技术

2009-11-20 17:06:49

Oracle数据库字符

2023-04-15 20:33:35

图形数据库数据库

2020-01-03 16:30:14

数据库读写分离分库

2018-10-16 16:45:05

数据库读写分离

2016-12-21 15:08:14

数据库垂直拆分

2018-02-24 19:37:33

Java8数据库中间件

2022-03-04 16:06:33

数据库HarmonyOS鸿蒙

2017-03-14 13:12:19

点赞
收藏

51CTO技术栈公众号