十五张图带你快速入门 shardingsphere-proxy

news/2024/9/22 3:41:49/文章来源:https://www.cnblogs.com/makemylife/p/18378826

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


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787025.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ZBlog关于使用PHP7出现错误的提示

若出现以下错误: (2)E_WARNING : Leaked 1 hashtable iterators (register_shutdown_function) (150101) (Linux; nginx1.9.12; PHP 7.0.4; mysqli; curl) 最简单的解决方案:请升级到PHP 7.0.5以上版本。扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉各…

ZBlog禁止直接在数据库内使用rand()进行随机读取

很多开发者喜欢用类似以下的代码来取得随机文章:$array = $zbp->GetArticleList(array(*),$where,array(rand()=> ),array($numm),);这样做有以下问题:1. 不支持MySQL之外的数据库;2. 数据量上万即奇慢无比。 所以,除非特殊情况,我们今后不再允许代码含直接在数据库…

ZBlog文件权限安全设置指南

为了防止ZBLOG被黑或是系统漏洞网站被攻破,可以将网站权限做如下设置,可以在宝塔面板的文件管理里操作。 A:需要保留w权限的目录及子目录及其下所有文件zb_users/cache zb_users/uploadB:需要删除w权限的有zb_system及其子目录 zb_users下除了cache,upload的其它目录 根目录…

HTMLTestRunner_cn测试报告不显示案例的函数注释解决方法

找到生成函数注释的代码如下: def generate_report_test(self, rows, cid, tid, n, t, o, e): # e.g. pt1.1, ft1.1, etc has_output = bool(o or e) # ID修改点为下划线,支持Bootstrap折叠展开特效 - Findyou tid = (n == 0 and p or f) + t%s%s % (cid + 1, tid + 1) name =…

ZBlog程序nginx的安全配置伪静态

location ~* /(zb_users/cache|zb_users/upload|zb_users/logs)(.*)\.php$ { deny all; return 404;}location ~ ^/(\.user.ini|\.htaccess|\.git|\.svn|\.project|LICENSE|README.md){ return 404;}扫码添加技术【解决问题】专注中小企业网站建设、网站安全12年。熟悉…

无线遥控系统2.4G

1. 433M和2.4无线遥控的区别 433传输距离远,速率低,过障碍物能力强,需要外接天线,2.4G距离近,速率高,,过障碍物能力弱,用PCB天线

使用zig语言制作简单博客网站(四)项目文件整理

创建文件夹、文件 请按照下图结构创建文件夹、文件,以此来划分各部分功能添加、整理代码

C# 将数据写入到Excel表格

Excel 是一款广泛应用于数据处理、分析和报告制作的电子表格软件。在商业、学术和日常生活中,Excel 的使用极为普遍。本文将详细介绍如何使用免费.NET库将数据写入到 Excel 中,包括文本、数值、数组、和DataTable数据的输入。C# 在Excel单元格中写入文本、或数值 C# 在Excel工…

eUSB是什么/可以干什么?

eUSB总结 1.什么是eUSB 1.1 eUSB概念 eUSB是原USB物理层上的补充,为了解决USB_phy低压需求的问题而出现的,eUSB可以将信号电平降至1.2V甚至更低,与此同时可以优化电源效率。 概括为:一种用于芯片间互联的低电压、低功耗的内部接口。 1.2 应用背景 智能终端设备的尺寸追求越…

lima 轻量级虚拟机docker替代方案 (macos平台)

引言由于某些原因,我的mac电脑的docker出了问题,无法使用docker,想到有没有类似windos上的终端虚拟机,可以直接使用命令行,经过一凡寻找,终于找到了一个替代方案我来为大家介绍 一款免费、自由、开源的 Docker for Mac 替代品,containerd & Lima 。 你只需要执行以下…

【js基础】【一眼就会】js json Object String 互转

​ 还是有些同学,没有真正弄清楚:js基础知识。特意写篇文章。 还有些同学呢基础没搞懂就开始看底部源码了。这就好比开车司机要安装调试曲轴连瓦。(深层次的有一定经验了再学。不然的话,学到啥时候是个头?)------------ 未完待续............ ​

伙伴匹配系统踩坑日记8 controller传参

伙伴匹配系统踩坑日记8 controller传参 后端 参数映射在swagger里传空值,发现有问题在方法中加入@requestparam注解@GetMapping("search/tags")public BaseResponse<List<User>> searchusersByTags(@RequestParam List<String> tagNameList){if(C…