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、对比位点等方式,判断从数据库是否和主数据库一致。

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

    关注

    13

    文章

    10097

    浏览量

    90906
  • 数据库
    +关注

    关注

    7

    文章

    3993

    浏览量

    67745
  • MySQL
    +关注

    关注

    1

    文章

    897

    浏览量

    29241
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    工业数据台支持接入MySQL数据库吗

    工业数据台完全支持接入MySQL数据库 ,且通过数据同步、集成与治理等技术手段,能够充分发挥MySQL在数据存储与事务处理方面的优势,同时弥补其在数据分析与共享能力上的不足,具体分析如下: 技术
    的头像 发表于 12-04 11:23 199次阅读
    工业数据<b class='flag-5'>中</b>台支持接入<b class='flag-5'>MySQL</b>数据库吗

    医院随访管理系统源码,三级随访系统源码,Java+Springboot,Vue,Ant-Design+MySQL5

    Java版随访系统源码,医院随访管理系统源码,三级随访系统源码,B/S前后端分离架构,自主版权,落地案例。 技术框架:Java+Springboot,Vue,Ant-Design+MySQL5 开发
    的头像 发表于 11-08 14:48 209次阅读
    医院随访管理系统源码,三级随访系统源码,Java+Springboot,Vue,Ant-Design+<b class='flag-5'>MySQL</b>5

    CentOS 7下MySQL 8双主热备高可用架构全解

    Centos7部署MySQL8+keepalived双主热备(含Keepalived配置与GTID同步优化方案) 架构拓扑原理 GTID同步 VIP 192.168.1.100 MySQL主节点1
    的头像 发表于 08-12 17:08 618次阅读

    MySQL的组成结构与结构化查询语言详解

    MySQL作为世界上最流行的开源关系型数据库管理系统,采用了分层架构设计
    的头像 发表于 07-14 11:21 434次阅读

    介绍三种常见的MySQL高可用方案

    方案——MHA(MySQL High Availability Manager)、PXC(Percona XtraDB Cluster) 和 Galera Cluster。我们将从原理、架构、优势和局限性等角度对比这三种方案,并探讨它们在实际应用
    的头像 发表于 05-28 17:16 1006次阅读

    MySQL数据库采集网关是什么?什么功能?

    MySQL数据库采集网关是一种用于连接、采集、处理并传输数据到MySQL数据库的中间设备或软件系统,通常部署在数据源与MySQL数据库之间,作为数据交互的桥梁。它在工业物联网、智能楼宇、能源管理等
    的头像 发表于 05-26 15:20 467次阅读

    MySQL数据库是什么

    开发、企业应用和大数据场景。以下是其核心特性和应用场景的详细说明: 核心特性 关系型数据库模型 数据以 表(Table) 形式组织,表由行(记录)和列(字段)构成。 通过 主键、外键 实现表间关联,支持复杂查询和事务处理。 示例 :电商系统,用户表、订单表、商品表
    的头像 发表于 05-23 09:18 924次阅读

    MySQL简介与理论基础

    MySQL是世界上最流行的开源关系型数据库管理系统之一,广泛应用于网站、应用程序和企业级系统。它采用客户端/服务器架构,支持多用户环境,并基于SQL(结构化查询语言)标准。
    的头像 发表于 05-21 10:43 504次阅读

    使用插件将Excel连接到MySQL/MariaDB

    ,可以快速地将数据从 MySQL 或 MariaDB 加载到 Excel,立即从数据库刷新 Excel 工作簿的数据,编辑这些数据,并将它们保存回 MySQL。之后您能够像使用的 Excel 工作表一样
    的头像 发表于 01-20 12:38 1144次阅读
    使用插件将Excel连接到<b class='flag-5'>MySQL</b>/MariaDB

    MySQL数据库的安装

    MySQL数据库的安装 【一】各种数据库的端口 MySQL :3306 Redis :6379 MongoDB :27017 Django :8000 flask :5000 【二】MySQL 介绍
    的头像 发表于 01-14 11:25 866次阅读
    <b class='flag-5'>MySQL</b>数据库的安装

    构建数据库解决方案,基于华为云 Flexus X 实例容器化 MySQL 主从同步架构

    前言**** 华为云 Flexus X 实例,融合柔性算力与智能调度,为数据库解决方案带来全新突破。采用容器化 MySQL 主从同步架构,实现数据高效备份与读写分离,保障业务连续性与数
    的头像 发表于 01-07 17:22 956次阅读
    构建数据库解决方案,基于华为云 Flexus X 实例容器化 <b class='flag-5'>MySQL</b> 主从同步<b class='flag-5'>架构</b>

    windows服务器备份mysql脚本

    :天,超过就删除backup_keep_time = 30# 此列表的数据库将不会备份,下面是默认的基础数据库。ignore_database = ['Database','information_schema','mysql','sys','perf
    的头像 发表于 01-02 09:14 670次阅读

    华为云 Flexus X 实例评测使用体验——MySQL 安装全过程 +MySQL 读写速度测试

    试一下 MySQL 数据库的读写效率如何。使用 Python 语言来测试写入与读取速度。 购买服务配置 这里使用的是 4vCPUs 与 14GIB 的内存,镜像选择的是默认的公共镜像。这个镜像两个选项,一个是
    的头像 发表于 12-31 10:38 820次阅读
    华为云 Flexus X 实例评测使用体验——<b class='flag-5'>MySQL</b> 安装全过程 +<b class='flag-5'>MySQL</b> <b class='flag-5'>读写</b>速度测试

    华为云 Flexus X 实例 MySQL 性能加速评测及对比

    基于 sysbench 构造测试表和测试数据 12 3.5 数据库读写性能测试 13 四、业界 U 系列无加速 MySQL
    的头像 发表于 12-25 17:10 867次阅读
    华为云 Flexus X 实例 <b class='flag-5'>MySQL</b> 性能加速评测及对比

    Flexus X 实例搭配华为云 EulerOS,快速部署 MySQL 并执行读写性能测试

    前言 本篇博文将继续对华为云 Flexus 云服务器 X 实例进行 MySQL 相关的实例测评 查看镜像信息 本地连接服务器之后输入指令 lsb_release -a  查看镜像信息 从镜像信息
    的头像 发表于 12-24 12:27 976次阅读
    Flexus X 实例搭配华为云 EulerOS,快速部署 <b class='flag-5'>MySQL</b> 并执行<b class='flag-5'>读写</b>性能测试