返回顶部
首页 > 资讯 > 数据库 >数据库读写分离的坑有哪些
  • 883
分享到

数据库读写分离的坑有哪些

2024-04-02 19:04:59 883人浏览 独家记忆
摘要

这篇文章主要讲解了“数据库读写分离的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库读写分离的坑有哪些”吧!前言事情是这样的,刚入职的时候接到了

这篇文章主要讲解了“数据库读写分离的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库读写分离的坑有哪些”吧!

前言

事情是这样的,刚入职的时候接到了这样的一个业务需求:

每个支付通道支付失败的时候都会返回特定的错误码,业务内部需要将通道特定的错误码转义成内部的错误码,这样对外就可以统一返回我们自己的错误码。

这个需求其实不难,当时设计的系统架构如下:

数据库读写分离的坑有哪些

新增规则的流程简单分为三步:

  1.  业务人员通过管理后台新增映射规则

  2.  数据库新增、修改这条映射规则

  3.  删除缓存

这里之所以增加缓存,是因为这个场景每次支付都需要使用,使用缓存可以避免每次都去数据库读取,增加读取速度。

后续支付请求业务流程如下:

数据库读写分离的坑有哪些

数据库读写分离-用户操作

当缓存内映射规则不存在的时候,将会查询数据库,然后加载到缓存中。如果缓存内映射规则已存在,将会直接使用缓存内映射规则。

这个业务流程其实比较简单,当时在测试环境测试也没问题,后续发布线上环境的却碰到奇怪的问题。

「新增规则之后,一段时间内,映射规则并没有生效。查看日志发现,查询数据库的时候,没有数据。」

这就很奇怪了,日志显示新增是成功,但是查询却没有数据。但是过了一段时间,再次查询却又有了数据。

走查了下代码,发现并没有什么问题,第二天上班的时候请教了一下同事,才知道问题的原因:

原来线上的数据库采用主从架构,数据读写分离,数据查询走的是从库。数据写入都是直接操作主库,后续再同步到从库。

「由于数据库同步存在延时,这就导致数据同步的这段时间,主从数据将会不一致,从库无法查询到最新的数据。」

如果你之前的数据库系统架构是单库或者主备结构,当你第一次转到数据读写分离架构,这个坑大概率也会踩到。

数据库读写分离的坑有哪些

数据库系统架构发展

下面我们首先了解一下数据库系统架构,最后再来看下如何解决主从同步延时的导致数据不一致。

主备架构

业务发展的前期,数据访问量小,这时我们可以直接采用单库的架构。

数据库读写分离的坑有哪些

不过我们一般不使用的上面的架构,因为存在单点的问题。若数据库出现故障,这段期间业务将会不可用。我们除了等待重启,其他没什么解决办法。

所以我们会增加一个备库,实时同步主库的数据。

数据库读写分离的坑有哪些

主备架构

一旦「主库」出了故障,通过人工的方式,手动的将「主机」踢下线,将「备机」改为「主机」来继续提供服务。

这种架构,部署维护简单,业务开发也无需任何改造。

不过缺点也很明显,备库只有在主库有问题的时候才会被启用,存在一定的资源浪费的情况。

主从架构

随着业务发展,请求量不断变大,数据量也不断变大,业务变得更加复杂,很快数据将会到达瓶颈。

由于大多数业务都是读多写少,所以数据库读的最容易成为系统瓶颈。

这时候我们可以提高读的性能,这时我们的可以采用的方案,增加从实例,主从同步,数据读写分离。

数据库读写分离的坑有哪些

可以看到这个架构与主备没什么区别,主要区别在于主从架构下,从库与主库一样,时刻需要干活,主库提供写服务,从库只提供读服务。

如果后续读的压力还是太大,我们还可以增加从库的数量,水平扩充读的能力。

虽然主从架构帮我们解决读的瓶颈,但是由于主从之间需要数据同步,这天然就存在一定延时。

在这延时窗口期内,从库的读只能读到一个旧数据,这也是上面案例问题的真正的原因。

数据库读写分离的坑有哪些

接下来我们来看下有什么办法可以优化这种情况。

主从延时解决办法

忍受大法

第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~

数据库读写分离的坑有哪些

如果业务对于数据一致性要求不高,我们就可以采用这种方案。

数据同步写方案

主从数据同步方案,一般都是采用的异步方式同步给备库。

我们可以将其修改为同步方案,主从同步完成,主库上的写才能返回。

数据库读写分离的坑有哪些

  1.  业务系统发起写操作,数据写主库

  2.  写请求需要等待主从同步完成才能返回

  3.  数据读从库,主从同步完成就能读到最新数据

这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。

「不过,由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。」

这一点对于现在在线业务,可能无法接受。

选择性强制读主

对于需要强一致的场景,我们可以将其的读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。

数据库读写分离的坑有哪些

这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。

不过这种方案相对于浪费了另一个数据库,增加主库的压力。

中间件选择路由法

这种方案需要使用一个中间件,所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。

数据库读写分离的坑有哪些

这时流程如下:

  1.  写请求,中间件将会发到主库,同时记录一下此时写请求的 key(操作表加主键等)

  2.   读请求,如果此时 key 存在,将会路由到主库

  3.  一定时间后(经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库

这种方案,可以保持数据读写的一致。

但是系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。

缓存路由大法

这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。

数据库读写分离的坑有哪些

这时流程如下:

  1.  写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时

  2.  读请求首先判断缓存是否存在

    1.   若存在,代表刚发生过写操作,读请求操作主库

    2.   若不存在,代表近期没发生写操作,读请求操作从库

这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。

感谢各位的阅读,以上就是“数据库读写分离的坑有哪些”的内容了,经过本文的学习后,相信大家对数据库读写分离的坑有哪些这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

您可能感兴趣的文档:

--结束END--

本文标题: 数据库读写分离的坑有哪些

本文链接: https://lsjlt.com/news/61945.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 数据库读写分离的坑有哪些
    这篇文章主要讲解了“数据库读写分离的坑有哪些”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“数据库读写分离的坑有哪些”吧!前言事情是这样的,刚入职的时候接到了...
    99+
    2024-04-02
  • Mysql数据库读写分离
    (先对数据库操作进行读写分离,使得具有master角色的主服务器主要用于执行写操作,这样就能大大减少主服务器由于读操作而产生的负载过大的问题。读交给slave。对于多台读服务器,还要把读操作的压力分摊到不同...
    99+
    2024-04-02
  • MySQL数据库之读写分离
    一、概述:    MySQL数据库主从结构配置以后,正常情况下数据库的所有读写操作全部都在主数据库上面,从数据库仅仅作为数据备份使用,显然无法有效的使用服务器资源,那...
    99+
    2024-04-02
  • MySQL-数据库读写分离(中)
    ♥️作者:小刘在C站 ♥️个人主页: 小刘主页  ♥️努力不一定有回报,但一定会有收获加油!一起努力,共赴美好人生! ♥️学习两年总结出的运维经验,以及思科模拟器全套网络实验教程。专栏:云计算技术 ♥️小刘私信可以随便问,只要会...
    99+
    2023-08-31
    数据库 mysql sql
  • Amoeba实现数据库读写分离
    一 环境以及软件版本:系统:CentOS Linux release 7.2.1511 (Core)mysql:Server version: 5.6.33Amoeba:amoeba-mysql-3.0.5...
    99+
    2024-04-02
  • 怎么做数据库读写分离
    这篇文章主要讲解了“怎么做数据库读写分离”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“怎么做数据库读写分离”吧!实现方式对于读写分离的使用,主要分为两种方式...
    99+
    2024-04-02
  • ShardingJdbc读写分离的BUG踩坑解决
    目录前言数据库介绍1. 常规写完读2. 在一个 service 里面调用另一个 service3. 新开一个线程去调用 service24. service2 新开一个事务执行前言 ...
    99+
    2024-04-02
  • 配置数据库读写分离服务器
    配置一主一从 主从同步结构,并在客户端测试配置master51> grant all on webdb.* to webuser@"%" identified by &...
    99+
    2024-04-02
  • Mysql数据库读写分离简单配置
    环境:Master:192.168.71.128      mysql-sql-node1Slave:192.168.71.140 &n...
    99+
    2024-04-02
  • 数据库---mysql主从复制读写分离
    http://m.open-open.com/m/lib/view/1413274853450.html 原理及架构分析部署前准备下载好源码包存放位置要与脚本中对应  mysql-5.5...
    99+
    2024-04-02
  • SQL级别数据库读写分离策略
    数据库读写分离是一种常见的数据库优化策略,通过将数据库的读和写操作分别分配到不同的数据库实例上,以提高系统的性能和稳定性。在SQL级别的数据库读写分离策略中,可以通过以下几种方式实现: 主从复制:将数据库实例分为主数据库和从数据库,主数...
    99+
    2024-08-05
    sql
  • Node.js Sequelize如何实现数据库的读写分离
    一、前言 在构建高并发的Web应用时,除了应用层要采取负载均衡方案外,数据库也要支持高可用和高并发性。使用较多的数据库优化方案是:通过主从复制(Master-Slave)的方式来同步数据,再通过读写分离(M...
    99+
    2022-06-04
    如何实现 数据库 Node
  • 数据库读写分离指的是什么意思
    这篇文章主要介绍了数据库读写分离指的是什么意思,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。数据库读写分离的意思是为了确保数据库产品的稳定性...
    99+
    2024-04-02
  • 使用Atles实现MySQL数据库读写分离
    本文主要给大家简单讲讲使用Atles实现MySQL数据库读写分离,相关专业术语大家可以上网查查或者找一些相关书籍补充一下,这里就不涉猎了,我们就直奔主题吧,希望使用Atles实现MySQL数据库读写分离这篇...
    99+
    2024-04-02
  • 如何理解数据库集群读写分离
    本篇内容介绍了“如何理解数据库集群读写分离”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!“灵魂拷问:解决数...
    99+
    2024-04-02
  • 如何理解数据库读写分离架构?
    如何理解数据库读写分离架构?,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。RD:数据量太大,数据库扛不住了,帮忙申请一个从库,读写分离。D...
    99+
    2024-04-02
  • MySQL数据库主从复制与读写分离
    目录一.主从复制主从复制三线程主从复制的过程:主从复制的策略:主从复制高延迟二.读写分离读写分离概念读写分离原因与场景总结一.主从复制        主从复制:在实际的生产中,为了解...
    99+
    2024-04-02
  • 数据库的读写分离能解决什么问题
    数据库的读写分离能解决什么问题,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。有一些技术同学可能对于“读写分离”了解不多,认为数...
    99+
    2024-04-02
  • Redis如何实现数据库读写分离详解
    前言 Redis是一种NoSQL的文档数据库,通过key-value的结构存储在内存中,Redis读的速度是110000次/s,写的速度是81000次/s,性能很高,使用范围也很广。Redis是一个key-...
    99+
    2024-04-02
  • Java数据库读写分离中的数据库中间件DBProxy是怎样的
    Java数据库读写分离中的数据库中间件DBProxy是怎样的,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。前言碎语好久没更博了,今天引用美团技术团队的一篇文章来...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作