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_idDistSQL:启用/禁用 proxy 实例时可使用 instance_id 进行操作
DistSQL:
CREATE SHARDING TABLE RULE
时支持自动创建算法,减少创建 RULE 步骤DistSQL:
CREATE SHARDING TABLE RULE
时支持指定已存在的 KeyGeneratorDistSQL:
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 检查 BINLOGROWIMAGE 报错
弹性伸缩: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,感谢社区伙伴们的大力支持。
欢迎大家测试使用 ShardingSphere 5.1.0,同时欢迎大家参与社区讨论!
欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。
评论