0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

MYSQL中读写分离有什么作用及基本架构说明

Wildesbeast 来源:今日头条 作者:会点代码的大叔 2020-02-05 14:40 次阅读

现在绝大部分软件项目,都会使用到关系型数据库,比如MySQL、Oracle、DB2等等,目前这些数据库的单机性能已经是不断优化和提高了,但是随着数据增长的速度和并发访问量的增加,在某些公司、某些场景下,单机数据库已经很难满足业务的需要了,所以必须考虑数据库集群的方式来提高系统的可用性;最常见的两种方法:

分库分表:把数据分散到不同的数据库上,每台数据库中存储的数据是不相同的(这里先不考虑每个库做备份或读写分离);分库分表既可以分散数据库访问的压力,也可以分散数据存储的压力;但是使用分库分表方案的时候,会带来扩容、事务、关联查询等问题和难点,具体这里就不展开讲了。

读写分离:将数据库读操作和写操作分散到不同的节点上,通常是一台数据库做写操作,1到N台做读操作;读写分离的架构,每一台数据中的数据是相同的(这里先忽略延迟的问题),所以只分散了数据库访问的压力,并没有分散数据存储的压力;我们这里主要讲一讲读写分离。

读写分离基本架构

MySQL读写分离的基本架构,可以参考下图:

如上图,读写分离实现的基本步骤是:

数据库服务器搭建多台,一主N从(N大于等于1);

主数据库只负责写操作,从数据库只负责读操作;

主数据库复制数据到从数据库上;

客户端写操作路由到主数据库上,读操作路由到从数据库上。

读写分离还有另外一种架构,就是在MySQL数据库和客户端之间,增加一层中间代理层,客户端只连接代理, 由代理根据请求类型,把请求分发到不同的数据库上:

第一种架构,整体架构比较简单直接,性能会稍微高一些,但是如果才用直连的方式,客户端可能会稍微麻烦一些(通常需要引入一些组件,负责管理数据库);

第二种架构,对客户端比较友好,因为客户端只需要和代理交互,并不用关注数据库的具体信息;但是因为多了一层代理,多多少少会对性能有一定的影响。

读写分离带来的好处

读写分离结构中,会有两台甚至更多台数据库,这种冗余的设计,可以提高数据的安全性和系统的可用性;就算是在分库分表的架构中,每一台子库,也可以一主多备的部署方式;

读写分离更多的时候使用在读操作远远大于写操作的场景下,这样可以保证写操作的数据库承受更小的压力,也可以缓解X锁和S锁争用;

服务器数量的增加,意味着可以有效地利用多台服务器的资源;读操作被分摊,提高了系统的性能;

如果写操作比读操作多,或者相近,可以采用双主相互复制的架构。

读写分离会带来的问题

之前的文章,我也反复强调过,任何的架构、软件、框架、组件...在解决一部分问题的时候,一定会带来其他的问题;读写分离最大的一个问题就是,数据从主复制到从的过程中,可能会存在延迟的,如果客户端在执行完一个读操作后,立刻从存库中查询的话,可能会读取到旧数据的情况(我们不断优化,也只能缩短这个时间,并不能完全消除掉这个时间)。

那么针对这个问题,有哪些处理方法呢?

根据具体场景进行评估,是否可以接收这个延迟(这好像是一句废话,但是大多数业务场景,是可以接收这点儿延迟的);

对于实时性要求很高的场景(查询的数据必须是最新的结果),将这些请求强制路由到主库上;

执行完写操作之后,在读操作发生之前,让中间的时间变长(也就是从业务操作角度来做一些控制,不一定操作完了立刻查询);

判断主备无延迟,可以通过判断seconds_behind_master参数、对比GTID、对比位点等方式,判断从数据库是否和主数据库一致。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 服务器
    +关注

    关注

    12

    文章

    8129

    浏览量

    82570
  • 数据库
    +关注

    关注

    7

    文章

    3592

    浏览量

    63382
  • MySQL
    +关注

    关注

    1

    文章

    776

    浏览量

    26012
收藏 人收藏

    评论

    相关推荐

    MySQL的整体逻辑架构

    支持多种存储引擎是众所周知的MySQL特性,也是MySQL架构的关键优势之一。如果能够理解MySQL Server与存储引擎之间是怎样通过API交互的,将大大有利于理解
    的头像 发表于 04-30 11:14 81次阅读
    <b class='flag-5'>MySQL</b>的整体逻辑<b class='flag-5'>架构</b>

    查询SQL在mysql内部是如何执行?

    我们知道在mySQL客户端,输入一条查询SQL,然后看到返回查询的结果。这条查询语句在 MySQL 内部到底是如何执行的呢?本文跟大家探讨一下哈,我们先来看下MySQL本架构~
    的头像 发表于 01-22 14:53 171次阅读
    查询SQL在<b class='flag-5'>mysql</b>内部是如何执行?

    智能座舱的基本架构有哪些

    智能座舱是指通过集成信息技术,将智能化设备和系统应用于飞机座舱的一种新的航空技术发展趋势。其目的是提升航空安全、提高飞行效率、增强乘客体验、降低维护成本等。智能座舱的基本架构包括以下几个方面: 机载
    的头像 发表于 12-19 10:34 917次阅读

    Python如何使用MySQL 8.2读写分离

    如您所知,MySQL 8.2 发布了最令人期待的功能之一:读写分离
    的头像 发表于 11-22 09:39 282次阅读
    Python如何使用<b class='flag-5'>MySQL</b> 8.2<b class='flag-5'>读写</b><b class='flag-5'>分离</b>?

    MySQL数据库基础知识

    的基础知识,包括其架构、数据类型、表操作、查询语句和数据导入导出等方面。 MySQL 数据库架构 MySQL 数据库由多个组件组成,包括服务器、存储引擎和客户端等。
    的头像 发表于 11-21 11:09 584次阅读

    介绍4种常用的MySQL同步ES方案

    在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。
    的头像 发表于 11-20 10:45 325次阅读
    介绍4种常用的<b class='flag-5'>MySQL</b>同步ES方案

    阐述DDR3读写分离的方法

    DDR3是2007年推出的,预计2022年DDR3的市场份额将降至8%或以下。但原理都是一样的,DDR3的读写分离作为DDR最基本也是最常用的部分,本文主要阐述DDR3读写分离的方法。
    的头像 发表于 10-18 16:03 586次阅读
    阐述DDR3<b class='flag-5'>读写</b><b class='flag-5'>分离</b>的方法

    windows环境下mysql的安装

    [root @localhost ~] # yum -y install mysql-community-server 如果命令行出现如下图片语句,则说明MySQL安装完成 2 设置 首先用以下命令启动
    的头像 发表于 10-08 15:29 288次阅读
    windows环境下<b class='flag-5'>mysql</b>的安装

    有没有mcu远程读写服务器上mysql数据库方法?

    有没有mcu通过控制wifi芯片远程读写服务器上mysql数据库?相应的mcu和wifi模块的数据手册及控制方法?
    发表于 09-28 06:02

    SQLite和MySQL区别

    Web应用、电商平台等。 2.架构差异 MySQL采用C/S架构,是典型的客户端/服务器模式。MySQL服务器是一
    的头像 发表于 08-28 17:09 2695次阅读

    MySQL服务器优化LSI MegaRAID CacheCade Pro 2.0读写缓存软件和固态硬盘(SSD)

    电子发烧友网站提供《MySQL服务器优化LSI MegaRAID CacheCade Pro 2.0读写缓存软件和固态硬盘(SSD).pdf》资料免费下载
    发表于 08-21 14:19 0次下载
    <b class='flag-5'>MySQL</b>服务器优化LSI MegaRAID CacheCade Pro 2.0<b class='flag-5'>读写</b>缓存软件和固态硬盘(SSD)

    MySQL到ES的4种常用数据同步方案

    在实际项目开发中,我们经常将 MySQL 作为业务数据库,ES 作为查询数据库,用来实现读写分离,缓解 MySQL 数据库的查询压力,应对海量数据的复杂查询。 这其中有一个很重要
    发表于 08-09 11:36 368次阅读
    <b class='flag-5'>MySQL</b>到ES的4种常用数据同步方案

    labview与mysql连接的步骤说明~

    1、服务器安装Mysql、ODBC Data Sources(32bit) 2、客户端安装ODBC Data Sources(32bit) 3、服务器改表法允许远程访问
    发表于 06-13 10:55

    什么是车辆分离

    车辆分离器的作用
    的头像 发表于 05-23 09:40 791次阅读
    什么是车辆<b class='flag-5'>分离</b>器

    一条SQL如何被MySQL架构中的各个组件操作执行的?

    简单用一张图说明下,MySQL 架构有哪些组件,接下来给大家用 SQL 语句分析
    的头像 发表于 05-12 14:41 367次阅读
    一条SQL如何被<b class='flag-5'>MySQL</b><b class='flag-5'>架构</b>中的各个组件操作执行的?