值得一提的是,本次更新带来了以下全新功能:
ShardingSphere-Proxy Helm Chart
SQL 方言翻译
以 Driver 形式使用 ShardingSphere-JDBC
这些全新的能力让 ShardingSphere 的数据网关能力得到了质的提升,助力 ShardingSphere 在云上部署,优化用户体验。
除了上述新功能,本次更新大量提升了 SQL 解析支持度,内核、运行模式、弹性伸缩都完善了对 PostgreSQL / openGauss schema 的支持,弹性伸缩、事务、DistSQL 在健壮性与用户体验方面也有不少提升。
本篇将给大家介绍 ShardingSphere 5.1.2 版本更新内容。
新功能介绍
- 使用 Helm 部署 ShardingSphere-Proxy
ShardingSphere-Proxy 提供了 Docker 镜像以便于用户容器化部署。不过,对于需要在 Kubernetes 部署 ShardingSphere-Proxy 的用户,还需要自行处理数据库驱动挂载、配置挂载、自定义算法挂载等必要步骤,部署过程相对繁琐,运维成本相对较高。
ShardingSphere 本次更新带来了全新的 ShardingSphere-Proxy Helm Chart。这项新功能由企业级、云原生数据增强计算产品及解决方案提供商 SphereEx 向 Apache ShardingSphere 社区捐赠,推动 Apache ShardingSphere 在云原生方向前进。
ShardingSphere 在集群模式下依赖注册中心存储元数据,ShardingSphere-Proxy 的 Helm Chart 能够自动部署 ZooKeeper 集群,帮助用户快速搭建 ShardingSphere-Proxy 集群。
受限于开源协议,ShardingSphere-Proxy 的二进制发布包、Docker 镜像受限于开源协议,无法打包 MySQL JDBC 驱动,用户需要手动添加 MySQL JDBC 驱动到 classpath 才能使用 MySQL 作为 ShardingSphere 的存储节点。对于这类情况,ShardingSphere-Proxy Helm Chart 能够在 Pod 的 Init 容器自动获取 MySQL JDBC 驱动,降低了用户的部署操作成本。
- 全新 SQL 方言翻译能力
随着数据库碎片化趋势的不可逆转,多种类型数据库的共存已渐成常态。使用一种 SQL 方言访问异构数据库的场景在不断增加。
多样化的数据库的存在,使访问数据库的 SQL 方言难于标准化,工程师需要针对不同种类的数据库使用不同的方言,缺乏统一化的查询平台。
将不同类型的数据库方言自动翻译为后端数据库所使用的方言,让工程师可以使用任意一种数据库方言访问所有的后端异构数据库,可以极大地降低开发和维护成本。
Apache ShardingSphere 5.1.2 在打造极具生产力的数据网关的路途中迈出了重要的一步。本次更新带来了全新的 SQL 方言翻译能力,能够支持主流开源数据库之间的方言转换。例如,用户可以使用 MySQL 客户端连接 ShardingSphere-Proxy 并发送基于 MySQL 方言的 SQL,ShardingSphere 能自动识别用户协议与存储节点类型,自动完成 SQL 方言转换,访问 PostgreSQL 等异构存储节点,反之亦然。
- 以 Driver 的形式使用 ShardingSphere-JDBC
在过去的 ShardingSphere 版本中,ShardingSphere-JDBC 以 DataSource 的形式向用户提供服务。对于不使用 DataSource 的项目或工具,需要进行改造才能引入 ShardingSphere-JDBC,增加了用户的使用成本。
在 Apache ShardingSphere 5.1.2 中,ShardingSphere-JDBC 实现了标准的 JDBC Driver 接口,用户可以通过 Driver 的形式引入 ShardingSphere-JDBC。
用户可以直接通过 DriverManager 获取 Connection:
Class.forName("org.apache.shardingsphere.driver.ShardingSphereDriver");
Connection conn = DriverManager.getConnection("jdbc:shardingsphere:classpath:config.yaml");
也可以使用 DataSource 获取 Connection:
// 以 HikariCP 为例
HikariDataSource dataSource = new HikariDataSource();
dataSource.setDriverClassName("org.apache.shardingsphere.driver.ShardingSphereDriver");
dataSource.setJdbcUrl("jdbc:shardingsphere:classpath:config.yaml");
Connection conn = dataSource.getConnection();
对已有能力的提升
内核
本次更新,ShardingSphere 合并了大量提升 SQL 解析支持度的 PR,在更新日志中可见 SQL 解析的优化项占了较大篇幅。
ShardingSphere 在 5.1.1 对 PostgreSQL / openGauss 的 schema 提供了初步支持,在本次 5.1.2 更新,内核、集群模式、弹性伸缩对 PostgreSQL / openGauss 的 schema 的支持度也有所提升,例如元数据对增加了对 schema 结构的支持,内核、弹性伸缩支持自定义 schema。
ShardingSphere-Proxy
随着使用 ARM 架构 CPU 的服务器市场渐成气候,ShardingSphere-Proxy 在 Docker 方面也提供了适用于 arm64 架构的镜像。
在 MySQL 方面,ShardingSphere-Proxy 修复了无法接收长度超过 8 MB 数据包的问题,并支持接收总长度超过 16 MB 的数据。
弹性伸缩
弹性伸缩在除了支持 PostgreSQL 自定义 schema 外,也实现了迁移 PostgreSQL 时自动建表的功能,并修复了 PostgreSQL 增量迁移遇到 null
字段值会报错的问题。除功能方面,弹性伸缩还减少了迁移过程中的资源占用,以及对 openGauss 3.0 增量迁移提供了支持。
欢迎大家使用或升级 ShardingSphere 5.1.2,ShardingSphere 社区期待您的反馈!
更新日志
以下为 ShardingSphere 5.1.2 的全部更新日志。需要注意的是,本次更新调整了少量 API,调整项请参考本文更新日志的 API 调整部分。
新特性
内核:支持 MySQL 和 PostgreSQL 的 SQL 方言转换的 alpha 版本
内核:支持 PostgreSQL 和 openGauss 自定义 schema
内核:支持 PostgreSQL 和 openGauss create/alter/drop view 语句
内核:支持 openGauss cursor 语句
内核:支持使用自定义系统库
内核:支持获取 openGauss 和 MySQL 的创建表语句
内核:支持获取 PostgreSQL 的创建表语句
接入端:正式支持使用 Helm 在 Kubernetes 中快速部署一个包含 ZooKeeper 集群的 ShardingSphere-Proxy 集群
接入端:支持 ShardingSphere JDBC Driver
弹性伸缩:支持 PostgreSQL 自动建表
弹性伸缩:支持 PostgreSQL 和 openGauss 自定义 schema 的表迁移
弹性伸缩:支持字符串主键表迁移
运行模式:治理中心支持 PG/openGauss 三级结构
运行模式:治理中心支持 Database 级别的分布式锁
优化
内核:支持 PostgreSQL 和 openGauss copy 语句
内核:支持 PostgreSQL 的 alter/ drop index 语句
内核:支持 MySQL update force index 语句
内核:支持 openGauss create/alter/drop schema 语句
内核:优化 RoundRobinReplicaLoadBalanceAlgorithm 和 RoundRobinTrafficLoadBalanceAlgorithm 算法逻辑
内核:优化在前端驱动数据库类型和后端不一致时元数据加载逻辑
内核:重构元数据加载逻辑
内核:show processlist 语句功能性能优化
内核:提升大量表场景下的加载性能
内核:支持 comment 语句的执行
内核:支持 PostgreSQL 和 openGauss 分片场景下的 view 语句的执行
内核:支持 ORACLE 的 CREATE ROLLBACK SEGMENT 语句
内核:支持解析 openGauss DROP TYPE
内核:支持解析 openGauss ALTER TYPE
内核:支持解析 Oracle DROP DISKGROUP
内核:支持解析 Oracle CREATE DISKGROUP
内核:支持解析 Oracle DROP FLASHBACK ARCHIVE
内核:支持解析 openGauss CHECKPOINT
内核:支持解析 Oracle CREATE FLASHBACK ARCHIVE
内核:支持解析 PostgreSQL Close
内核:支持解析 openGauss DROP CAST
内核:支持解析 openGauss CREATE CAST
内核:支持解析 Oracle CREATE CONTROL FILE
内核:支持解析 openGauss DROP DIRECTORY
内核:支持解析 openGauss ALTER DIRECTORY
内核:支持解析 openGauss CREATE DIRECTORY
内核:支持解析 PostgreSQL Checkpoint
内核:支持解析 openGauss DROP SYNONYM
内核:支持解析 openGauss CREATE SYNONYM
内核:支持解析 openGauss ALTER SYNONYM
内核:支持解析 PostgreSQL CALL Statement
内核:支持解析 Oracle CREATE PFILE
内核:支持解析 Oracle CREATE SPFILE
内核:支持解析 Oracle ALTER SEQUENCE
内核:支持解析 Oracle CREATE CONTEXT
内核:支持解析 Oracle ALTER PACKAGE
内核:支持解析 Oracle CREATE SEQUENCE
内核:支持解析 Oracle ALTER ATTRIBUTE DIMENSION
内核:支持解析 Oracle ALTER ANALYTIC VIEW
内核:使用 ShardingSphere Spi 加载 SQLVisitorFacade
内核:使用 ShardingSphere Spi 加载 DatabaseTypedSQLParserFacade
内核:支持解析 Oracle ALTER OUTLINE
内核:支持解析 Oracle DROP OUTLINE
内核:支持解析 Oracle drop edition
内核:支持解析 SQLServer WITH Common Table Expression
内核:优化 SubquerySegment 在 with 语句中的开始和结束索引
内核:重构 JoinTableSegment
内核:支持解析 Oracle DROP SYNONYM
内核:支持解析 Oracle CREATE DIRECTORY
内核:支持解析 Oracle CREATE SYNONYM
内核:支持解析 SQLServer XmlNamespaces Clause
内核:支持解析 Oracle Alter Database Dictionary
内核:支持解析 SQLServer Clause of SELECT Statement
内核:支持解析 Oracle ALTER DATABASE LINK
内核:支持解析 Oracle CREATE EDITION
内核:支持解析 Oracle ALTER TRIGGER
内核:支持解析 SQLServer REVERT Statement
内核:支持解析 PostgreSQL DROP TEXT SEARCH
内核:支持解析 PostgreSQL drop server
内核:支持解析 Oracle ALTER VIEW
内核:支持解析 PostgreSQL drop access method
内核:支持解析 PostgreSQL DROP ROUTINE
内核:支持解析 SQLServer DROP USER
内核:支持解析 Oracle DROP TRIGGER
内核:支持解析 PostgreSQL Drop subscription
内核:支持解析 PostgreSQL drop operator class
内核:支持解析 PostgreSQL DROP PUBLICATION
内核:支持解析 Oracle DROP VIEW
内核:支持解析 PostgreSQL DROP TRIGGER
内核:支持解析 Oracle DROP DIRECTORY
内核:支持解析 PostgreSQL DROP STATISTICS
内核:支持解析 PostgreSQL drop type
内核:支持解析 PostgreSQL DROP RULE
内核:支持解析 SQLServer ALTER LOGIN
内核:支持解析 PostgreSQL DROP FOREIGN DATA WRAPPER
内核:支持解析 PostgreSQL DROP EVENT TRIGGER statement
接入端:ShardingSphere-Proxy MySQL 支持接收长度超过 16 MB 的请求数据包
接入端:ShardingSphere-Proxy 增加 SO_BACKLOG 配置项
接入端:ShardingSphere-Proxy 默认启用 SO_REUSEADDR
接入端:ShardingSphere-Proxy Docker image 增加 aarch64 支持
接入端:ShardingSphere-Proxy MySQL 支持配置默认 MySQL 版本号
接入端:ShardingSphere-Proxy PostgreSQL / openGauss 支持更多字符集
接入端:ShardingSphere-Proxy 增加默认端口配置项
弹性伸缩:openGauss 3.0 启用 thread_pool 时,Scaling 兼容 HA port 进行数据同步
弹性伸缩:优化 PipelineJobExecutor 中 Zookeeper 事件处理的逻辑,避免 zk 阻塞事件
弹性伸缩:Scaling 数据同步不区分表名大小写
弹性伸缩:改进 PostgreSQL/openGauss 复制槽清理
弹性伸缩:改进准备阶段锁保护
弹性伸缩:改进 PostgreSQL 同一记录删除后重建场景下的数据同步
弹性伸缩:Scaling 创建的数据源在底层不缓存
弹性伸缩:尽量复用数据源,减少数据库连接占用
DistSQL:REFRESH TABLE METADATA 支持指定 PostgreSQL's schema
DistSQL:ALTER SHARDING TABLE RULE 时增加对绑定表的校验
运行模式:ShardingSphere-JDBC 支持配置数据库连接名
分布式事务:事务中禁止执行 DistSQL
分布式事务:autocommit = 0, DDL 部分 DML 会自动开启事务
问题修复
- 内核:修复 PostgreSQL 和 openGauss show 语句解析异常
- 内核:修复 PostgreSQL 和 openGauss time extract function 解析异常
- 内核:修复 PostgreSQL 和 openGauss select mod fucntion 解析异常
- 内核:修复读写分离场景下多 schema join 语句的执行异常
- 内核:修复加密场景下执行 create schema 语句的路由异常
- 内核:修复 drop schema if exist 语句的异常
- 内核:修复执行 LAST_INSERT_ID() 路由错误
- 内核:修复 use database 在无数据源状态下执行异常的问题
- 内核:修复带有 set var 的 fucntion 创建语句
- 接入端:修复 ShardingSphere-Proxy PostgreSQL / openGauss Describe PreparedStatement 因字段大小写不匹配导致的空指针
- 接入端:修复 ShardingSphere-Proxy PostgreSQL / openGauss 执行 schema DDL 后没有返回正确 tag 的问题
- 弹性伸缩:修复 MySQL unsigned 类型在 Scaling 过程中出错
- 弹性伸缩:修复一致性检查创建数据源失败时产生连接泄漏的问题
- 弹性伸缩:修复 ShardingSphereDataSource 初始化忽略分片以外规则的问题
- 弹性伸缩:支持 job 在准备阶段被关闭
- 弹性伸缩:修复数据源 url 和 jdbcurl 兼容性问题
- 弹性伸缩:修复 openGauss 数据复制槽创建时机问题,避免可能的增量数据丢失
- 弹性伸缩:改进 job 状态持久化,确保特殊情况下不会被覆盖为老状态
- 弹性伸缩:修复 PostgreSQL 使用 TestDecoder 进行增量迁移时无法正确解析
null
- DistSQL:修复单机和内存模式下,SET VARIABLE 修改不生效的问题
- DistSQL:修复 SHOW INSTANCE LIST 与实际数据不一致的问题
- DistSQL:修复分片规则大小写敏感的问题
- 运行模式:修复 Scaling 功能更改分表规则后新版本元数据丢失数据
- 分布式事务:修复根据 catalog 获取 indexinfo 为空问题
重构
- 弹性伸缩:重构 jobConfig,方便新类型 job 复用及扩展
- 运行模式:优化注册中心计算节点存储结构
- 运行模式:使用 uuid 替代 ip@port 作为实例唯一标识
API 调整
- DistSQL:EXPORT SCHEMA CONFIG 调整为 EXPORT DATABASE CONFIG
- DistSQL:IMPORT SCHEMA CONFIG 调整为 IMPORT DATABASE CONFIG
- 运行模式:调整 db-discovery 算法配置
- DistSQL:SHOW SCHEMA RESOURCES 调整为 SHOW DATABASE RESOURCES
- DistSQL:COUNT SCHEMA RULES 调整为 COUNT DATABASE RULES
- 权限:权限提供者
ALL_PRIVILEGES_PERMITTED
更新为ALL_PERMITTED
- 权限:权限提供者
SCHEMA_PRIVILEGES_PERMITTED
更新为DATABASE_PERMITTED
相关链接
🔗 下载链接:
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
🔗 更新日志:
https://github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md
🔗 项目地址:
https://shardingsphere.apache.org/
社区建设
此次 Apache ShardingSphere 5.1.2 版本的发布,共有 54 位 Contributor 提交了 1028 个 PR,感谢社区伙伴们的大力支持。
作者
吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。专注于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。