数据库读写分离架构,为什么我不喜欢「建议收藏」

数据库读写分离架构,为什么我不喜欢「建议收藏」RD:单库数据量太大,数据库扛不住了,我要申请一个数据库从库,读写分离。DBA:数据量多少?RD:5000w左右。DBA:读写吞吐量呢?RD:读QPS约200,写QPS约30左右。上周在公司听到两个…

	数据库读写分离架构,为什么我不喜欢[数据库教程]

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

DBA:数据量多少?

RD:5000w左右。

DBA:读写吞吐量呢?

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

上周在公司听到两个技术同学讨论,感觉对读写分离解决什么问题没有弄清楚,有些奔溃。

另,对于互联网某些业务场景,并不是很喜欢数据库读写分离架构,一些浅见见文末。

一、读写分离

什么是数据库读写分离?

数据库读写分离架构,为什么我不喜欢
答:一主多从,读写分离,主动同步,是一种常见的数据库架构,一般来说:

  • 主库,提供数据库写服务
  • 从库,提供数据库读服务
  • 主从之间,通过某种机制同步数据,例如mysql的binlog
    一个组从同步集群通常称为一个“分组”。

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

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

  • 线性提升数据库读性能
  • 通过消除读写锁冲突提升数据库写性能
    此时可以使用分组架构。

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

二、水平切分

什么是数据库水平切分?

数据库读写分离架构,为什么我不喜欢
答:水平切分,也是一种常见的数据库架构,一般来说:

  • 每个数据库之间没有数据重合,没有类似binlog同步的关联
  • 所有数据并集,组成全部数据
  • 会用算法,来完成数据分割,例如“取模”
    一个水平切分集群中的每一个数据库,通常称为一个“分片”。

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

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

  • 线性降低单库数据容量
  • 线性提升数据库写性能
    此时可以使用水平切分架构。

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

三、为什么不喜欢读写分离

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

  • 数据库连接池需要区分:读连接池,写连接池
  • 如果要保证读高可用,读连接池要实现故障自动转移
  • 有潜在的主库从库一致性问题

  • 如果面临的是“读性能瓶颈”问题,增加缓存可能来得更直接,更容易一点
  • 关于成本,从库的成本比缓存高不少
  • 对于云上的架构,以阿里云为例,主库提供高可用服务,从库不提供高可用服务

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

当然,使用缓存架构的潜在问题:如果缓存挂了,流量全部压到数据库上,数据库会雪崩。不过幸好,云上的缓存一般都提供高可用的服务。

四、总结

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

你有没有用读写分离,你的思考是什么呢?

希望这一分钟你有收获。
随手转,谢过。

数据库读写分离架构,为什么我不喜欢

原文地址:https://blog.51cto.com/jyjstack/2549517

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
转载请注明出处: https://daima100.com/6623.html

(0)
上一篇 2023-04-06 10:30
下一篇 2023-04-06

相关推荐

  • 将.txt文件的内容导入数据库[通俗易懂]

    将.txt文件的内容导入数据库[通俗易懂]1. 开始→SQLServer2019导入和导出数据 2. 向导页面 点击下一步 3. 选择数据源 数据源 :平面文件源 文件名:点击浏览选择文件所在的链接 区域设置:中文 代码页:这里很重要,之前文

    2023-04-17
    128
  • 数据库-MySQL

    数据库-MySQL数据库-MySQL 一日不思量,也攒眉千度。 简介:数据库-MySQL。 一、索引 B+ Tree 原理 树简介参考链接:https://www.cnblogs.com/taojietaoge/p/1

    2023-04-19
    152
  • Python中多个条件的if语句写法

    Python中多个条件的if语句写法Python是一种高级语言,拥有灵活的语法和丰富的库,适合各种应用场景。if语句是Python中的基本控制结构之一,用于在满足条件时执行一些操作。在编写复杂的程序时,需要使用多个条件进行判断。本文将介绍Python中多个条件的if语句写法。

    2024-08-07
    25
  • Python字典嵌套: 使用内部字典来组织数据

    Python字典嵌套: 使用内部字典来组织数据Python中有一种非常常用的数据类型——字典(Dictionary),它可以在程序中用来存储和组织数据。字典是由键值对组成的集合,其中每个键都对应一个值。但是有些时候,我们需要在一个字典中存储另外一个字典。这就是字典嵌套。本文将介绍如何使用内部字典来组织数据。

    2024-01-25
    99
  • 错误日志(.BadSqlGrammarException:错误的sql参数异常,明明参数和表中数据都对应上了,其实很简单的错误,秒解决)「建议收藏」

    错误日志(.BadSqlGrammarException:错误的sql参数异常,明明参数和表中数据都对应上了,其实很简单的错误,秒解决)「建议收藏」nested exception is org.springframework.jdbc.BadSqlGrammarException 错误的sql参数异常,明明参数和表中数据都对应上了,其实很简单…

    2022-12-27
    143
  • Python工程师:如何使用UUID生成唯一标识符

    Python工程师:如何使用UUID生成唯一标识符在现代的计算机系统中,唯一标识符用于标识一个对象或实体。通常,唯一标识符用于识别数据库表中的行,文件系统中的文件或目录以及网络中的客户端或服务器。在Python中,一个常见的方式是使用uuid模块生成唯一标识符。

    2024-04-28
    56
  • 用Python判断列表是否相同

    用Python判断列表是否相同列表是Python中最常用的数据类型之一,通常用于存储一组有序的数据。在某些情况下,我们需要判断两个列表是否相同,比如在测试中验证函数的输出是否正确,或者在比较用户提交的数据和标准答案时。本文将介绍如何使用Python判断两个列表是否相同。

    2024-05-13
    53
  • hbase 集群 最少几个节点_hbase集群

    hbase 集群 最少几个节点_hbase集群在HBase1.1.0发布之前,HBase同一集群上的用户、表都是平等的,大家平等共用集群资源。容易碰到两个问题: 一是某些业务较其他业务重要,需要在资源有限的情况下优先保证核心重要业务的正常运行 …

    2023-02-27
    127

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注