0
点赞
收藏
分享

微信扫一扫

Apache ShardingSphere 5.1.1 正式发布

墨春 2022-04-15 阅读 77

本文作者

吴伟杰,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 VARIABLESSHOW 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 爱好者一同交流。

举报

相关推荐

0 条评论