高性能数据网关的云原生部署+新的API驱动。启用Apache...

336 阅读12分钟

高性能数据网关的云原生部署+新的API驱动。Apache ShardingSphere5.1.2正式发布

继Apache ShardingSphere 5.1.1发布后,我们的社区整合了来自世界各地贡献者的1028条PR,为您带来了最新的5.1.2版本。新版本在功能、性能、测试、文档、示例等方面都有很多改进。

突出的新功能包括。

  • ShardingSphere-Proxy Helm Chart。
  • SQL方言翻译。
  • 使用ShardingSphere-JDBC作为驱动。

这些新功能提升了ShardingSphere的数据网关能力,使ShardingSphere能够在云上部署,同时优化用户体验。

除上述新功能外,本次更新还在用户体验方面改进了SQL解析支持、内核、运行时模式和PostgreSQL/openGauss模式的弹性扩展支持、自动扩展、交易和DistSQL

这篇文章将为您介绍 ShardingSphere 5.1.2 的更新内容。

新功能

使用Helm配置ShardingSphere-Proxy

ShardingSphere-Proxy提供了Docker镜像,用于在容器中部署。但是,对于需要在Kubernetes上部署ShardingSphere-Proxy的人来说,必须经过一些程序,如数据库驱动安装、配置安装、自定义算法安装等,这使得部署过程相对繁琐,造成了较高的运营和维护成本。

本次更新带来了新的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,反之亦然。

使用ShardingSphere-JDBC作为驱动

在过去的版本中,ShardingSphere-JDBC是以数据源的形式提供给用户的。不使用Datasource的项目或工具,以前需要首先进行修改,以便能够引入ShardingSphere-JDBC,这就增加了开发成本。

在Apache ShardingSphere 5.1.2中,ShardingSphere-JDBC实现了标准化的JDBC驱动接口,可以将ShardingSphere-JDBC作为一个驱动引入。

用户可以通过DriverManager直接获得Connection。

Class.forName("org.apache.shardingsphere.driver.ShardingSphereDriver");

或者使用数据源来获取连接。

// Take HikariCP as an example

对现有能力的优化

内核

在这次更新中,ShardingSphere合并了很多PR,以改善SQL解析支持。SQL 解析的优化在更新日志中占了很大比例。

ShardingSphere 在 5.1.1 中提供了对 PostgreSQL / openGauss 模式的初步支持。

在这次 5.1.2 更新中,对 PostgreSQL / openGauss 模式的内核、集群模式和自动扩展支持都得到了改进。例如,元数据对中加入了对模式结构的支持,在内核和自动扩展中也支持模式定制。

ShardingSphere-Proxy

随着使用ARM CPU的服务器市场越来越流行,ShardingSphere-Proxy也在Docker上为arm64架构提供镜像。

在谈到MySQL时,ShardingSphere-Proxy修复了无法接收超过8MB数据包的问题,并进一步支持接收大于16MB的总数据。

自动缩放

除了支持PostgreSQL模式的定制,自动缩放还实现了在迁移PostgreSQL时自动创建表,并修复了PostgreSQL增量迁移遇到空字段值时会报错的问题。除了这些功能外,自动缩放还减少了迁移过程中的资源消耗,并为openGauss 3.0的增量迁移提供了支持。

发布说明

ShardingSphere 5.1.2的完整发布说明可在以下章节找到。请注意,本次更新调整了少量的API,所以请参考API调整部分以了解更多细节。

新功能

内核:MySQL 和 PostgreSQL 的 SQL 方言转换的 alpha 版本。

内核。支持PostgreSQL和openGauss的自定义模式。

内核。支持PostgreSQL和openGauss的创建/修改/删除视图语句。

内核:支持openGauss的游标语句。

内核:支持使用系统库的定制。

内核:支持获取openGauss和MySQL的创建表语句。

内核:支持获取PostgreSQL的创建表语句。

访问终端:正式支持快速部署ShardingSphere-Proxy集群,其中包括使用Helm在Kubernetes中的ZooKeeper集群。

访问终端:支持ShardingSphere JDBC驱动。

自动扩展:支持 PostgreSQL 自动建表。

自动扩展:支持PostgreSQL和openGauss自定义模式表的迁移。

自动扩展:支持字符串主键表的迁移。

操作模式。治理中心支持PG/openGauss三层结构。

操作模式。治理中心支持数据库级分布式锁定。

优化功能

内核:支持PostgreSQL和openGauss的复制语句。

内核:支持PostgreSQL更改/删除索引语句。

内核:支持MySQL更新强制索引语句。

内核:支持openGauss的创建/修改/删除模式语句。

内核:优化RoundRobinReplicaLoadBalanceAlgorithm和RoundRobinTrafficLoadBalanceAlgorithm算法逻辑。

内核:优化前端驱动数据库类型和后端不匹配时的元数据加载逻辑。

内核:重构元数据加载逻辑。

内核:优化显示processlist语句功能。

内核:改进了涉及大量表的情况下的加载性能。

内核:支持注释语句的执行

内核:支持PostgreSQL和openGauss分片场景下的视图语句执行。

内核:支持 Oracle CREATE ROLLBACK SEGMENT 语句。

内核:支持解析openGauss的DROP类型

内核:支持解析openGauss的ALTER类型

内核:支持解析Oracle DROP DISKGROUP

内核:支持解析Oracle CREATE DISKGROUP

内核:支持解析Oracle DROP FLASHBACK ARCHIVE

内核:支持解析openGauss CHECKPOINT

内核:支持解析Oracle CREATE FLASHBACK ARCHIVE

内核:支持解析PostgreSQL关闭

内核:支持解析openGauss的DROP CAST

内核:支持解析openGauss的CREATE CAST

内核:支持解析 Oracle CREATE CONTROL FILE

内核:支持解析openGauss DROP DIRECTORY

内核:支持解析openGauss ALTER DIRECTORY

内核:支持解析openGauss CREATE DIRECTORY

内核:支持解析PostgreSQL检查点

内核:支持解析openGauss DROP SYNONYM

内核:支持解析openGauss CREATE SYNONYM

内核:支持解析openGauss ALTER SYNONYM

内核:支持解析PostgreSQL的CALL语句

内核:支持解析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版本

内核:支持解析SQLServer WITH Common Table Expression

内核:优化语句中SubquerySegment的开始和结束索引

内核:重构JoinTableSegment

内核:支持解析Oracle DROP SYNONYM

内核:支持解析Oracle CREATE DIRECTORY

内核:支持解析Oracle CREATE SYNONYM

内核:支持解析SQLServer XmlNamespaces条款

内核:支持解析Oracle更改数据库字典

内核:支持解析SELECT语句的SQLServer条款

内核:支持解析Oracle ALTER DATABASE LINK

内核:支持解析Oracle CREATE EDITION

内核:支持解析Oracle ALTER TRIGGER

内核:支持解析SQLServer的REVERT语句

内核:支持解析PostgreSQL DROP TEXT SEARCH

内核:支持解析PostgreSQL的DROP服务器

内核:支持解析Oracle的ALTER VIEW

内核:支持解析PostgreSQL的删除访问方法

内核:支持解析PostgreSQL DROP ROUTINE

内核:支持解析SQLServer DROP USER

内核:支持解析Oracle的DROP TRIGGER

内核:支持解析PostgreSQL的DROP订阅

内核:支持解析PostgreSQL丢弃操作者类

内核:支持解析PostgreSQL DROP PUBLICATION

内核:支持解析Oracle DROP VIEW

内核:支持解析PostgreSQL DROP TRIGGER

内核:支持解析Oracle DROP DIRECTORY

内核:支持解析PostgreSQL DROP STATISTICS

内核:支持解析PostgreSQL的删除类型

内核:支持解析PostgreSQL DROP RULE

内核:支持解析SQLServer ALTER LOGIN

内核:支持解析PostgreSQL DROP FOREIGN DATA WRAPPER

内核:支持解析PostgreSQL DROP EVENT TRIGGER语句。

访问终端。ShardingSphere-Proxy MySQL支持接收超过16MB大小的请求包。

访问终端。ShardingSphere-Proxy 增加 SO_BACKLOG 配置项。

访问终端。ShardingSphere-Proxy SO_REUSEADDR默认为启用。

访问终端。ShardingSphere-Proxy Docker 镜像支持 aarch64。

访问终端。ShardingSphere-Proxy MySQL支持默认的MySQL版本号。

访问终端。ShardingSphere-Proxy PostgreSQL /openGauss 支持更多字符集。

访问终端。ShardingSphere-Proxy 增加了默认的端口配置项。

自动缩放:在openGauss 3.0中启用thread_pool时,缩放与HA端口的数据同步兼容。

自动缩放:优化PipelineJobExecutor中Zookeeper事件处理的逻辑,避免zk阻塞事件。

自动缩放:缩放数据同步对表名的大小写不敏感。

自动扩展:改进了PostgreSQL/openGauss复制槽的清理。

自动扩展:改进准备阶段的锁保护

自动扩展:改进在PostgreSQL重建场景中删除相同记录后的数据同步。

自动扩展:通过扩展创建的数据源不会在底部被缓存。

弹性扩展:尽可能地重用数据源,以减少数据库连接占用。

DistSQL。REFRESH TABLE METADATA支持指定PostgreSQL的模式。

DistSQL:在ALTER SHARDING TABLE规则下增加对绑定表的检查

运行模式。ShardingSphere-JDBC支持配置数据库连接名。

分布式事务:禁止在事务中执行DistSQL。

分布式事务:自动提交=0,DML会在DDL部分自动打开事务。

错误修正

内核:修复PostgreSQL和openGauss显示语句解析的异常。

内核:修复PostgreSQL和openGauss时间提取函数解析的异常。

内核:修复PostgreSQL和openGauss选择MOD函数解析的异常。

内核:修复读/写分离情况下多模式连接语句的执行异常。

内核:修复了在加密场景下执行创建模式语句的异常。

内核:修复了drop schema if exist语句的异常。

内核:修复LAST_INSERT_ID()的路由错误。

内核:修复无数据源状态下的使用数据库执行异常。

内核:修复带有set var的函数创建语句。

访问:修复ShardingSphere-Proxy PostgreSQL /openGauss Describe PreparedStatement中字段大小写不匹配导致的空指针。

访问:修复ShardingSphere-Proxy PostgreSQL /openGauss在执行模式DDL后没有返回到正确的标签。

自动缩放:修复缩放过程中的MySQL无符号类型错误。

自动扩展:修复一致性检查无法创建数据源时的连接泄漏问题。

自动缩放:修复ShardingSphereDataSource初始化过程中忽略分片以外的规则的问题。

自动缩放:支持作业在准备阶段被关闭。

自动缩放:修复了数据源 url 和 jdbcurl 的兼容性问题。

自动缩放:修复了openGauss数据复制的创建时间问题,以避免可能的增量数据丢失。

自动扩展:改进工作状态的持久性,以确保特殊情况下不会被旧状态覆盖。

自动缩放:修复PostgreSQL在使用TestDecoder进行增量迁移时无法正确解决null的问题。

DistSQL:修复SET VARIABLE变化在独立模式和内存模式下不生效的问题。

DistSQL:修正SHOW INSTANCE LIST与实际数据不一致的问题。

DistSQL:修正分片规则中的大小写问题。

运行模式:修正缩放功能改变分表规则后,新版本中元数据丢失的问题。

分布式事务:修正根据目录获得的索引信息为空的问题。

重构

自动扩展:重构jobConfig,方便重用和扩展新类型的作业。

运行模式:优化注册中心中计算节点的存储结构。

运行模式:使用uuid来替代ip@port作为唯一的实例标识符。

API调整

DistSQL。EXPORT SCHEMA CONFIG调整为EXPORT DATABASE CONFIG

DistSQL。导入SCHEMA CONFIG调整为导入数据库 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

社区喊话

感谢 54 位 ShardingSphere 贡献者所做的努力,他们总共提交了 1028 份 PR,使 ShardingSphere 5.1.2 版本得以发布。

相关链接。

ShardingSphere Github

ShardingSphere Twitter

ShardingSphere Slack

贡献者指南

下载链接

发布说明

作者

吴伟杰

SphereEx基础设施研发工程师,Apache ShardingSphere PMC

Weijie主要负责Apache ShardingSphere的访问终端和ShardingSphere的子项目ElasticJob的研发工作。


高性能数据网关的云原生部署+新的API驱动。Apache...最初发表于Dev Geniuson Medium,人们通过强调和回应这个故事来继续对话。