乐趣区

关于shardingsphere:Apache-ShardingSphere-512-发布|全新驱动-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://shardingsphere.apache…

🔗 更新日志

https://github.com/apache/sha…

🔗 我的项目地址

https://shardingsphere.apache…

社区建设

此次 Apache ShardingSphere 5.1.2 版本的公布,共有 54 位 Contributor 提交了 1028 个 PR,感激社区搭档们的大力支持。

作者
吴伟杰,SphereEx 基础设施研发工程师,Apache ShardingSphere PMC。专一于 Apache ShardingSphere 接入端及 ShardingSphere 子项目 ElasticJob 的研发。

退出移动版