Mysql主从延时图解方法
作者:人类幼崽养成记 发布时间:2024-01-24 04:26:29
1.忍受 *
第一种解决办法,很简单,无他,不管他,没有读到也没事。这时业务不需要任何改造,你好,我好,她也好~
如果业务对于数据一致性要求不高,我们就可以采用这种方案。
2.数据同步写方案
主从数据同步方案,一般都是采用的异步方式同步给备库。
我们可以将其修改为同步方案,主从同步完成,主库上的写才能返回。
业务系统发起写操作,数据写主库
写请求需要等待主从同步完成才能返回
数据读从库,主从同步完成就能读到最新数据
这种方案,我们只需要修改数据库之间同步配置即可,业务层无需修改,相对简单。
「不过,由于主库写需要等待主从完成,写请求的时延将会增加,吞吐量将会降低。」
这一点对于现在在线业务,可能无法接受。
3.选择性强制读主
对于需要强一致的场景,我们可以将其的读请求都操作主库,这样「读写都在主库」,就没有不一致的情况。
这种方案业务层需要改造一下,将其强制性读主,相对改造难度较低。
不过这种方案相对于浪费了另一个数据库,增加主库的压力。
4.中间件选择路由法
这种方案需要使用一个中间件,所有数据库操作都先发到中间件,由中间件再分发到相应的数据库。
这时流程如下:
写请求,中间件将会发到主库,同时记录一下此时写请求的 key(操作表加主键等)
读请求,如果此时 key 存在,将会路由到主库
一定时间后(经验值),中间件认为主从同步完成,删除这个 key,后续读将会读从库
这种方案,可以保持数据读写的一致。
但是系统架构增加了一个中间件,整体复杂度变高,业务开发也变得复杂,学习成本也比较高。
5.缓存路由 *
这种方案与中间件的方案流程比较类似,不过改造成本相对较低,不需要增加任何中间件。
这时流程如下:
写请求发往主库,同时缓存记录操作的 key,缓存的失效时间设置为主从的延时
读请求首先判断缓存是否存在
若存在,代表刚发生过写操作,读请求操作主库
若不存在,代表近期没发生写操作,读请求操作从库
这种方案相对中间件的方案成本较低,但是呢我们此时又引入一个缓存组件,所有读写之间就又多了一步缓存操作。
忍受 *
数据库同步写方案
选择性强制读主
中间件选择路由法
缓存路由 *
来源:https://blog.csdn.net/yao583224426/article/details/122217533
猜你喜欢
- Mac 下 Flask 框架 workon命令找不到 ---- 最终解决方案(详解具体实现操作过程中遇到的坑)2018年08月17日 00:
- json和dictpython中的dict类型要转换为json格式的数据需要用到json库:import json <json>
- 用python做大型工程时,经常会出现import问题。比如,当你import另一个py文件时,这个py不存在于你的运行路径下,便会报错。大
- os:windows前提:Python,selenium,IEDriverServer.exe,ie浏览器首先安装Python2.7安装成功
- ini文件即Initialization File初始化文件,在应用程序及框架中常作为配置文件使用,是一种静态纯文本文件,使用记事本即可编辑
- 说明define function,calculate the input parameters and return the result
- Python 是一个美丽的语言,可以激发用户对它的爱。所以如果你试图加入程序员行列,或者你有点厌倦C++,Perl,Java 和其他语言,我
- 在python中,通过如下两个模块可以实现邮件的自动化操作smtplibemailsmtplib模块是对SMTP协议的封装,用于发送邮件;e
- 相信玩过爬虫的朋友都知道selenium,一个自动化测试的神器工具。写个Python自动化脚本解放双手基本上是常规的操作了,爬虫爬不了的,就
- 一、Pycharm下载与安装附:Python、Pycharm和Anaconda的关系:Python是一种解释型、面向对象、动态数据类型的高级
- 1.文件打开与关闭在python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件open(文件名,访问模式)。 f = o
- 前言相信大家都玩过斗地主,规则就不再介绍了。直接上一张朋友圈看到的残局图:这道题我刚看到时,曾尝试用手工来破解,每次都以为找到了农民的必胜策
- 前言我们在前面的例子里,我们学习使用集合里字符或非集合里的字符,这时都是要把每个字符写出来的,但是有时需要把26个小写字母都放到集合里,那么
- 前言Flask是一个使用python编写的轻量级Web框架,对比其他相同类型的框架而言,这个框架更加的灵活轻便。并且具有很强的定制性,用户可
- 应用场景:状态不是200的URL重试多次代码比较简单还有部分注释python2.7实现:# -*-coding:utf-8-*-"
- 问题你想读写JSON(JavaScript Object Notation)编码格式的数据。解决方案json 模块提供了一种很简单的方式来编
- 访问者模式我觉得Visitor模式是在补修改已有程序结构前提下,通过添加额外的访问者完成对代码功能的拓展 为什么这样用?当你的类层次较多,在
- 通过python的os模块获取windows或者linux主机名的通用函数。#!/usr/bin/env python #cod
- 1**:请求收到,继续处理2**:操作成功收到,分析、接受3**:完成此请求必须进一步处理4**:请求包含一个错误语法或不能完成5**:服务
- 本文实例讲述了Python列表list内建函数用法。分享给大家供大家参考,具体如下:#coding=utf8'''&