目录

读写分离

中间件方案优化读写分离

负载均衡解决集群中间件的问题

PXC集群架构解决主从弱一致性的问题

混合模式解决PXC性能下降的问题


 

读写分离

 

一般而言,数据库都是“读多写少”,“读写分离”的思路是数据库集群中采用一个主库负责写入数据,其他都是从库负责读取数据。· 

 

读写分离有以下三点要求

  • 读库和写库数据必须一致
  • 写数据必须写到写库
  • 读数据必须从读库中读

 

架构图 

mysql集群配置需要几台服务器 mysql集群解决方案_中间件

特点

1.数据库从之前的单节点变成了多节点提供服务

2.主节点数据和从节点数据做了同步

3.应用程序需要连接到2个数据库节点,并在程序内部实现判断读写操作

 

读写分离存在的问题

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

2.主从同步异步实现,具有弱一致性。也就是说当你刚写主,马上读从,可能读不到。或者主从同步数据因为网络等原因丢失导致主从数据库数据不一致

 

解决方案

1.针对第一个问题,在java代码编写时可以通过SpringAop思想解决。本质是引入了一个中间件

mysql集群配置需要几台服务器 mysql集群解决方案_mysql集群配置需要几台服务器_02

2.针对第二个问题我们可以把集群模式优化为PXC集群解决

 

 

中间件方案优化读写分离

 

采取单纯的读写分离在代码中就得增加判断,根据不同条件连接不同节点,这使得应用程序复杂度大大提升,因此我们引入了中间件解决问题,常见的中间件是MyCat

 

架构

mysql集群配置需要几台服务器 mysql集群解决方案_应用程序_03

 

特点

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

 

引入中间件存在的问题

中间件的性能成为了系统的瓶颈,中间件挂了将是灾难。

 

架构改造

mysql集群配置需要几台服务器 mysql集群解决方案_读写分离_04

 

 集群中间件存在的问题

中间件的性能提升了,但应用程序依然需要连接到2个中间件,又为应用程序带来了复杂度

 

 

负载均衡解决集群中间件的问题

 

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

mysql集群配置需要几台服务器 mysql集群解决方案_mysql集群配置需要几台服务器_05

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

 

 

PXC集群架构解决主从弱一致性的问题

 

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

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

mysql集群配置需要几台服务器 mysql集群解决方案_中间件_06

PXC相比纯主从架构性能有所下降,但保证了数据的一致性!

 

 

混合模式解决PXC性能下降的问题

 

在前面的PXC架构中,虽然实现了事务的强一致性,但是这种强一致性是通过牺牲性能换来的,如果在某些业务场景下,只专注读写的性能,没有强一致性的需求,那么使用PXC就不合适了。

所以,在我们的系统架构中,需要将这两种方式综合起来,这样才是一个较为完善的架构。

需要强一致性就走pxc这套,不需要强一致性就走中间件集群这套 

mysql集群配置需要几台服务器 mysql集群解决方案_中间件_07