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 在云原生方向前进。

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

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 等异构存储节点,反之亦然。

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关
  • *以 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,感谢社区伙伴们的大力支持。

Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

作者
吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。专注于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。
欢迎点击链接,了解更多内容:
Apache ShardingSphere 官网:https://shardingsphere.apache.org/
Apache ShardingSphere GitHub 地址:https://github.com/apache/shardingsphere
SphereEx 官网:https://www.sphere-ex.com

Original: https://www.cnblogs.com/sphereex/p/16396172.html
Author: SphereEx
Title: Apache ShardingSphere 5.1.2 发布|全新驱动 API + 云原生部署,打造高性能数据网关

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/619923/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Java常用类解析

    包装类 包装类值基本数据类型对应的引用类型,包装类封装好的方法能够很方便的让我们操作基本数据类型而不需要自己再去编写不必要的代码。 基本数据类型 包装类 boolean Boole…

    数据库 2023年6月16日
    064
  • Servlet中跨域问题详解

    一、什么是跨域 跨域,是指浏览器不能执行其他网站的脚本。它是由浏览器的同源策略造成的,是浏览器对JavaScript实施的安全限制。 浏览器从一个域名的网页去请求另一个域名的资源时…

    数据库 2023年6月14日
    091
  • mysql 常用的命令2

    找出每个部门,不同工作岗位的最高薪资。 mysql> select deptno,job,max(sal) from emp group by deptno,job; +&#…

    数据库 2023年5月24日
    065
  • DDD(Domain Driver Design)领域驱动模型

    Domain Primitive(DP) DP概念DP 是 DDD 中的一个基础概念,是 DDD 中可以执行的一个最小单元,最直接的体现是,将业务相关的参数定义在一个特定的领域中(…

    数据库 2023年6月6日
    0109
  • MVCC多版本并发控制的理解

    前置知识 当前读与快照读 当前读什么是当前读:读取的是 最新的数据,不会读到老数据。 何时&…

    数据库 2023年6月14日
    068
  • 操作线程的方法

    操作线程的方法操作线程有很多方法,这些方法可以使线程从某一种状态过渡到另一种状态。 线程的休眠能控制线程行为的方法之一是调用sleep()方法,sleep()方法可以指定线程休眠的…

    数据库 2023年6月16日
    073
  • MySQL之SQL语句优化

    即优化器利用自身的优化器来对我们写的SQL进行优化,然后再将其放入InnoDB引擎中执行。 移除不必要的括号 select * from x where ((a = 5)); 上面…

    数据库 2023年5月24日
    074
  • select,poll,epoll

    select、poll、epoll 区别总结: 底层实现 select/poll 首先把关注的Socket集合从用户态拷贝到内核态,然后由内核检测事件,遍历整个集合(由于线性结构实…

    数据库 2023年6月16日
    087
  • SQL基础一

    一、SQL基本术语 数据库管理系统(DBMS,database management system)。人们通常用数据库这个术语来代表他们使用的数据库软件,这是不正确的。确切地说,数…

    数据库 2023年6月16日
    060
  • 教师节我用Python做了个学生点名系统送给老师当礼物,这回毕业稳了

    今年教师节前夕,我特意用Python做了个学生点名系统,非常好用,送给各科老师、辅导员当节日礼物,老师们都喜滋滋,说平常逃课就原谅我了,我心想,这次毕业应该不是问题了~ 本文背景 …

    数据库 2023年6月14日
    076
  • mysql的半同步复制

    binlog dump线程何时向从库发送binlog mysql在server层进行了组提交之后,为了提高并行度,将提交阶段分为了 flush sync commit三个阶段,根据…

    数据库 2023年6月9日
    077
  • 23种设计模式之迭代器模式

    文章目录 概述 迭代器模式的优缺点 迭代器模式的结构和实现 * 模式结构 模式实现 总结 ; 概述 迭代器模式就是顺序访问聚集中的对象,一般来说,集合中非常常见,如果对集合类比较熟…

    数据库 2023年6月6日
    059
  • Java8Stream流2

    上期对stream流大致总结了一下,后面又做了一些练习,大家可以参考一下。 首先需要建一个 Product的实体类,后面会用到 @Data @AllArgsConstructor …

    数据库 2023年6月11日
    068
  • MySQL实战45讲 17

    17 | 如何正确地显示随机消息? 场景:从词汇表中随机选择三个单词。 [En] Scene: three words are randomly selected from a v…

    数据库 2023年5月24日
    088
  • 解决.net6 Docker容器 DateTime.Now 获取时间相差8小时问题(转载)

    .net6项目中使用DateTime.Now获取到的时间比本地时间要差8小时,但是docker容器中,使用date获取的时间是正确的,网上提供了很多种方法,主要有以下三种方法,其中…

    数据库 2023年6月9日
    0131
  • 2010最危险的编程错误(转)

    网络无处不在的今天,安全问题日益严峻,攻击事件层出不穷,应该说,软件系统中代码存在安全漏洞是主要的祸因之一。而这实际上反映了软件开发人员在编程的安全性方面缺乏必要的培训和常识。 由…

    数据库 2023年6月11日
    084
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球