Apache ShardingSphere 5.1.0 正式发布

  • Post author:
  • Post category:其他


新年伊始,

Apache ShardingSphere 迎来了今年的第一个版本的更新,5.1.0 版本正式发布。

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

a8e04e9100f18ffedeb94e21bc1467cf.png

孟浩然

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 模式下创建多余数据源问题

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

🔗 下载链接:

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

🔗 更新日志:

https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md

🔗 项目地址:

https://shardingsphere.apache.org/


社区建设

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

1e469b3fdc05eee45dea27d24c444b49.png

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



版权声明:本文为ShardingSphere原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。