十五张图带你快速入门 shardingsphere-proxy
Apache ShardingSphere 是一款分布式的数据库生态系统,它包含两大产品:
- ShardingSphere-Proxy
- ShardingSphere-JDBC
很多同学对于 ShardingSphere-JDBC 已经能非常熟悉的使用了,但关于网上关于 ShardingSphere-Proxy 5.5 的使用教程却非常少。
所以这篇文章,笔者尝试带大家快速入门 ShardingSphere-Proxy 5.5 ,理解它的基本原理以及实战流程。

1 理解 Proxy 模式
ShardingSphere-Proxy 定位为透明化的数据库代理端,通过实现数据库二进制协议,对异构语言提供支持。 目前提供 MySQL 和 PostgreSQL 协议,透明化数据库操作,对 DBA 更加友好。
- 向应用程序完全透明,可直接当做 MySQL/PostgreSQL 使用;
- 兼容 MariaDB 等基于 MySQL 协议的数据库,以及 openGauss 等基于 PostgreSQL 协议的数据库;
- 适用于任何兼容 MySQL/PostgreSQL 协议的的客户端,如:MySQL Command Client, MySQL Workbench, Navicat 等。

代理层介于应用程序与数据库间,每次请求都需要做一次转发,请求会存在额外的时延。
这种方式对于应用非常友好,应用基本零改动,和语言无关,可以通过连接共享减少连接数消耗。
2 Proxy 模式 VS JDBC 模式
当我们在 Proxy 和 JDBC 两种模式选择时,可以参考下表对照:
| JDBC | Proxy | |
|---|---|---|
| 数据库 | 任意 |
MySQL/PostgreSQL |
| 连接消耗数 | 高 |
低 |
| 异构语言 | 仅Java |
任意 |
| 性能 | 损耗低 |
损耗略高 |
| 无中心化 | 是 |
否 |
| 静态入口 | 无 |
有 |
ShardingSphere-Proxy 提供静态入口以及异构语言的支持,独立于应用程序部署,适用于 OLAP 应用以及对分片数据库进行管理和运维的场景。
ShardingSphere-JDBC 采用无中心化架构,与应用程序共享资源,适用于 Java 开发的高性能的轻量级 OLTP 应用;
在业务相对复杂的场景里,可以采用混合部署的模式。

通过混合使用 ShardingSphere-JDBC 和 ShardingSphere-Proxy,并采用同一注册中心统一配置分片策略,能够灵活的搭建适用于各种场景的应用系统,使得架构师更加自由地调整适合于当前业务的最佳系统架构。
3 快速启动
ShardingSphere-Proxy 的启动方式有三种:二进制包、Docker 和 Helm,可以选择单机部署或集群部署。
本文将介绍如何通过单机二进制包方式启动 ShardingSphere-Proxy 版本号:v 5.5.0 。
1、下载
访问 下载页面,获取 ShardingSphere-Proxy 二进制安装包, 解压缩的文件目录如下:

2、将 MySQL 的 JDBC 驱动复制到 ext-lib 目录
下载驱动 mysql-connector-java-5.1.49.jar 或者 mysql-connector-java-8.0.11.jar 放入 lib 包。

3、进入 conf 目录 , 内容如下图:

4、模式配置 global.yaml
因为默认文件内容被注释掉了,所以去掉注释,如下图:

5、验证启动 proxy 服务
在 Linux 操作系统上,运行 bin/start.sh;在 Windows 操作系统上,运行 bin/start.bat,以启动 ShardingSphere-Proxy。

然后使用 MySQL 终端命令连接 ShardingSphere-Proxy 服务端:
# 将 {xx} 替换为实际参数
mysql -h {ip} -u {username} -p{password} -P 3307
# 示例命令
mysql -h 127.0.0.1 -u root -proot -P 3307

4 配置订单分片策略
现在我们需要展示新的订单库(8个分片),需要修改分片策略 。
ShardingSphere-Proxy 支持配置多个逻辑数据源,每个以database- 前缀命名的 YAML 配置文件,即为一个逻辑数据源。

因为我们是自定义分片算法,shardingsphere 内置算法并不满足,所以我们必须先编写自定义算法类。

1、 实现 ShardingAlgorithm 接口定义的算法实现类 HashSlotAlgorithm ;
2、在项目 resources 目录下创建 META-INF/services 目录 ;
3、在 META-INF/services 目录下新建文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm ;
4、 将实现类的全限定类名写入至文件 org.apache.shardingsphere.sharding.spi.ShardingAlgorithm ;
5、将上述 Java 文件打包成 jar 包, 将上述 jar 包拷贝至 ext-lib 目录;

6、配置分片文件 database-myorder.yaml , 该文件用来定义订单的 4 个分片的路由策略;

最后,我们启动 Proxy 服务 , 我们发现通过 MySQL Client 查询数据库时,出现了我们配置的订单库 : myorder ,以及订单库里的三个逻辑表 。如下图:

4 Navicat 连接 shardingsphere proxy
通过 shardingjdbc5-spring 模块,插入多条记录到 4 个分片里,可以通过 navicat 连接 proxy 查看效果:

然后我们模拟在 myorder 逻辑数据库中新增一条订单记录,执行成功并且查询页正常的情况下,发现分片 ds0 中存储了刚插入的那条数据。

笔者将 proxy 算法模块也添加到了分库分表实战项目 shardingsphere-jdbc-demo 里,有兴趣的同学,可以看看这个项目。

Github 地址:https://github.com/makemyownlife/shardingsphere-jdbc-demo
十五张图带你快速入门 shardingsphere-proxy的更多相关文章
- 138 张图带你 MySQL 入门
SQL 基础使用 MySQL 是一种关系型数据库,说到关系,那么就离不开表与表之间的关系,而最能体现这种关系的其实就是我们接下来需要介绍的主角 SQL,SQL 的全称是 Structure Query ...
- Gradle 1.12 翻译——第十五章. 任务详述
有关其他已翻译的章节请关注Github上的项目:https://github.com/msdx/gradledoc/tree/1.12,或访问:http://gradledoc.qiniudn.com ...
- 47 张图带你 MySQL 进阶!!!
我们在 MySQL 入门篇主要介绍了基本的 SQL 命令.数据类型和函数,在局部以上知识后,你就可以进行 MySQL 的开发工作了,但是如果要成为一个合格的开发人员,你还要具备一些更高级的技能,下面我 ...
- 35 张图带你 MySQL 调优
这是 MySQL 基础系列的第四篇文章,之前的三篇文章见如下链接 138 张图带你 MySQL 入门 47 张图带你 MySQL 进阶!!! 炸裂!MySQL 82 张图带你飞 一般传统互联网公司很少 ...
- 炸裂!MySQL 82 张图带你飞
之前两篇文章带你了解了 MySQL 的基础语法和 MySQL 的进阶内容,那么这篇文章我们来了解一下 MySQL 中的高级内容. 其他文章: 138 张图带你 MySQL 入门 47 张图带你 MyS ...
- Java开发学习(三十五)----SpringBoot快速入门及起步依赖解析
一.SpringBoot简介 SpringBoot 是由 Pivotal 团队提供的全新框架,其设计目的是用来简化 Spring 应用的初始搭建以及开发过程. 使用了 Spring 框架后已经简化了我 ...
- Java Web快速入门——全十讲
Java Web快速入门——全十讲 这是一次培训的讲义,就是我在给学生讲的过程中记录下来的,非常完整,原来发表在Blog上,我感觉这里的学生可能更需要. 内容比较长,你可以先收藏起来,慢慢看. 第一讲 ...
- 无废话ExtJs 入门教程十五[员工信息表Demo:AddUser]
无废话ExtJs 入门教程十五[员工信息表Demo:AddUser] extjs技术交流,欢迎加群(201926085) 前面我们共介绍过10种表单组件,这些组件是我们在开发过程中最经常用到的,所以一 ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(四)
本系列文章立志于从一个已经习得一门编程语言的基础之上,全面介绍Python的相关开发过程和相关经验总结.本篇文章主要是基于上一篇的程序员带你十天快速入门Python,玩转电脑软件开发(三)的基础之上, ...
- 程序员带你十天快速入门Python,玩转电脑软件开发(三)
声明:本次教程主要适用于已经习得一门编程语言的程序员.想要学习第二门语言.有梦想,立志做全栈攻城狮的你 . 如果是小白,也可以学习本教程.不过可能有些困难.如有问题在文章下方进行讨论.或者添加QQ群5 ...
随机推荐
- 设备树DTS 学习:学习总结(应用篇)
设备树DTS 学习:学习总结(应用篇) 背景 经过前几章的学习,我们可以说是掌握了设备树的基础用法,现在作为总结回顾. 1.设备树DTS 学习:有关概念 介绍了什么是设备树,设备树的作用,如何编译设备 ...
- Java Objects工具类重点方法使用
Objects工具类 jdk 1.7引进的工具类,都是静态调用的方法,jdk 1.8新增了部分方法 重点方法 equals 用于字符串和包装对象的比较,先比较内存地址,再比较值 deepEquals ...
- Luogu P2036 [COCI2008-2009 #2] PERKET
今天我们来看一道题:Luogu P2036 [COCI2008-2009 #2] PERKET 这道题不难,典型的暴力枚举 由于食材数量随机,无法直接用循环解,但是可以使用递归 \(MY_{CODE: ...
- IDEA之NexChatGPT插件【工欲善其事必先利其器】
国内有热心的程序员开发了一款NexChatGPT插件,安装后开箱即用十分方便,打字机展示的效果也很流畅,另外插件内还外链了国内能直接访问的ChatGPT,非常推荐试一下,IDEA插件NexChatGP ...
- 解决方案 | 在 Tkinter 中导入 pywinauto/pyautogui 时窗口大小发生变化
上面问题也可以换一个说法,pywinauto/pyautogui 时改变了tkinter的原有的窗口大小.这个问题困扰了我好几天而且网上有这样的问题但是并没有答案,今天摸索出答案给大家分享下.解决方法 ...
- leetcode简单(双指针):[88, 202, 345, 392, 455, 905, 922, 917, 925, 942]
[toc 88. 合并两个有序数组 var merge = function(nums1, m, nums2, n) { let A1 = nums1.slice(0, m) let A2 = num ...
- [oeasy]python0023_[趣味拓展]Guido的简历_从ABC到python
Guido的简历 回忆上次内容 上次 添加了 各种 符号 铭文 各种 颜色 铸造了 自己的宝剑 添加图片注释,不超过 140 字(可选) 这些都是 用python画出来的宝剑 py ...
- oeasy教您玩转vim - 28 - 水平移动
水平移动 回忆上节课内容 根据扩展名我们可以设置某些特定类型文件的配置 相关文件类型的设置放在相应的文件夹里 文件类型缩进文件夹 /usr/share/vim/vim81/indent/ 文件类型 ...
- [oeasy]教您玩转python - 0005- 勇闯地下城
继续运行 回忆上次内容 上次从1行代码进化到了2行代码 yy p粘贴剪贴板中的内容 将剪贴板中的代码粘贴9999次 9999p 真的实现了万行代码梦 是真·圆梦 没有撒谎的那种 不过圆梦之后多少 ...
- TIER 0: Redeemer
TIER 0: Redeemer Redis Remote Dictionary Server 是一个开源的内存数据存储系统 Redis 是完全基于 内存,"内存"数据库的数据检索 ...