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

    文章

    8988

    浏览量

    85131
  • 数据库
    +关注

    关注

    7

    文章

    3754

    浏览量

    64255
  • MySQL
    +关注

    关注

    1

    文章

    799

    浏览量

    26413
收藏 人收藏

    评论

    相关推荐

    适用于MySQL的dbForge架构比较

    dbForge Schema Compare for MySQL 是一种工具,用于轻松有效地比较和部署 MySQL 数据库结构和脚本文件夹差异。该工具提供了 MySQL 数据库架构中所
    的头像 发表于 10-28 09:41 135次阅读
    适用于<b class='flag-5'>MySQL</b>的dbForge<b class='flag-5'>架构</b>比较

    配置MySQL主从复制和读写分离

    配置MySQL主从复制和读写分离
    的头像 发表于 10-23 11:44 281次阅读
    配置<b class='flag-5'>MySQL</b>主从复制和<b class='flag-5'>读写</b><b class='flag-5'>分离</b>

    嵌入式Hypervisor:架构、原理与应用 阅读体验 +分离内核的嵌入式Hyperviso

    读后感:分离内核与SKH架构的深刻洞察 在阅读了关于分离内核和SKH(分离内核Hypervisor)的详细阐述后,我深感这一技术在现代计算机系统,尤其是嵌入式系统和安全关键系统
    的头像 发表于 10-12 17:06 246次阅读
    嵌入式Hypervisor:<b class='flag-5'>架构</b>、原理与应用 阅读体验 +<b class='flag-5'>分离</b>内核的嵌入式Hyperviso

    SSD基本架构

    接口,常用的SATA、SAS和PCIe。 SSD控制器:负责主机到后端介质的读写访问和协议转换,表项管理、数据缓存及校验等,是SSD的核心部件。国科微星空企业级系列SSD采用自主研发的第四代12nm工艺NANDXtra控制器。 DRAM:FTL表项和数据的缓存,以提供数
    的头像 发表于 08-14 09:05 256次阅读

    读写分离怎么保证数据同步

    读写分离是一种常见的数据库架构设计,用于提高数据库的并发处理能力。在读写分离架构
    的头像 发表于 07-12 09:49 950次阅读

    读写分离解决什么问题

    读写分离是一种数据库架构设计策略,主要解决数据库在高并发场景下的读写性能瓶颈问题。在这种架构
    的头像 发表于 07-12 09:47 444次阅读

    MySQL的整体逻辑架构

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

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

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

    智能座舱的基本架构哪些

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

    oracle和mysql语法区别大吗

    Oracle和MySQL是两种不同的关系型数据库管理系统(RDBMS)。虽然它们都是遵循SQL标准,但在语法和特性上仍存在一些区别。以下是对Oracle和MySQL语法区别的详细说明: 数据类型
    的头像 发表于 12-06 10:26 1098次阅读

    mysqldecimal的用法

    MySQL的DECIMAL是用于存储精确数值的数据类型。DECIMAL可以存储固定精度和小数位数的值。在MySQL,DECIMAL数据类型
    的头像 发表于 11-30 10:45 1018次阅读

    mysql的数据大于千万怎么办

    MySQL的数据量达到千万级别时,为了保证数据库的性能和稳定性,需要采取一系列优化措施和架构设计。在本文中,我将详细介绍如何应对大规模数据的挑战,包括硬件、数据库设计、索引优化、分区和分布式
    的头像 发表于 11-23 14:41 1509次阅读

    Python如何使用MySQL 8.2读写分离

    如您所知,MySQL 8.2 发布了最令人期待的功能之一:读写分离
    的头像 发表于 11-22 09:39 491次阅读
    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 940次阅读

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

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