Apache ShardingSphere 5.1.2 釋出|全新驅動 API + 雲原生部署,打造高效能資料閘道器

SphereEx發表於2022-06-21

在 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 的研發。

相關文章