Apache ShardingSphere 5.1.0 正式发布

新年伊始,Apache ShardingSphere 迎来了今年的第一个版本的更新,5.1.0 版本正式发布。自去年 11 月 Apache ShardingSphere 5.0.0 GA 版本发布以来,ShardingSphere 正式开启了包含数据分片、分布式事务、数据脱敏、SQL 审计、数据库网关等为核心功能的分布式生态打造之路,同时自发布至今的 3 个多月时间里,ShardingSphere 社区也收到了来自各个领域的开发者、合作者以及用户等多方面的反馈,这些反馈为我们持续打磨产品带来了很大的帮助。本文将和大家详细介绍 Apache ShardingSphere 5.1.0 版本包含的更新内容。

孟浩然

SphereEx 高级研发工程师,Apache ShardingSphere PMC。曾就职于京东科技,负责数据库产品研发,热爱开源,关注数据库生态,目前专注于 ShardingSphere 数据库中间件开发以及开源社区建设。

本次 5.1.0 版本的发布基于用户对 5.0.0 GA 版本的反馈以及 ShardingSphere 社区对生态打造的规划来共同推进,在内核以及各个功能模块都进行了重大的优化:

  • 内核层面

打造强大且稳定的内核是 ShardingSphere 一直以来的目标,本次更新修复了大量包括 PostgreSQL 以及 openGauss SQL 解析的支持问题,开始支持函数解析、binlog 语句解析,优化改写引擎、大量单表加载效率,进一步提升内核整体性能,同时开始支持 SQL Hint 功能,为用户使用强制路由功能提供了更便捷的方式。

  • 接入端

在代理端,除了修复 MySQL/PostgreSQL 协议解析的问题之外,为 openGauss 新增 SCRAM SHA-256 认证方式支持,优化 openGauss 批量插入协议,提升数据批量插入性能;在 JDBC 端,移除对空规则的校验,在无规则情况下依然可以使用 JDBC,同时优化仅加载指定 schemaName 的逻辑数据库的元数据,提升启动速度。

  • 弹性伸缩

弹性伸缩在本次版本做了很大程度的调整,首先,原 scaling 模块调整为 kernel 下的 data-pipeline 模块,该模块未来将提供除数据迁移之外的其它的数据处理能力,其次 scaling 的配置也从 server.yaml 移动至 config-sharding.yaml 配置文件中,弹性伸缩将和数据分片一起配合使用,为用户提供更加完善的分库分表服务。

  • DistSQL

新增大量实用语法的实现,为用户管理 ShardingSphere 分布式数据库生态提供了更多的工具,同时优化了部分分布式集群治理的能力,如通过 instance_id 启用 / 禁用实例,当只有一个从库时,提示用户不能进行禁用等,大大提升了用户体验。

  • 读写分离和高可用

读写分离和高可用功能 API 均进行了优化,读写分离支持静态和动态 2 种配置类型,动态配置需要和高可用配合使用。高可用配置则进行了配置和算法分离,让配置更统一简洁,同时增加了 Spring Boot 和 Spring Namespace 对高可用功能的配置支持以及 openGauss 高可用功能的实现。

  • 影子库

影子库功能在本版本中也做了部分优化,支持逻辑数据源传递,为列匹配影子算法增加不支持数据类型校验器,注解影子算法重构为 HINT 影子算法,移除配置中的 enable 属性,同时优化了影子算法判定逻辑,提升性能。

以上介绍的只是部分功能的部分更新内容,5.1.0 版本包含了来自社区 1000+ 的提交,在 5.0.0 GA 的基础上,对内核能力、核心功能、整体性能以及用户体验上都做了很大的提升,欢迎大家更新使用。

5.1.0 具体版本发布信息如下:

新特性

  • 支持 SQL Hint 功能

  • 弹性伸缩:新增限流配置及默认实现(rateLimiter)

  • 弹性伸缩:新增全量数据匹配校验算法(DATA_MATCH)

  • 弹性伸缩:新增数据读取批次大小自定义(readBatchSize)避免可能的 OOME

  • 弹性伸缩:新增 sourceWritingStopAlgorithm SPI 接口及默认空实现,新增 sourceWritingStopper

  • 弹性伸缩:新增 checkoutLockAlgorithm SPI 接口及默认空实现,新增配置 checkoutLocker

  • 弹性伸缩:config-encrypt.yaml 新增 dataConverters 配置

  • 新增 DistSQL 语法:SHOW AUTHORITY RULE

  • 新增 DistSQL 语法:SHOW TRANSACTION RULE

  • 新增 DistSQL 语法:ALTER TRANSACTION RULE

  • 新增 DistSQL 语法:SHOW SQL_PARSER RULE

  • 新增 DistSQL 语法:ALTER SQL_PARSER RULE

  • 新增 DistSQL 语法:ALTER DEFAULT SHARDING STRATEGY

  • 新增 DistSQL 语法:DROP DEFAULT SHARDING STRATEGY

  • 新增 DistSQL 语法:CREATE DEFAULT SINGLE TABLE RULE

  • 新增 DistSQL 语法:SHOW SINGLE TABLES

  • 新增 DistSQL 语法:SHOW SINGLE TABLE RULES

  • 新增 DistSQL 语法:SHOW SHARDING TABLE NODES

  • 新增 DistSQL 语法:CREATE/ALTER/DROP SHARDING KEY GENERATOR

  • 新增 DistSQL 语法:SHOW SHARDING KEY GENERATORS

  • 新增 DistSQL 语法:REFRESH TABLE METEDATA

  • 新增 DistSQL 语法:PARSE SQL,输出解析 SQL 得到的抽象语法树

  • 新增 DistSQL 语法:SHOW UNUSED SHARDING ALGORITHMS

  • 新增 DistSQL 语法:SHOW UNUSED SHARDING KEY GENERATORS

  • 新增 DistSQL 语法:CREATE/DROP SHARDING SCALING RULE

  • 新增 DistSQL 语法:ENABLE/DISABLE SHARDING SCALING RULE

  • 新增 DistSQL 语法:SHOW SHARDING SCALING RULES

  • 新增 DistSQL 语法:SHOW INSTANCE MODE

  • 新增 DistSQL 语法:COUNT SCHEMA RULES

  • 数据库发现支持 Spring Boot 配置方式

  • 数据库发现支持 Spring Namespace 配置方式

  • 数据库发现新增支持 openGauss

  • 影子库功能支持逻辑数据源传递

  • 列匹配影子算法添加不支持数据类型校验器

  • 脱敏单数据源场景下,提供 xa start/end/prepare/commit/recover 支持

API 变更

  • 弹性伸缩:scaling 配置从 server.yaml 移到 config-sharding.yaml

  • 弹性伸缩:ScalingClusterAutoSwitchAlgorithm 接口重命名、方法参数重构

  • 弹性伸缩:数据一致性校验 API 方法重命名及返回类型修改

  • DistSQL:重新设计数据库发现相关的 DistSQL 语法

  • DistSQL:GENERATED_KEY 关键字调整为 KEY_GENERATE_STRATEGY

  • Native authority provider 已标记为弃用,将在未来版本中移除

  • 数据库发现模块 API 重构,配置和算法分离

  • 读写分离模块 API 重构,增加静态和动态配置

  • 影子库 API 变更,移除 enable 属性

  • 影子库 API 变更, 影子算法类型变更

增强

  • 提升大量单表加载性能

  • 删除自动添加的 order by 子句

  • 优化绑定表关联查询不带分片关联条件的路由逻辑

  • 支持路由结果不变时 update 语句更新分片键

  • 优化改写引擎执行性能

  • 使用 federation 引擎支持 select union/union all ... 语句

  • 支持路由结果不变时 insert on duplicate key update 语句更新分片键

  • 使用 UNION ALL 改写简单查询语句的 SQL 路由结果以提升性能

  • Proxy 支持 autocommit 状态

  • ShardingSphere-Proxy openGauss 支持 SCRAM SHA-256 认证方式

  • 从 Proxy 启动脚本移除属性 java.net.preferIPv4Stack=true

  • JDBC 端去掉对空规则的校验

  • 优化 openGauss 批量插入协议性能

  • 默认禁用 Netty 泄漏探测器

  • PostgreSQL / openGauss Proxy 支持 Describe Prepared Statement

  • PostgreSQL Proxy 数据批量插入性能优化

  • 弹性伸缩:DataConsistencyChecker 初步支持流式数据校验

  • DistSQL:SHOW INSTANCE LIST 的结果中增加 instance_id

  • DistSQL:启用 / 禁用 proxy 实例时可使用 instance_id 进行操作

  • DistSQL:CREATE SHARDING TABLE RULE 时支持自动创建算法,减少创建 RULE 步骤

  • DistSQL:CREATE SHARDING TABLE RULE 时支持指定已存在的 KeyGenerator

  • DistSQL:DROP DATABASE 支持 IF EXISTS 选项

  • DistSQL:SHARDING TABLE RULE 中的 DATANODES 支持枚举形式的 inline 表达式

  • DistSQL:CREATE/ALTER SHARDING TABLE RULE 支持复合分片算法

  • DistSQL:SHOW SHARDING TABLE NODES 支持非 inline 场景(范围、时间等)

  • DistSQL:当读写分离规则中仅存一个读库时,不允许禁用

  • 影子算法判定逻辑优化,提升性能

重构

  • 重构 Federation 引擎内部流程

  • 使用预备语句请求 Proxy 时避免事务语句被解析多次

  • 弹性伸缩:scaling 模块重构到 pipeline 模块

  • 弹性伸缩:scaling job 配置结构多处调整

  • 弹性伸缩:预计算任务拆分并保存到 job 配置,简化实现

  • 弹性伸缩:pipeline-core 初步支持 encrypt 复用流程

  • 弹性伸缩:初步支持 scaling 和 encrypt 同时进行

  • 弹性伸缩:新增 input 和 output 配置,workerThread 和 rateLimiter 移入其中

  • 弹性伸缩:blockQueueSize 移入 streamChannel

  • 弹性伸缩:jobId 类型从整型调整为字符型

  • 优化 JDBC 只加载指定逻辑库

  • 优化注册中心原数据存储结构

  • 注解影子算法重构为 HINT 影子算法

漏洞修复

  • 支持函数解析

  • 修复 alter table drop constrian 语句

  • 优化 optimize table 语句路由

  • 支持 resource group 语句的路由

  • 支持解析 binlog 语句

  • 支持 PostgreSQL / openGauss ‘与’和’或’ 运算

  • 支持解析 openGauss insert on duplicate key 语法

  • 支持 PostgreSQL / openGauss union 解析

  • 修复查询字段中包含关键字的问题

  • 修复 function 解析参数的异常

  • 修复子查询没有别名查询异常的问题

  • 修复 utc timestamp 函数解析异常的问题

  • 修复 alter column 加解密异常

  • 支持 alter column with position encrypt column 的加解密异常

  • 修复 PostgreSQL 支持 delete with schema

  • 修复 Oracle 解析歧义导致的路由结果异常

  • 修复使用分片、加解密功能时 projection count 错误问题

  • 修复使用影子库、读写分离出现的 NPE 问题

  • 修复真实表大小写敏感导致的元数据错误

  • 修复加解密多表关联查询改写异常

  • 修复加解密表级别 queryWithCipherColumn 参数导致的改写异常

  • 修复中文解析

  • 修复 exists 子查询加密异常

  • 修复分片条件中出现 MySQL BINARY 关键字导致的全路由

  • 修复使用 JDBCMemoryQueryResult 处理的语句时,getResultSet 方法结果为空异常

  • 修复创建存储函数 / 过程时,错误的分片表校验逻辑

  • 修复部分客户端连接 PostgreSQL Proxy 报 Charset 为 null 的问题

  • 修复 MySQL 使用 PreparedStatement 执行 commit 导致事务状态不正确的问题

  • 修复 PostgreSQL 以非英文语言返回错误信息会导致 Proxy 无法返回正确的数据给客户端

  • 修复在 Windows 环境下,Proxy 加载路径包含空格的配置文件会报错

  • 修复 Proxy flush 时机过早导致事务状态不正确的问题

  • 修复 Proxy 无法正确返回二进制无符号数值的问题

  • 修复 MySQL Proxy PreparedStatement 协议实现不正确的问题

  • 修复非事务中 openGauss 执行批量插入协议持有过多连接的问题

  • 弹性伸缩:修复 XA 初始化连接泄露问题,数据校验会触发

  • 弹性伸缩:PostgreSQL 多数据源情况下复制流绑定异常

  • 弹性伸缩:PostgreSQL 增量同步阶段 update 记录导致同步报错

  • 弹性伸缩:修复 MySQL 5.5 检查 BINLOG_ROW_IMAGE 报错

  • 弹性伸缩:DataConsistencyChecker 修复 PostgreSQL xml 数据类型校验失败

  • DistSQL:修复数据库发现和读写分离共用时,SHOW READWRITE_SPLITTING RULES 数据缺失问题

  • DistSQL:修复数据库发现和读写分离共用时,SHOW READWRITE_SPLITTING READ RESOURCES 数据缺失的问题

  • DistSQL:修复 CREATE SHARDING TABLE RULE 语句未指定分库、分表策略时的空指针异常

  • DistSQL:修复 PREVIEW SQL by schema.table 时发生 NPE 的问题

  • DistSQL:修复 DISABLE 语句在某些情况下可能禁用读写分离主库的问题

  • DistSQL:修复 DISABLE INSTANCE 在某些情况可能禁用当前实例的问题

  • 修复当 provider 为 SCHEMA_PRIVILEGES_PERMITTED 时,用户可能查询到未授权的逻辑库的问题

  • 修复当 authority provider 未配置时,发生 NPE 的问题

  • 修复数据库发现无法修改 cron 配置

  • 修复读写分离权重算法单读节点时异常

  • 修复非 Memory 模式下创建多余数据源问题

  • 修复列值匹配影子算法数据类型转换异常

:link: 下载链接:

https://shardingsphere.apache.org/document/current/cn/downloads/

:link: 更新日志:

:link: 项目地址:

https://shardingsphere.apache.org/

社区建设

此次 Apache ShardingSphere 5.1.0 版本的发布,共有 66 位 Contributor 提交了 1148 个 PR,感谢社区伙伴们的大力支持。

欢迎大家测试使用 ShardingSphere 5.1.0,同时欢迎大家参与社区讨论!

(本文搬运自 ShardingSphere官微

1 个赞

非常感谢社区 66 位 Contributor 的贡献!

1 个赞

5.1.0的springboot的包有吗

有的, maven 中央仓库可自行下载.

@zjcnb 能提供下地址吗?

https://mvnrepository.com/artifact/org.apache.shardingsphere/shardingsphere-jdbc-core-spring-boot-starter/5.1.0

京ICP备2021015875号