本文作者
吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。目前专注于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。
本次 Apache ShardingSphere 5.1.1 版本更新主要是对 5.1.0 版本的功能与性能进行优化及问题修复,接下来将介绍部分更新内容。
内核相关
内核是 ShardingSphere 的基础,打造功能完备、稳定、高性能的内核是 ShardingSphere 不变的目标。在 5.1.1 中,ShardingSphere 在内核层面优化了很多逻辑,修复了数据分片、读写分离、数据加密等场景在上一版本中发现的问题,并使各个场景在性能方面均有不同程度的提升。
在数据库方言方面,内核增加了对 MySQL 表空间的支持,并提升了对 Oracle、SQL Server、PostgreSQL、openGauss 等数据库的 SQL 支持度。另外,ShardingSphere 内核也实现了对 PostgreSQL/openGauss 的 schema 这类三层结构的初步支持,后续版本会持续完善。
接入端
本次更新修复了 ShardingSphere-JDBC 的一个潜在性能问题风险点,优化了 ShardingSphere-JDBC 内部与数据库连接池非必需的交互逻辑,减少了 ShardingSphere-JDBC 的性能开销。
在 ShardingSphere-Proxy 方面,MySQL/PostgreSQL 数据类型的支持度有所提升。ShardingSphere-Proxy MySQL 偶发性的 ResultSet closed 报错问题被修复,除此之外,ShardingSphere-Proxy MySQL 在协议层也初步支持执行多语句以提升批量操作性能。
在客户端支持度方面,ShardingSphere-Proxy PostgreSQL 提升了对 PostgreSQL JDBC Driver 42.3.x 的支持度,ShardingSphere-Proxy openGauss 提升了对 openGauss JDBC Driver 3.0 的支持度。
弹性伸缩
在本次更新中,除了修复迁移作业报错后无法通过 DistSQL 重启的问题外,弹性伸缩的健壮性有所提升,并且实现了源端停写及恢复写、部分表扩缩容的新特性。对于不符合迁移条件的情况,弹性伸缩能够快速失败,及时发现抛出问题,避免用户付出额外的时间成本。
DistSQL
DistSQL 在用户体验方面进行了优化,增加了更多的校验,减少了用户在使用 DistSQL 中配置出错的可能性。同时修复了部分用户输入与 DistSQL 关键字冲突的问题。
分布式治理
在读写分离与数据库发现方面,除了原有的 MGR,MySQL 新增了通过查询主从延时实现的数据库发现方式,可以通过获取从库延时自动切换读写分离数据源,减少用户使用动态读写分离的门槛。
在集群模式下,元数据存储结构进行了一定的优化与重构,因 ZooKeeper 会话超时、表名大小写不匹配等原因导致的问题均已被修复。
分布式事务
在事务方面,ShardingSphere-JDBC 新增了对 Savepoint 的支持,ShardingSphere-Proxy 则在原有对 LOCAL 事务 Savepoint 支持的基础上,增加了在 XA 场景下对 Savepoint 的支持。
使用 Narayana 作为 XA 的实现时,ShardingSphere 能够配置 Narayana,让用户使用 XA 更方便。
使用 PostgreSQL/openGauss 时,当在事务中发生异常,ShardingSphere 能够正确中止事务并自动回滚。
以上是对 Apache ShardingSphere 5.1.1 部分更新内容的介绍,详细内容可以参考更新日志,后续 ShardingSphere 社区会发布对部分功能特性的详细解读,敬请期待。ShardingSphere 5.1.1 在 API 层面没有变动,在功能、性能方面均有不少提升,欢迎大家升级使用。
更新日志
新特性
-
内核:PostgreSQL 支持
alter materialized view
-
内核:PostgreSQL 支持
declare
语法 -
内核:PostgreSQL 支持
discard
语法 -
内核:PostgreSQL 支持
$$
标识 -
内核:支持 MySQL 创建表空间语句
-
弹性伸缩:实现源端停写及恢复写
-
弹性伸缩:支持部分表扩缩容
-
DistSQL:新增语法
SHOW UNUSED RESOURCES
-
分布式治理:治理中心新增持久化 XA Recovery Id
-
分布式治理:数据库发现新增延迟主从延迟功能
-
分布式事务:ShardingSphere-Proxy 支持 savepoint
-
分布式事务:PostgreSQL & openGauss 事务块内异常,自动回滚
-
分布式事务:Narayana XA 事务易用性
-
分布式事务:ShardingSphere-JDBC 支持 savepoint
优化
-
内核:重构内核功能代码提升性能
-
接入端:减少 ShardingSphere-Proxy Docker 镜像体积
-
接入端:ShardingSphere-Proxy 支持使用
set names
等语句设置字符编码 -
接入端:ShardingSphere-Proxy MySQL 支持批量语句
-
接入端:ShardingSphere-Proxy 支持 openGauss JDBC Driver 3.0 客户端
-
弹性伸缩:在 ShardingSphere-Proxy 集群中只有一个 Proxy 节点需要做完成检测
-
弹性伸缩:优化 input 和 output 配置里面的字段类型,从 int 改为 Integer,方便通过 DistSQL 配置为空
-
弹性伸缩:优化 MySQL 校验和 SQL
-
弹性伸缩:优化进度删除和进度检查
-
弹性伸缩:优化 FinishedCheckJob 在错误状态下不能做完成检测
-
弹性伸缩:如果存在不符合迁移条件的表,尽快报错
-
弹性伸缩:PipelineAPIFactory 创建 GovernanceRepositoryAPI 的时候复用 ClusterPersistRepository
-
弹性伸缩:升级 jobId 生成算法;jobId 支持幂等性
-
DistSQL:
CREATE/ALTER ENCRYPT RULE
语法支持配置数据类型和长度 -
DistSQL:统一
SHOW ALL VARIABLES
与SHOW VARIABLE
语法的展示结果 -
DistSQL:
DROP BINDING TABLE RULES
语法消除绑定顺序对删除结果的影响 -
DistSQL:
SHOW INSTANCE LIST
语法增加mode_type
字段的展示 -
DistSQL:
ENABLE/DISABLE INSTANCE
语法增加对模式的校验 -
DistSQL:删除读写分离规则时,增加对规则是否正在使用的校验
-
DistSQL:创建读写分离规则时,增加 Resource 重名的校验
-
DistSQL:
SHOW READWRITE_SPLITTING READ RESOURCES
增加延迟时间的展示 -
DistSQL:
DROP RULE
语法支持IF EXISTS
进行预判断 -
DistSQL:优化
ADD/ALTER RESOURCE
连接失败的提示信息 -
分布式治理:增加 schema version 版本号支持批量执行 DistSQL
-
分布式治理:集群模式下持久化元数据优化
-
分布式治理:数据库发现创建 JOB 增加 schemaName 标识
重构
-
内核:重构加解密测试用例
-
内核:重构元数据模型,适配 PostgreSQL database 和 schema 模型
-
弹性伸缩:pipeline 模块移除 HikariCP 依赖
-
分布式治理:重构治理中心存储节点结构
-
分布式治理:重构治理中心 metadata 结构
-
分布式治理:调整数据库发现 MGR 模块为 MySQL 模块
问题修复
-
内核:修复函数无法获取变量的异常
-
内核:修复
InsertValueContext.getValue
转换异常 -
内核:修复 distinct 聚合函数列异常
-
内核:修复带有 schema 的加解密算法改写异常
-
内核:修复读写分离场景下不返回列的异常
-
内核:修复
show tables
语句丢失部分表的异常 -
内核:修复相同结尾的分表路由的异常
-
内核:修复 assignment 短语某些场景下的解析异常
-
内核:修复分片特定配置下的数字转换异常
-
内核:修复单数据源读写分离的元数据异常
-
内核:修复批量执行语句 statement 关闭异常
-
内核:修复某些语句包含 * 时的改写异常
-
内核:修复某些情况下内存模式 ShardingSphere-Proxy 的启动异常
-
接入端:修复 ShardingSphere-Proxy PostgreSQL/openGauss 可能会误替换 SQL 中非参数占位符的字面量
-
接入端:修复 PostgreSQL JDBC Driver 42.3.x 无法连接配置了多个 schema 的 PostgreSQL Proxy 的问题
-
接入端:修复 ShardingSphere-Proxy MySQL timestamp 类型时间精度丢失问题
-
接入端:修复 ShardingSphere-Proxy PostgreSQL 二进制 numeric 编码不正确的问题
-
接入端:修复 ShardingSphere-JDBC 潜在的性能问题及 OOM 风险
-
接入端:修复 ShardingSphere-Proxy MySQL 偶发读取已关闭结果集错误的问题
-
接入端:修复 ShardingSphere-JDBC 没有参数的情况调用 executeBatch 导致空指针的问题
-
弹性伸缩:修复 job 报错之后无法通过 DistSQL 重启
-
DistSQL:修复
CREATE SHARDING TABLE RULE
时 inline 表达式解析错误 -
DistSQL:修复当密码为关键字 password 时,
ADD RESOURCE
解析异常 -
分布式治理:修复由于 ZooKeeper session 超时导致计算节点丢失问题
-
分布式治理:修复治理中心表名大小写问题
-
分布式治理:DistSQL 启用禁用实例刷新内存计算节点状态
-
分布式治理:修复数据库发现无法通过 DistSQL 创建 Rule
🔗 下载链接:
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.1 版本的发布,共有 64 位 Contributor 提交了 698 个 PR,感谢社区伙伴们的大力支持。
同时,我们将于 5 月 14 日举办『Apache ShardingSphere 2022 Meetup 北京站』,敬请期待,欢迎大家届时报名参与。 🤩🤩
欢迎添加社区经理微信(ss_assistant_1)加入交流群,与众多 ShardingSphere 爱好者一同交流。