Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关
在 Apache ShardingSphere 5.1.1 发布后,ShardingSphere 合并了来自全球的团队或个人的累计 1028 个 PR,为大家带来 5.1.2 新版本。该版本在功能、性能、测试、文档、示例等方面均有不少优化。
值得一提的是,本次更新带来了以下全新功能:
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 的研发。
Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关的更多相关文章
- 重磅发布 | 全球首个云原生应用标准定义与架构模型 OAM 正式开源
作者: OAM 项目负责人 导读:2019 年 10 月 17 日,阿里巴巴合伙人.阿里云智能基础产品事业部总经理蒋江伟(花名:小邪)在 Qcon 上海重磅宣布,阿里云与微软联合推出开放应用模型 Op ...
- Apache ShardingSphere 5.0.0 内核优化及升级指南
经过近两年时间的优化和打磨,Apache ShardingSphere 5.0.0 GA 版终于在本月正式发布,相比于 4.1.1 GA 版,5.0.0 GA 版在内核层面进行了大量的优化.首先,基于 ...
- 重大升级!灵雀云发布全栈云原生开放平台ACP 3.0
云原生技术的发展正在改变全球软件业的格局,随着云原生技术生态体系的日趋完善,灵雀云的云原生平台也进入了成熟阶段.近日,灵雀云发布重大产品升级,推出全栈云原生开放平台ACP 3.0.作为面向企业级用户的 ...
- Apache ShardingSphere:由开源驱动的分布式数据库中间件生态
2021 年 7 月 21 日 2021 亚马逊云科技中国峰会现场,SphereEx 联合创始人.Apache ShardingSphere PMC 潘娟受邀参与此次峰会,以<Apache Sh ...
- DistSQL:像数据库一样使用 Apache ShardingSphere
Apache ShardingSphere 5.0.0-beta 深度解析的第一篇文章和大家一起重温了 ShardingSphere 的内核原理,并详细阐述了此版本在内核层面,特别是 SQL 能力方面 ...
- SQL 居然还能在 Apache ShardingSphere 上实现这些功能?
在去年 10 月 5.0.0-alpha 版本发布之后,Apache ShardingSphere 经历了长达 8 个多月的持续开发与优化,终于在 6 月 25 日正式迎来了 5.0.0-beta 版 ...
- SphereEx 公司成立,推动 Apache ShardingSphere 社区加速发展
近日,SphereEx 商业公司在中国红杉种子基金及初心资本助力下,已完成公司及团队组建.各大媒体平台及公众号已相继报道,并抢占新闻头条.作为以 Apache ShardingSphere 核心团队组 ...
- 提名 Apache ShardingSphere Committer,说说方法
文章首发在公众号(龙台的技术笔记),之后同步到博客园和个人网站:xiaomage.info 就在前几天,收到了 Apache ShardingSphere Vote 我成为 Committer 的邮件 ...
- Apache Storm 1.1.0 发布概览
写在前面的话 本人长期关注数据挖掘与机器学习相关前沿研究.欢迎和我交流,私人微信:846731084 我自己测试了一下这个版本,总的来说更加稳定,新增的特性并没有一一测试,仅凭kafk-client来 ...
随机推荐
- Java当中的HashSet
package collection; import java.util.HashSet; import java.util.Iterator; import java.util.Set; /* * ...
- Java三大结构
Java三大结构 顺序结构(基本结构) 选择结构 循环结构 1. 顺序结构 平时一般语句都默认遵循顺序结构 2. 选择结构 2.1 if单选择结构 语法 if(布尔表达式){ //布尔表达式为true ...
- Codeforces Round #754 (Div. 2), problem: (A) A.M. Deviation泪目 万万没想到狂wa是因为这
Problem - A - Codeforces 题目 题意很简单每次操作可以使得a1 a2 a3任意两个数分别+1 -1 求最后使得a+c-2b绝对值的最小值 BUG就是最后忽略了-2和2这一点 ...
- acwing刷题--激光炸弹--前缀和(后期会有优化做法)
地图上有 N 个目标,用整数 Xi,Yi 表示目标在地图上的位置,每个目标都有一个价值 Wi. 注意:不同目标可能在同一位置. 现在有一种新型的激光炸弹,可以摧毁一个包含 R×R 个位置的正方形内的所 ...
- XCTF练习题---CRYPTO---Broadcast
XCTF练习题---CRYPTO---Broadcast flag:flag{fa0f8335-ae80-448e-a329-6fb69048aae4} 解题步骤: 1.观察题目,下载附件 2.下载完 ...
- git 配置别名简化命令行和删除别名
废话不多说直接上添加别名语法 加上--global是针对当前用户起作用的,如果不加,那只针对当前的仓库起作用. git config --global alias.<自己想要的命令行> & ...
- CentOS 8迁移Rocky Linux 8手记
前言 由于CentOS 8的支持已经到期了,.NET 6也不支持了,然后也无法升级,导致使用起来已经非常不便,无奈只有迁移服务器这个选项了. 选择发行版本一直是一个比较头疼的问题,首先我不是专门运维的 ...
- 手写useState与useEffect
手写useState与useEffect useState与useEffect是驱动React hooks运行的基础,useState用于管理状态,useEffect用以处理副作用,通过手写简单的us ...
- 按照 Promise/A+ 规范逐行注释并实现 Promise
0. 前言 面试官:「你写个 Promise 吧.」 我:「对不起,打扰了,再见!」 现在前端越来越卷,不会手写 Promise 都不好意思面试了(手动狗头.jpg).虽然没多少人会在业务中用自己实现 ...
- vue3 vite 系统标题 系统名称统一配置
想要统一配置系统名称 或者其他的,需要在vue3中使用 vite 的环境变量 vite 的环境变量 需要创建两个文件(和 vite.config.js 文件同一目录) .env.development ...