Mycat服务发现功能的架构设计及实现

Posted 苏宁云Cloud

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Mycat服务发现功能的架构设计及实现相关的知识,希望对你有一定的参考价值。

本文作者


一. Mycat是什么


Mycat 是什么?从定义和分类来看,它是一个数据库中间件,介于数据库与应用之间,进行数据处理与交互的中间服务。


Mycat是一个实现了mysql协议的Server,前端应用可以把它看作是一个数据库代理,能够使用MySQL 客户端工具和命令行访问。


而在后端,Mycat使用MySQL 原生协议与多个MySQL服务器通信,也可以用JDBC协议与大多数主流数据库服务器通信,实现数据库层面的数据存储。


对于应用开发者来说, Mycat近似于一个MySQL服务器,可以使用连接MySQL 的方式去连接Mycat(默认的Mycat 端口是8066 而非MySQL 的3306),大多数情况下,还可以使用熟悉的对象映射框架来使用Mycat。


Mycat作为中间件,本身并不存储数据,但是能够实现分库分表、读写分离、容灾备份等功能,其灵活的架构为应用层减少了数据库操作的复杂性,易于应用根据自身需要进行灵活的数据分片和水平扩容。


二. 服务发现的功能设计


 服务发现的必要性


当前Mycat已经成功应用与苏宁金融、物流、库存等业务的30多个生产系统中,业务层通过配置URL来连接Mycat。


那么,问题来了,每当Mycat集群规模改变或IP变化时,都需要修改URL并重启业务才能生效,引起业务中断。


因此,必须对应用提供透明的连接接入能力,动态感知Mycat集群成员及角色的变化,并实现Mycat多个节点间的负载均衡。


功能设计


在实际使用过程中,应用层通过框架最终使用JDBC驱动来连接Mycat,因此,要动态感知Mycat集群成员的变化,最合理的方式是在JDBC层实现服务发现,使用etcd组件作为一个高可用、强一致性的服务发现存储仓库,存储Mycat集群信息,当Mycat集群信息变化时,动态通知JDBC,实现连接重置。其流程图及实现步骤如下:


Mycat服务发现功能的架构设计及实现


1. Mycat增减节点时,修改ETCD中的Mycat集群信息。

2. ETCD通知JDBC中的监听线程,告知信息发生变化。

3. JDBC监听线程接收到变更通知后,更新Mycat集群配置信息,然后调用连接池flush接口,释放连接池中的全部连接。

4. 根据获取到的Mycat集群信息创建到Mycat的连接。


三. JDBC驱动的实现架构


要在JDBC层进行改造,必须首先了解JDBC的实现架构。一般的JDBC体系结构由两层组成:JDBC API提供应用程序对JDBC的管理连接;JDBC Driver API支持JDBC管理到驱动器连接。


JDBC API使用驱动程序管理器(DriverManager)和数据库特定的驱动程序(Driver)来连接到异构数据库,其主要提供了以下接口和类:


DriverManager: 管理一组JDBC驱动程序的基本服务。

Driver: 处理与数据库服务器的通信。不同类型的数据库需要实现不同的Driver。

Connection : 代表与数据库的链接,并拥有创建SQL语句的方法,以完成基本的SQL操作,同时为数据库事务提供提交和回滚方法。

Statement : 通过这个接口创建对象用来执行SQL语句。

ResultSet: 返回数据查询的结果集。


Mycat服务发现功能的架构设计及实现


四. 如何基于JDBC实现服务发现



并启动ETCD监听线程,在集群信息改变时,自动重新获取,进行重连。为了完成上述功能,需要重新注册新的JDBC驱动类型,并实现Driver接口中的connect函数,完成ETCD信息获取,URL改写,同时启动ETCD监听。


注册新的驱动类型


实现新的驱动类SNDPDriver,继承自Mysql JDBC驱动的NonRegisteringDriver类,并完成在DriverManager的注册:


Mycat服务发现功能的架构设计及实现


重写Driver接口的connect函数


Driver是每个数据库驱动都必须继承的接口,由于我们仅需在connect函数中实现相关功能,因此只要重新实现connect,其他函数调用原有MySQL JDBC的实现。


(1)Driver接口定义:


Mycat服务发现功能的架构设计及实现


(2)Connect函数实现:




以上是关于Mycat服务发现功能的架构设计及实现的主要内容,如果未能解决你的问题,请参考以下文章

泰涨知识 | 从0到1了解微服务架构设计及使用(下篇)

通过Mycat的分库分表案例来培养架构思维

面向服务架构设计及应用(课)

面向服务架构设计及应用(课)

多租户实现之基于Mybatis,Mycat的共享数据库,共享数据架构

《微服务架构设计模式》读书笔记 | 第8章 外部API模式