在 Apache ShardingSphere 5.1.0 发布后不足两个月的时间里,ShardingSphere 合并了来自全球的团队或个人的累计 698 个 PR,为大家带来 5.1.1 新版本。该版本在功能、性能、测试、文档、示例等方面均有不少优化。
特别是性能方面,采用业界标准的 TPC-C 测试模型,在 16 台物理服务器上运行 Apache ShardingSphere 5.1.1 与国产数据库 openGauss 3.0,取得超过 1000 万 tpmC 的优异成绩,行业同等规模下性能最好!
本文将给大家介绍 ShardingSphere 5.1.1 版本更新内容。
吴伟杰,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 爱好者一同交流。