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就不合适了。所以,在我们的系统架构中,需要将这两种方式综合起来,这样才是一个较为完善的架构。

MySQL集群解决方案(1):MySQL数据库的集群方案相关推荐

  1. mysql水平拆分 hash_常用的数据库表水平拆分方案

    常用的数据库表水平拆分方案 发布时间:2018-09-28 17:50, 浏览次数:391 一,用户中心,以用户数据为例 User(uid, login_name, passwd, sex, age, ...

  2. mysql集群集成springboot_springboot配置数据库包括集群下 配置

    首先准备数据库的必要信息. 查询当前数据库实例名 方法一:select instance_name from v$instance; 方法二:show parameter instance 查询数据库 ...

  3. mysql部门人员排序设计_MySQL数据库访问性能优化

    MYSQL应该是最流行的WEB后端数据库.大量应用于PHP,Ruby,Python,Java 等Web语言开发项目中,无论NOSQL发展多么快,都不影响大部分架构师选择MYSQL作为数据存储. MYS ...

  4. mysql中文乱码解决方案_Mysql中文乱码解决方案

    Mysql中文乱码解决方案 时间:2017-07-11     来源:华清远见JAVA学院 中文乱码问题一直是我们编程过程中比较常见又让人头疼的问题,但是只要按照标准进行配置,就能很好的避免出现中文乱 ...

  5. mysql处理上百万条的数据库如何优化语句来提高处理查询效率

    1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...

  6. 大数据量数据库设计与优化方案

    一.数据库结构的设计 如果不能设计一个合理的数据库模型,不仅会增加客户端和服务器段程序的编程和维护的难度,而且将会影响系统实际运行的性能.所以,在一个系统开始实施之前,完备的数据库模型的设计是必须的. ...

  7. 「mysql优化专题」高可用性、负载均衡的mysql集群解决方案(12)

    不可避免的是,使用MySQL时随着时间的增长,用户量以及数据量的逐渐增加,访问量更是剧增,最终将会使MySQL达到某个瓶颈,那么MySQL的性能将会大大降低.怎么办?前面已经讲过十一篇优化方案,接下来 ...

  8. 高可用性、负载均衡的mysql集群解决方案

    2019独角兽企业重金招聘Python工程师标准>>> 一.为什么需要mysql集群? 一个庞大的分布式系统的性能瓶颈中,最脆弱的就是连接.连接有两个,一个是客户端与后端的连接,另一 ...

  9. 高可用性、负载均衡的mysql集群解决方案(data+sql+mgm节点)

    高可用性.负载均衡的mysql 集群解决方案 制作人:Dason QQ:623466642 博客:http://dason.blog.51cto.com/ 一.mysql 的市场占有率 二.mysql ...

最新文章

  1. 2021年大数据HBase(十七):❤️HBase的360度全面调优❤️
  2. Java日志的心路历程
  3. java编程实践开发项目,帮你突破瓶颈
  4. 1 State Hook
  5. 30 校准_校准or质控,傻傻分不清楚
  6. Rsync(远程同步):Linux中Rsync命令的10个实际示例
  7. powershell 安装mvn_Maven 安装好之后,命令行执行 `mvn -v` 提示“'mvn' 不是内部或外部命令,也不是可运行的程序 或批处理文件。”...
  8. 快速切换目录软件推荐——autojump
  9. 备份网站服务器文件路径,网站数据自动备份方法
  10. js dojo 保存txt文件
  11. C#基础5.1:StringBuilder和StopWatch类
  12. 企业如何选择SSL证书?
  13. 利用PPT要怎样制作文字弹幕特效
  14. 编程比赛三大赛制介绍(ACM赛制、OI赛制、IOI赛制)
  15. 【CANdelaStudio编辑CDD】-0.3-CDD中Fault Memory里DTC Column与Autosar Dem对应关系
  16. 从函数型数据到光滑函数
  17. JAVA 多态,封装,继承
  18. 怎么一键拼图?快速拼图这样做
  19. 用Spring Boot开发API请求详解--API开发
  20. json-handle使用

热门文章

  1. Python pyc文件 bytecode的压缩, 加壳和脱壳解析
  2. 哨兵3B 地表温度产品 ENVI打开
  3. MQ135传感器浓度转换公式
  4. UltraISO 安装系统时,提示无法在驱动器0分区上安装windows / WINPE类软件重装系统无法正常开机 解决办法
  5. halcon,分享一个想法,数米粒个数
  6. 在Label mx标签制作软件中普通打印机也可以打标签
  7. 类初始化与实例初始化
  8. 【文件格式-TIFF】TIFF图像格式结构
  9. Springboot配置MongoDB连接池
  10. unity怪物的状态机