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

相關鏈接

🔗 下載鏈接

//github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md

🔗 更新日誌

//github.com/apache/shardingsphere/blob/master/RELEASE-NOTES.md

🔗 項目地址

//shardingsphere.apache.org/

社區建設

此次 Apache ShardingSphere 5.1.2 版本的發布,共有 54 位 Contributor 提交了 1028 個 PR,感謝社區夥伴們的大力支援。

作者
吳偉傑,SphereEx 基礎設施研發工程師,Apache ShardingSphere PMC。專註於 Apache ShardingSphere 接入端及 ShardingSphere 子項目 ElasticJob 的研發。