MySQL集群解决方案(1):MySQL数据库的集群方案

news2024/11/18 3:25:57

1、系统架构存在的问题

 

在我们的系统架构中,DBserver方面我们只是使用了单节点服务,如果面对大并发,海量数据的存储,显然单节点的系统架构将存在很严重的问题,所以接下来,我们将实现MySQL的集群,来应对大并发、海量数据存储等问题。

2、MySQL数据库的集群方案

2.1、读写分离架构

2.1.1、说明

我们一般应用对数据库而言都是“读多写少”,也就说对数据库读取数据的压力比较大,有一个思路就是说采用数据库集群的方案: 其中一个是主库,负责写入数据,我们称之为:写库; 其它都是从库,负责读取数据,我们称之为:读库;

那么,对我们的要求是:

1. 读库和写库的数据一致;

2. 写数据必须写到写库;

3. 读数据必须到读库;

2.1.2 架构

从该系统架构中,可以看出:

  • 数据库从之前的单节点变为多节点提供服务
  • 主节点数据,同步到从节点数据
  • 应用程序需要连接到2个数据库节点,并且在程序内部实现判断读写操作

这种架构存在2个问题:

(1)应用程序需要连接到多个节点,对应用程序而言开发变得复杂

  • 这个问题,可以通过中间件解决
  • 如果在程序内部实现,可使用Spring的AOP功能实现

 

(2)主从之间的同步,是异步完成,也就意味着这是 弱一致性

  • 可能会导致,数据写入主库后,应用程序读取从库获取不到数据,或者可能会丢失数据,对于数据安全性要求比较高的应用是不合适的
  • 该问题可以通过PXC集群解决

2.2 中间件

通过上面的架构,可以看出,应用程序会连接到多个节点,使得应用程序的复杂度会提升,可以通过中间件方式解决,如下:

 

从架构中,可以看出:

  1. 应用程序只需要连接到中间件即可,无需连接多个数据库节点
  2. 应用程序无需区分读写操作,对中间件直接进行读写操作即可
  3. 在中间件中进行区分读写操作,读发送到从节点,写发送到主节点

该架构也存在问题,中间件的性能成为了系统的瓶颈,那么架构可以改造成这样:

这样的话,中间件的可靠性得到了保证,但是也带来了新的问题,应用系统依然是需要连接到2个中间件,又为应用系统带来了复杂度。 

2.3 负载均衡

为了解决以上问题,我们将继续优化架构,在应用程序和中间件之间增加 proxy 代理,由代理来完成负载均衡的功能,应用程序只需要对接到proxy 即可。 ·

 

至此,主从复制架构的高可用架构才算是搭建完成。
2.4 PXC 集群架构

在前面的架构中,都是基于MySQL主从的架构,那么在主从架构中,弱一致性问题依然没有解决,如果在需要强一致性的需求中,显然这种架构是不能应对的,比如:交易数据。

PXC提供了读写强一致性的功能,可以保证数据在任何一个节点写入的同时可以同步到其它节点,也就意味着可以存其它的任何节点进行读取操作,无延迟。

架构如下:

2.5 混合架构

在前面的PXC架构中,虽然可以实现了事务的强一致性,但是它是通过牺牲了性能换来的一致性,如果在某些业务场景下,如果没有强一致性的需求,那么使用PXC就不合适了。所以,在我们的系统架构中,需要将这两种方式综合起来,这样才是一个较为完善的架构。

 

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

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

相关文章

双12有哪些宝藏数码好物值得入手、这份超值数码清单收藏好

作为一年一度的电商大促狂欢日,不知道各位小伙伴儿有没有入手哪些心仪的数码产品呢?如果确实不知道要入啥好,不妨一起来看看我为各位精心准备的这份最值得入手的数码产品清单吧,这份清单的产品最主要突出的是颜值、产品实力还有性…

anaconda使用arcpy库

anaconda使用Arcpy环境1. 查看Arcgis版本2. 创建虚拟环境3. 将anaconda环境放入jupyter中1. 查看Arcgis版本 找到Arcgis安装python路径【电脑需要下载Arcgis】点击python.exe,查看python版本 2. 创建虚拟环境 管理员身份打开Anaconda PowerShell Prompt 查看ana…

安卓玩机搞机技巧综合资源-----“另类更新“偷渡”操作步骤 无需解锁bl 无需内侧用户【十三】

接上篇 安卓玩机搞机技巧综合资源------如何提取手机分区 小米机型代码分享等等 【一】 安卓玩机搞机技巧综合资源------开机英文提示解决dm-verity corruption your device is corrupt. 设备内部报错 AB分区等等【二】 安卓玩机搞机技巧综合资源------EROFS分区格式 小米红…

如何排查CPU 100%的应用

一台机器,CPU100%,如何找到相关服务,如何定位问题代码,今天简单分享下思路。 简要步骤如下: 找到最耗CPU的进程;找到最耗CPU的线程;查看堆栈,定位线程在干嘛,定位对应代码…

linux安装docker教程+mysql安装

一、linux安装docker教程 第一步、关闭SELINUX服务 修改文件后的重启linux,重启命令为:reboot 注意此处虚拟机里修改重启无法启动linux系统成功,处理方法: 1、重启Linux按e进入系统启动项修改参数 2、在linux16的行位添加 seli…

k8s编程operator——(4) kubebuilder controller-runtime

文章目录1、KubeBuilder使用1.1 下载1.2 使用2、controller-runtime参考资料:https://book.kubebuilder.io/k8s编程operator系列: k8s编程operator——(1) client-go基础部分 k8s编程operator——(2) client-go中的informer k8s编程operator——(3) 自定…

【PostgreSQL的wal_buffers】

1、什么是wal buffer? wal buffer是预写日志(wal)缓冲区 2、wal buffer的作用是什么 用于还未写入磁盘的 WAL 数据的共享内存。 每次变更事务提交时候,需要将变更事务日志落盘,在PG中为了提高性能,并非采用实时flush到磁盘,而是在PG中提供XLog Buff…

DFS学习

一、DFS 1、简介 最初听到DFS还以为是深度优先遍历,实际上是分布式文件存储服务(Distributed file system)。 FastDFS是一套分布式文件存储服务,Titans将FastDFS提供的接口进行了封装,屏蔽了一些无需关注的操作细节,让用户可以更…

Java基础:Lambda表达式

1. 函数式编程思想概述 在数学中,函数就是有输入量、输出量的一套计算方案,也就是“拿什么东西做什么事情”。相对而言,面向对象过分强调“必须通过对象的形式来做事情”,而函数式思想则尽量忽略面向对象的复杂语法——强调做什么…

《Fluent Python》笔记 | 函数对象和装饰器

在Python中函数是对象,本质是function类的实例。同样函数对象也是“一等对象”,即满足以下条件: 在运行时创建能赋值给变量或数据结构中的元素能作为参数传给函数能作为函数的返回结果 函数对象的__doc__属性用于生成对象的帮助文本。 接受…

【避坑指南】快准狠!一键采购电子元器件(文末优惠券)

在采购元器件的过程中,经常会出现一些或这或那的情况,比如遇到假货问题、不具备专业知识、工作经验不够丰富、采购型号错误等等,因此采购下单如赌注,每个订单都下得心惊肉跳。 那么有哪些坑是可以避开的,又有什么方法可…

AI大模型加持,生成式搜索来了!

梦晨 发自 凹非寺量子位 | 公众号 QbitAI最近有两件事,让搜索引擎重回聚光灯下。百度发布“文心百中”,用AI大模型技术驱动的产业级搜索系统。构建企业内部搜索引擎的人力成本减少90%以上,同时只需要极低数据。几乎同一时间,OpenA…

算法---DFS和BFS

一 : 什么是DFS和BFS? 转载自 : 什么是DFS和BFS? 简介: 深度优先遍历(Depth First Search, 简称 DFS) 与广度优先遍历(Breath First Search)是图论中两种非常重要的算法,生产上广泛用于拓扑排序&#xf…

软考高级信息系统项目管理师如何备考?

从以下两个方面: 1.首先分析一下高项考试的各个科目; 2.如何备考高项? 高项考试有三个科目: 综合知识,案例分析,和论文。 一、综合知识 信息系统项目管理师上午综合知识科目范围广,知识点非…

【差分进化算法】基于适应度-距离-平衡的自适应引导差分进化 (FDB-AGDE) 算法附matlab代码

​✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。 🍎个人主页:Matlab科研工作室 🍊个人信条:格物致知。 更多Matlab仿真内容点击👇 智能优化算法…

java工作流开源框架可以提高工作效率吗?

要想回答这个问题,就需要了解什么是java工作流开源框架,以及java工作流开源框架的主要特点是什么。随着大数据时代的拓展发展,低代码开发平台已经在数字化管理时代中深受欢迎,是做好数据管理和提升企业数字化发展步伐的重要工具。…

医疗机构 IT 管理员保护患者数据和隐私的 3 项必做之事

自疫情开始以来,医疗机构的信息存储与管理正面临着巨大的考验。患者的健康史,包括所有治疗、程序、处方、实验室测试和扫描报告,都以电子健康记录 (EHR) 的形式存储。尽管 EHR 更能提高患者病例的准确性,并帮助医生跟踪患者的医疗…

网络三层交换机部署实验

♥️作者:小刘在C站 ♥️每天分享云计算网络运维课堂笔记,疫情之下,你我素未谋面,但你一定要平平安安,一 起努力,共赴美好人生! ♥️夕阳下,是最美的,绽放,愿…

排查cpu飚高问题-两种方案

cpu 飚高原因 频繁创建线程 线程内进行频繁计算 模拟代码 SpringBootApplicationEnableSchedulingpublic class CrawlBigDataApplication {public static void main(String[] args) { /*19*/ SpringApplication.run(CrawlBigDataApplication.class, (String[])args)…

【并发编程】Atomic类

一、介绍 在java.util.concurrent.atomic包下atomic一般指原子操作类,主要分为四种类型的原子更新类:原子更新基本类型、原子更新数组类型、原子更新引用和原子更新属性。 二、简单使用 1.AtomicInteger 通过synchronized关键字来保证原子性&#xf…