高可用/性能
文章目录
- 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)全同步复制
是指当主库执行完一个事务,然后所有的从库都复制了该事务并成功执行完才返回成功信息给客户端。
因为需要等待所有从库执行完该事务才能返回成功信息,所以全同步复制的性能必然会收到严重的影响。
主从复制原理
- master创建一个dump线程向slave推送binlog。
- slave连接到master的时候,会创建一个IO线程接收binlog,并记录到relay log中继日志中。
- slave再开启一个sql线程读取relay log事件并在slave执行,完成同步。
- slave记录自己的binglog。

3.主从延时原因
一个服务器开放N个链接给客户端来连接的,这样有会有大并发的更新操作, 但是从服务器的里面读取 binlog 的线程仅有一个,当某个 SQL 在从服务器上执行的时间稍长 或者由于某个 SQL 要进行锁表就会导致,主服务器的 SQL 大量积压,未被同步到从服务器里。这就导致了主从不一致, 也就是主从延迟。
4.主从延时解决办法
(1)数据同步写方案
主从数据同步方案,一般采用异步方式同步给从库。可将其修改为同步方案,主从同步完成,主库上的写才能返回。这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。
- 业务系统发起写操作,数据写主库
- 写请求需要等待主从同步完成才能返回
- 数据读从库,主从同步完成就能读到最新数据

缺点:
- 由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。对于在线业务,可能无法接受。
(2)选择性强制读主
对于需要强一致的场景,将其读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。

缺点:
- 浪费了另一个数据库,增加主库的压力
(3)中间件选择路由法
这种方案需要使用一个中间件(淘宝TDDL,ShardingSphere client版本),所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。

- 写请求,中间件将会发到主库,同时记录一下此时写请求的 key( 操作表加主键等)
- 读请求,如果此时 key 存在,将会路由到主库
- 一定时间后( 经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库
缺点:
- 系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。
(4)缓存路由法
这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。

- 写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时
- 读请求首先判断缓存是否存在
- 若存在,代表刚发生过写操作,读请求操作主库
- 若不存在,代表近期没发生写操作,读请求操作从库
缺点:
- 这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。
相关文章:
高可用/性能
文章目录1.数据库系统架构发展(1)单库架构(2)主备架构(3)主从架构2.主从复制主从同步配置主从复制模式(1)异步复制(2)半同步复制(3)全…...
PriorityQueues优先队列
优先队列优先队列(priority queue)是计算机科学中的一类抽象数据类型。优先队列中的每个元素都有各自的优先级,优先级最高的元素最先得到服务;优先级相同的元素按照其在优先队列中的顺序得到服务。优先队列通常使用“堆”…...
arm 堆栈
先转一篇 stm32 堆和栈(stm32 Heap & Stack)【worldsing笔记】_stm32堆栈_slj_win的博客-CSDN博客 关于堆和栈已经是程序员的一个月经话题,大部分有是基于os层来聊的。 那么,在赤裸裸的单片机下的堆和栈是什么样的分布呢?以下是网摘&…...
leetcode-面试题 05.02. Binary Number to String LCCI
Description Given a real number between 0 and 1 (e.g., 0.72) that is passed in as a double, print the binary representation. If the number cannot be represented accurately in binary with at most 32 characters, print “ERROR”. Example1: Input: 0.625Outpu…...
C语言函数阐述
C 函数 函数是一组一起执行一个任务的语句。每个 C 程序都至少有一个函数,即主函数 main() ,所有简单的程序都可以定义其他额外的函数。 您可以把代码划分到不同的函数中。如何划分代码到不同的函数中是由您来决定的,但在逻辑上,…...
二叉树——把二叉搜索树转换为累加树
538. 把二叉搜索树转换为累加树 链接 给出二叉 搜索 树的根节点,该树的节点值各不相同,请你将其转换为累加树(Greater Sum Tree),使每个节点 node 的新值等于原树中大于或等于 node.val 的值之和。 提醒一下…...
Java使用DFA算法实现敏感词过滤
1 前言敏感词过滤就是你在项目中输入某些字(比如输入xxoo相关的文字时)时要能检测出来,很多项目中都会有一个敏感词管理模块,在敏感词管理模块中你可以加入敏感词,然后根据加入的敏感词去过滤输入内容中的敏感词并进行…...
UG NX二次开发(C#)-外挂 - 配置文件说明(.men文件/.rtb文件/.trb文件)
文章目录 1、前言2、UG NX菜单说明2.1UG NX的Ribbon样式说明2.2 UG NX的Ribbon配置文件3、外挂的加载配置文件说明3.1 创建配置文件夹3.2 填写.men文件3.2 填写.rtb文件3.2 填写.tbr文件4、将外挂加载到UG NX菜单中5、重启UG NX,就可以实现外挂加载了。1、前言 UG NX二次开发…...
Web3中文|日本元宇宙经济“狂飙”
2月27日,三菱、富士通和其它科技公司发布关于建立“日本元宇宙经济区”的协议,表示将联手从角色扮演游戏的角度创建开放的元宇宙基础设施,以推动日本的Web3战略。据了解,日本一直在努力将Web3技术纳入其国家议程,去年1…...
@Autowired和@Resource到底有什么区别
Autowired 和 Resource 都是 Spring/Spring Boot 项目中,用来进行依赖注入的注解。它们都提供了将依赖对象注入到当前对象的功能,但二者却有众多不同,并且这也是常见的面试题之一,所以我们今天就来盘它。 Autowired 和 Resource 的…...
2023年最新阿里云服务器价格表出炉(精准收费标准及配置价格表)
阿里云在全球率先宣布了基于 Intel Ice Lake 处理器的第七代云服务器ECS,性能提升的同时降低了报价,性价比更高了。进入2023年阿里云服务器价格依然是大家关心的问题,事实上阿里云服务器租用价格和最新收费标准都可以通过官方云服务器计算器来…...
ElasticSearch - SpringBoot整合ES实现文档的增删改操作
文章目录1. ElasticSearch和kibana的安装和配置2. SpringBoot 项目环境搭建3. 创建索引4. 索引文档5. 更新文档6. 删除文档https://www.elastic.co/guide/en/elasticsearch/reference/current/search-your-data.htmlhttps://www.elastic.co/guide/cn/elasticsearch/guide/curre…...
嵌入式 LVGL移植到STM32F4
目录 LVGL简介 1、特点 2、LVGL的硬件要求 3、相关网站 4、LVGL源码下载 5、LVGL移植要求 5.1 移植过程-添加源码 2、更改接口文件 3、显示实现 4、添加外部中文字体的方法 5、编译下载后有几种情况 6、调用显示 6、GUI-Guider使用 6.1 安装软件 6.2 使用…...
VSCode——SSH免密登录
文章目录本地PC端(一般为Windows)1. 检查自己是否已经生成公钥2. 配置VScode的SSH config远程服务器端1. 服务器新建授权文件2. 赋权限3. 重启远程服务器的ssh服务最全步骤:【设置ssh免密不起作用?彻底搞懂密钥】vscode在remote S…...
python未来应用前景怎么样
Python近段时间一直涨势迅猛,在各大编程排行榜中崭露头角,得益于它多功能性和简单易上手的特性,让它可以在很多不同的工作中发挥重大作用。 正因如此,目前几乎所有大中型互联网企业都在使用 Python 完成各种各样的工作࿰…...
webpack基本使用和开发环境配置
目录 1 webpack 基本使用 01 webpack 简介 02 webpack 初体验 2 webpack开发环境配置 03 打包样式资源 04 打包html资源 05 打包图片资源 06 打包其他资源(以打包icon为例) 07 devServer 08.开发环境配置 1 webpack 基本使用 由于笔记文档没有…...
3.2 http协议
一.HTTP协议1.概述是计算机网络的核心概念,是一种网络协议网络协议种类非常多,其中IP,TCP,UDP...其中还有一个应用非常广泛的协议.HTTPHTTP协议是日常开发中用的最多的协议HTTP处在TCP/IP五层协议栈的应用层HTTP在传输层是基于TCP的,(http/1 HTTP/2是基于TCP,最新版本的HTTP/3是…...
页面访问升级出错怎么解决
相信大家在访问网站的时候时常会遇到页面访问界面升级,暂时不可能进行访问操作,可能遇到这种情况很多小伙伴们都不知道怎么版,其实互联网网页在正常使用过程中是不会出现这种问题的。那么如果遇到页面访问界面升级怎么办?页面访问界面升级通…...
leetcode 181. 超过经理收入的员工
SQL架构 表:Employee ---------------------- | Column Name | Type | ---------------------- | id | int | | name | varchar | | salary | int | | managerId | int | ---------------------- Id是该表的主键。 该表的…...
任务类风险漏洞挖掘思路
任务类风险定义: 大部分游戏都离不开任务,游戏往往也会借助任务,来引导玩家上手,了解游戏背景,增加游戏玩法,提升游戏趣味性。任务就像线索,将游戏的各个章节,各种玩法,…...
Flyway实战:从零到一构建数据库版本管理流水线
1. 为什么你的项目需要Flyway 第一次接触数据库版本管理这个概念时,我正面临一个典型的开发困境:团队里有5个开发人员在同时修改数据库结构,每次发布新版本都像在玩俄罗斯轮盘赌——永远不知道谁会忘记执行哪个SQL脚本。直到生产环境出现数据…...
VSCode搭配MinGW-w64打造Windows下C++开发环境:从安装、配置到调试一条龙
VSCode搭配MinGW-w64打造Windows下C开发环境:从安装、配置到调试一条龙 在Windows平台上进行C开发,选择合适的工具链往往能事半功倍。虽然Visual Studio提供了完整的解决方案,但许多开发者更青睐轻量级、高度可定制的VSCode编辑器。本文将带你…...
Jetson Nano到手第一步:保姆级系统烧录与基础环境配置(避坑指南)
Jetson Nano开箱实战:从零构建AI开发环境的完整指南 刚拆封的Jetson Nano开发板躺在桌面上,这块仅有信用卡大小的设备却蕴含着强大的边缘计算能力。对于初次接触嵌入式AI开发的工程师而言,如何正确完成系统初始化往往成为第一个技术门槛。本文…...
2026年小白程序员必看:5项吃香AI技能,助你薪资翻倍(建议收藏)
2026年小白程序员必看:5项吃香AI技能,助你薪资翻倍(建议收藏) 随着AI大模型重构职场规则,掌握相关技能将极大提升工作效率和薪资。本文为小白和程序员推荐了5项最吃香的AI技能:RAG、提示词工程、多模态大模…...
ChatGPT对话导出工具:一键保存结构化对话记录到Markdown
1. 项目概述:一个帮你“打包”对话记录的工具如果你经常使用ChatGPT的网页版进行深度对话,无论是用它来辅助编程、学习新知识,还是进行创意写作,你可能会遇到一个共同的痛点:那些充满价值的对话记录,被“锁…...
工业 DC-DC 性能深度对比解析|钡特电源 DF1-05D15LS 与 E0515S-1WR3 封装互通
在工业控制、仪器仪表、低功耗传感设备等场景中,1W 级隔离工业 DC-DC 模块因体积小、功率密度高、适配性强,成为硬件研发工程师常用的直流电源模块核心器件。随着国产化进程加速,国产工业 DC-DC 模块在性能、稳定性、性价比上逐步实现突破&am…...
百度网盘直链解析终极指南:5分钟告别限速下载的完整教程
百度网盘直链解析终极指南:5分钟告别限速下载的完整教程 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 还在为百度网盘那令人崩溃的下载速度而烦恼吗?…...
Go语言json-repair库:高效修复LLM输出的非标准JSON
1. 项目概述:当LLM的JSON输出“不听话”时,我们怎么办? 如果你正在开发基于大语言模型(LLM)的应用,无论是智能客服、代码生成器,还是复杂的多智能体工作流,那么你肯定遇到过这个让人…...
HFSS新手避坑指南:手把手教你仿真带孔金属箱的屏蔽效能(附模型文件)
HFSS新手避坑指南:手把手教你仿真带孔金属箱的屏蔽效能 第一次打开HFSS时,那种面对复杂界面的茫然感我至今记忆犹新。作为电磁仿真领域的标杆工具,HFSS的强大功能背后是陡峭的学习曲线。特别是当老板突然扔给你一个带孔金属箱的屏蔽效能评估任…...
自托管项目管理与知识库系统:基于文件存储的轻量级解决方案
1. 项目概述与核心价值最近在折腾个人知识库和项目管理工具,发现很多现成的方案要么太重,要么太轻,要么就是配置起来让人头大。直到我遇到了一个叫bicodeurubu/pm-wiki-v2的项目,它给我的第一印象是“清爽”。这其实是一个基于现代…...
