mysql集群策略_mysql集群策略

在现在的科技环境下,我们的项目中往往会处理越来越多的数据量,随着数据量的递增,单一的数据库已经无法满足我们的业务要求,因此为了解决这一系列的数据库瓶颈,我们有了集群的搭建方案。

一、读写分离架构

读写分离架构是我们最常见的架构,它的主要思路是:有一个集群的数据库,其中一个为主库,负责所有的写操作,但不提供读;其他的都是从库,负责读取数据的操作,但不提供写。

在读写分离的架构中,需要注意的是:

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

2.写数据的操作必须要在主库中进行;

3.读数据的操作必须要在从库中进行。

读写分离的架构图:

2a5d476f808f3bb5bb4cb25d4443b646.png

从架构图中我们可以看到:

1.数据库节点有单个变成了多个;

2.主数据库需要同步数据到从数据库;

3.集群中至少需要两个数据库才能使用。

但是这种架构存在着非常天然的劣势:

第一点:web应用程序需要连接多个mysql节点;其次每次请求都必须到各自的数据库,如写请求到写数据库,读请求到读数据库,面对这种情况,我们可以采用spring AOP来解决:

ada6372e7236758391f7e8027b361737.png

第二点:主从之间的数据同步是异步进行的,那么就会意味着数据一致性较弱,这样可能会出现数据在某个时刻没有进行同步完成,导致主从库的数据不一致。

二、中间件架构

中间件架构是基于主从架构设计的,它主要是对传统的主从架构进行一次改进。

在上面我们介绍的主从架构中,知道了主从架构会有多个节点难以处理的问题,外部程序访问可能涉及到切库的问题。为了解决这个问题,我们引入了中间件:mycat,来处理这种多节点的情况。

中间件的架构图:

d6a9f6f975cd52e0e175c3ce46052666.png

在中间件架构中,我们可以看到:

1.外部的web应用程序无需连接多个数据库节点,只需要连接到中间件中即可。

2.外部的web应用程序无需区分读写操作,所有的读写操作区分都交给了中间件来处理。

接下来让我们试想下,如果一个中间件连接了上万个数据库节点,这个架构还能支撑的起吗?

答案是肯定的,在面对很多个数据库节点时,单个中间件无法负载,因此我们可以把这个架构图做个改进,将中间件进行集群处理:

3cd472805d5dee528d8bdd6726020c5d.png

我们仔细看这个架构图,能够满足单个负载的情况,但是如果中间件多了,又会和读写架构的问题一样,外部程序会面临多个数据节点的问题。

三、负载均衡架构

负载均衡架构是为了解决我们中间件架构集群下的问题而产生的。

负载均衡架构图:

c1a97beb8f4d0f4c829c9da4f6fb5334.png

从负载均衡架构图我们可以看到:

1.外部程序只需要对接负载均衡组件(proxy),就能访问数据库。

2.负载均衡组件(proxy)不处理和区别读写操作,直接讲请求转发给组件。

四、PXC集群架构

在上面我们讲到,读写架构的问题有多个数据节点和数据同步弱一致性的问题,PXC集群就是解决数据弱一致性的问题。

PXC集群架构图:

cb98dd37dda1d3482575deca3f2a0f28.png

在PXC集群中我们可以看到:

1. 外部程序任然只对接负载均衡组件(proxy)即可。

2. 中间件mycat在架构图中的作用是:对于每个数据库请求,不再是区分读写操作,而是对数据库分片的操作。

3. PXC的集群中,每个mysql数据库都能够进行读写操作。

4. PXC集群由于是数据强一致性同步,数据同步采用的是同步操作的方式,因此效率会比读写架构慢的多。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值