揭秘Sharding-Proxy——面向DBA的数据库中间层

大家好,我今天想跟大家分享的是Sharding-Sphere的第二个产品Sharding-Proxy。

在上个月亮相的Sharding-Sphere 3.0.0.M1中首次发布了Sharding-Proxy,希望这次分享能够通过几个优化实践,帮助大家管中窥豹,从几个关键细节想象出Sharding-Proxy的全貌。至于更详细的MySQL协议、IO模型、Netty等议题,以后有机会再和大家专题分享。

一、Sharding-Proxy简介

1Sharding-Proxy概览

Sharding-Proxy定位为透明化的数据库代理端,提供封装了数据库二进制协议的服务端版本,用于完成对异构语言的支持。目前先提供MySQL版本,它可以使用任何兼容MySQL协议的访问客户端操作数据(如:MySQLCommandClient、MySQLWorkbench等),对DBA更加友好。

d47e62d2b349aca45e42305ed6714efbe5ed61d9 对应用程序完全透明,可直接当做MySQL使用;

d47e62d2b349aca45e42305ed6714efbe5ed61d9适用于任何兼容MySQL协议的客户端。

76dbde3d4b1693d9b9255b3c357b5338379483f7

与其他两个产品(Sharding-JDBC、Sharding-Sidecar)的对比:

c912528c7a93fe669fd3322e9ee962b7b9bbe3bd

它们既可以独立使用,也可以相互配合,以不同的架构模型、不同的切入点,实现相同的功能目标。而其核心功能,如数据分片、读写分离、柔性事务等,都是同一套实现代码。

举个例子,对于仅使用Java为开发技术栈的场景,Sharding-JDBC对各种Java的ORM框架支持度非常高,开发人员可以非常便利地将数据分片能力引入到现有的系统中,并将其部署至线上环境运行,而DBA就可以通过部署一个Sharding-Proxy实例,对数据进行查询和管理。

2Sharding-Proxy架构

a130df724b10351f97d8de3a9a75edfb9f5a6101

整个架构可以分为前端、后端和核心组件三部分来看:

d47e62d2b349aca45e42305ed6714efbe5ed61d9 前端(Frontend)负责与客户端进行网络通信,采用的是基于NIO的客户端/服务器框架,在Windows和Mac操作系统下采用NIO模型,Linux系统自动适配为Epoll模型,在通信的过程中完成对MySQL协议的编解码;
d47e62d2b349aca45e42305ed6714efbe5ed61d9 核心组件(Core-module)得到解码的MySQL命令后,开始调用Sharding-Core对SQL进行解析、改写、路由、归并等核心功能;

d47e62d2b349aca45e42305ed6714efbe5ed61d9后端(Backend)与真实数据库的交互暂时借助基于BIO的Hikari连接池。BIO的方式在数据库集群规模很大,或者一主多从的情况下,性能会有所下降。所以未来我们还会提供NIO的方式连接真实数据库。

原文连接

猜你喜欢

转载自blog.csdn.net/weixin_40581617/article/details/80760606