高可用/性能

news2024/11/28 4:52:19

文章目录

    • 1.数据库系统架构发展
      • (1)单库架构
      • (2)主备架构
      • (3)主从架构
    • 2.主从复制
      • 主从同步配置
      • 主从复制模式
        • (1)异步复制
        • (2)半同步复制
        • (3)全同步复制
      • 主从复制原理
    • 3.主从延时原因
    • 4.主从延时解决办法
      • (1)数据同步写方案
      • (2)选择性强制读主
      • (3)中间件选择路由法
      • (4)缓存路由法

1.数据库系统架构发展

(1)单库架构

在这里插入图片描述
缺点:

  • 若数据库出现故障,这段期间业务将会不可用。除了等待重启,没什么解决办法。

(2)主备架构

「主库」出了故障,通过人工方式,手动的将「主机」踢下线,将「备机」改为「主机」继续提供服务。部署维护简单,业务开发也无需任何改造。
在这里插入图片描述
缺点:

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

(3)主从架构

大多数业务都是读多写少,数据库读最容易成为系统瓶颈。为提高读的性能,可以增加从实例,主从数据同步,实现读写分离。
在这里插入图片描述

2.主从复制

主从同步配置

https://www.cnblogs.com/SimpleWu/p/10982640.html

主从复制模式

MySQL主从复制模式主要包含:异步复制、半同步、以及全同步复制三种复制模式。

(1)异步复制

MySQL默认复制是异步的,主库在执行完客户端提交的事务后会立即将结果返给给客户端。

MySQL异步复制并不关心从库是否已经接收并处理,这样就会有一个问题,主如果crash掉了,此时主上已经提交的事务可能并没有传到从库上。所以,后面又出来了一个半同步复制。

(2)半同步复制

半同步复制介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relaylog中才返回给客户端。

相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

(3)全同步复制

是指当主库执行完一个事务,然后所有的从库都复制了该事务并成功执行完才返回成功信息给客户端。

因为需要等待所有从库执行完该事务才能返回成功信息,所以全同步复制的性能必然会收到严重的影响。

主从复制原理

  1. master创建一个dump线程向slave推送binlog。
  2. slave连接到master的时候,会创建一个IO线程接收binlog,并记录到relay log中继日志中。
  3. slave再开启一个sql线程读取relay log事件并在slave执行,完成同步。
  4. slave记录自己的binglog。
    在这里插入图片描述

3.主从延时原因

一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取 binlog 的线程仅有一个,当某个 SQL 在从服务器上执行的时间稍长 或者由于某个 SQL 要进行锁表就会导致,主服务器的 SQL 大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。

4.主从延时解决办法

(1)数据同步写方案

主从数据同步方案,一般采用异步方式同步给从库。可将其修改为同步方案,主从同步完成,主库上的写才能返回。这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。

  1. 业务系统发起写操作,数据写主库
  2. 写请求需要等待主从同步完成才能返回
  3. 数据读从库,主从同步完成就能读到最新数据
    在这里插入图片描述

缺点:

  • 由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。对于在线业务,可能无法接受。

(2)选择性强制读主

对于需要强一致的场景,将其读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。
在这里插入图片描述
缺点:

  • 浪费了另一个数据库,增加主库的压力

(3)中间件选择路由法

这种方案需要使用一个中间件(淘宝TDDL,ShardingSphere client版本),所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。
在这里插入图片描述

  1. 写请求,中间件将会发到主库,同时记录一下此时写请求的 key( 操作表加主键等)
  2. 读请求,如果此时 key 存在,将会路由到主库
  3. 一定时间后( 经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库

缺点:

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

(4)缓存路由法

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

  1. 写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时
  2. 读请求首先判断缓存是否存在
    • 若存在,代表刚发生过写操作,读请求操作主库
    • 若不存在,代表近期没发生写操作,读请求操作从库

缺点:

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/382978.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

用spectralayers 简单去一下人声做个伴奏

最近有个同事说有个工作要一个歌的伴奏不会下载问我能不能给下一个。问题是我五音不全,也不咋关注伴奏这方面的事儿,然后巧了,当天晚上就有个网上的大哥在群里聊天的时候说有个去人声比较给力的软件,我马上给要来了。 软件叫啥sp…

【代码随想录训练营】【Day29】第七章|回溯算法|491.递增子序列|46.全排列|47.全排列 II

递增子序列 题目详细:LeetCode.491 注意这道题求的是子序列,而不是子数组,子数组要求其数组是原数组的子集,且元素是连续的,而子序列只需要保证至少有两个元素即可,不需要关系元素是否连续。 所以一开始…

测试人员如何在测试环境数据库批量生成测试数据?方案分享

测试人员为了测试某个特定场景,往往需要在测试环境数据库中插入特定的测试数据来满足需求;性能测试时,常需要在测试环境生成大量可用测试数据来支持性能测试;建设持续集成持续交付体系时,我们往往也需要在测试环境生成…

【网络】套接字 -- TCP

🥁作者: 华丞臧. 📕​​​​专栏:【网络】 各位读者老爷如果觉得博主写的不错,请诸位多多支持(点赞收藏关注)。如果有错误的地方,欢迎在评论区指出。 推荐一款刷题网站 👉 LeetCode刷题网站 文章…

记录一次nginx转发代理skywalking白屏 以及nginx鉴权配置

上nginx代码 #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; …

【2023】某python语言程序设计跟学第二周内容

本文说明: 案例内容为北理工python语言程序设计课程,如有不妥请联系! 目录蟒蛇绘制案例:执行结果:代码分析:举一反三:绘制一个五角星图案执行结果:turtle库根据案例简单说明&#xf…

linux(Centos)安装docker

官网地址:Install Docker Engine on CentOS 首先检查linux系统版本及内核: 安装docker要求系统版本至少为7.x版本,内核至少为3.8以上 cat /etc/redhat-release # 查看系统版本号uname -r #查看linux系统内核 检查系统是否能连上外网&#…

3.基于Label studio的训练数据标注指南:文本分类任务

文本分类任务Label Studio使用指南 1.基于Label studio的训练数据标注指南:信息抽取(实体关系抽取)、文本分类等 2.基于Label studio的训练数据标注指南:(智能文档)文档抽取任务、PDF、表格、图片抽取标注等…

NJU数电实验-1

实验一 选择器 2选1多路选择器 逻辑表达式:y(∼s&a)∣(s&b)y(\sim s\&a)|(s\&b)y(∼s&a)∣(s&b) 逻辑电路: 数据流建模 数据流建模主要是通过连续赋值语句 assign 来描述电路的功能 module m_mux21(a,b,s,y);input a,b,s;…

这是一篇很好的互动式文章,Framer Motion 布局动画

重现framer的神奇布局动画的指南。 到目前为止&#xff0c;我最喜欢 Framer Motion 的部分是它神奇的布局动画–将 layout prop 拍在任何运动组件上&#xff0c;看着该组件从页面的一个部分无缝过渡到下一个部分。 <motion.div layout /> 在这篇文章中&#xff0c;我们…

【测试岗】那个准点下班的人,比我先升职了...

前言 陈双喜最近心态很崩。和他同期一道进公司的陈琪又升了一级&#xff0c;可是明明大家在进公司时&#xff0c;陈琪不论是学历还是工作经验&#xff0c;样样都不如自己&#xff0c;眼下不过短短的两年时间便一跃在自己的职级之上&#xff0c;这着实让他有几分不甘心。 程双…

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut(以及部分正则使用)

linux常用命令介绍 03 篇——常用的文本处理工具之grep和cut&#xff08;以及部分正则使用&#xff09;1 常用命令01篇 和 02篇1.1 Linux命令01篇——Linux解压缩文件常用命令1.2 Linux命令02篇——linux日常常用命令介绍2. 正则表达式2.1 基本定义2.2 正则中常用的元字符3. gr…

【python】异常详解

注&#xff1a;最后有面试挑战&#xff0c;看看自己掌握了吗 文章目录错误分类捕捉异常实例finally的使用捕捉特定异常抛出异常用户自定义异常&#x1f338;I could be bounded in a nutshell and count myself a king of infinite space. 特别鸣谢&#xff1a;木芯工作室 、I…

项目质量管理有哪些不同阶段?其中“质量“指的是什么?

项目质量管理是指在整个项目中管理和保持质量的过程。 "质量 "不是意味着 "完美"&#xff0c;通常更多的是指在整个项目中确保质量的一致性。然而&#xff0c;"质量 "的确切含义取决于客户或利益相关者对项目的需求&#xff0c;因此在每个项目可…

Ubuntu开机自动挂载硬盘

查看挂载信息&#xff0c;命令台输入 df -h能够看到/dev/nvme0n1p2是我们要挂在的硬盘&#xff0c;其路径是/media/lkzcswq/Data 找到要挂载磁盘的UUID sudo blkid /dev/nvme0n1p2观察到这个磁盘的UUID为72922DF0922DBA0D&#xff0c;type为ntfs 4. 编辑/etc/fstab文件 #如…

【服务器数据恢复】VMware虚拟机下的SQL Server数据库数据恢复案例

服务器数据恢复环境&#xff1a; 一台某品牌PowerEdge系列服务器和一台PowerVault系列存储&#xff0c;上层是ESXI虚拟机文件&#xff0c;虚拟机中运行SQL Server数据库。 服务器故障&#xff1a; 机房非正常断电导致虚拟机无法启动。管理员检查虚拟机发现虚拟机配置文件丢失&…

一、Java概述

一、Java概述 1.1 版本 Java SE 标准版&#xff08;核心版本&#xff09;&#xff0c;主要包含Java最核心的库包括&#xff1a;集合&#xff0c;IO&#xff0c;数据库连接、网络编程等 Java EE 企业版&#xff0c;主要用于开发&#xff0c;装配&#xff0c;部署企业级应用包括…

工业机器人编程调试怎么学

很多人觉得工业机器人很难学学&#xff0c;实际上机器人涉及的知识远比PLC要少。现简单说明一下初学者学习工业机器人编程调试的流程&#xff0c;以AUBO机器人为例&#xff1a; 首先我们需要知道工业机器人的调试学起来不难&#xff0c;远比编程更简单&#xff0c;示教器上的编…

基于信息间隙决策理论的碳捕集电厂调度(Matlab代码实现)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…

Golang Map原理(底层结构、查找/新增/删除、扩缩容)

参考&#xff1a; 解剖Go语言map底层实现Go语言核心手册-3.字典 一、Go Map底层结构&#xff1a; Go map的底层实现是一个哈希表&#xff08;数组 链表&#xff09;&#xff0c;使用拉链法消除哈希冲突&#xff0c;因此实现map的过程实际上就是实现哈希表的过程。 先来看下…