mysql集群策略

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

一、读写分离架构

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

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

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

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

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

  读写分离的架构图:

  

 

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

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

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

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

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

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

  

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

二、中间件架构

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

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

  中间件的架构图:

 

 

 

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

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

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

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

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

  

 

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

三、负载均衡架构

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

  负载均衡架构图:

  

 

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

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

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

四、PXC集群架构

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

  PXC集群架构图:

  

 

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

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

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

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

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

  

 

  

 

 

 

 

 

 

  

 

  

posted @ 2020-07-27 16:58  想去天空的猫  阅读(372)  评论(0编辑  收藏  举报