Apache ShardingSphere 5.1.0 版本正式釋出

2022-02-21 17:00:06

新年伊始,Apache ShardingSphere 迎來了今年的第一個版本的更新,5.1.0 版本正式釋出。自去年 11 月 Apache ShardingSphere 5.0.0 GA 版本釋出以來,ShardingSphere 正式開啟了包含資料分片、分散式事務、資料脫敏、SQL 審計、資料庫閘道器等為核心功能的分散式生態打造之路,同時自發布至今的 3 個多月時間裡,ShardingSphere 社群也收到了來自各個領域的開發者、合作者以及使用者等多方面的反饋,這些反饋為我們持續打磨產品帶來了很大的幫助。本文將和大家詳細介紹 Apache ShardingSphere 5.1.0 版本包含的更新內容。

孟浩然,SphereEx 高階研發工程師,Apache ShardingSphere PMC。曾就職於京東科技,負責資料庫產品研發,熱愛開源,關注資料庫生態,目前專注於 ShardingSphere 資料庫中介軟體開發以及開源社群建設。

本次 5.1.0 版本的釋出基於使用者對 5.0.0 GA 版本的反饋以及 ShardingSphere 社群對生態打造的規劃來共同推進,在核心以及各個功能模組都進行了重大的優化:

  • 核心層面

打造強大且穩定的核心是 ShardingSphere 一直以來的目標,本次更新修復了大量包括 PostgreSQL 以及 openGauss SQL 解析的支援問題,開始支援函數解析、binlog 語句解析,優化改寫引擎、大量單表載入效率,進一步提升核心整體效能,同時開始支援 SQL Hint 功能,為使用者使用強制路由功能提供了更便捷的方式。

  • 接入端

在代理端,除了修復 MySQL/PostgreSQL 協定解析的問題之外,為 openGauss 新增 SCRAM SHA-256 認證方式支援,優化 openGauss 批次插入協定,提升資料批次插入效能;在 JDBC 端,移除對空規則的校驗,在無規則情況下依然可以使用 JDBC,同時優化僅載入指定 schemaName 的邏輯資料庫的後設資料,提升啟動速度。

  • 彈性伸縮

彈性伸縮在本次版本做了很大程度的調整,首先,原 scaling 模組調整為 kernel 下的 data-pipeline 模組,該模組未來將提供除資料遷移之外的其它的資料處理能力,其次 scaling 的設定也從 server.yaml 移動至 config-sharding.yaml 組態檔中,彈性伸縮將和資料分片一起配合使用,為使用者提供更加完善的分庫分表服務。

  • DistSQL

新增大量實用語法的實現,為使用者管理 ShardingSphere 分散式資料庫生態提供了更多的工具,同時優化了部分分散式叢集治理的能力,如通過 instance_id 啟用/禁用範例,當只有一個從庫時,提示使用者不能進行禁用等,大大提升了使用者體驗。

  • 讀寫分離和高可用

讀寫分離和高可用功能 API 均進行了優化,讀寫分離支援靜態和動態 2 種設定型別,動態設定需要和高可用配合使用。高可用設定則進行了設定和演演算法分離,讓設定更統一簡潔,同時增加了 Spring Boot 和 Spring Namespace 對高可用功能的設定支援以及 openGauss 高可用功能的實現。

  • 影子庫

影子庫功能在本版本中也做了部分優化,支援邏輯資料來源傳遞,為列匹配影子演演算法增加不支援資料型別校驗器,註解影子演演算法重構為 HINT 影子演演算法,移除設定中的 enable 屬性,同時優化了影子演演算法判定邏輯,提升效能。

以上介紹的只是部分功能的部分更新內容,5.1.0 版本包含了來自社群 1000+ 的提交,在 5.0.0 GA 的基礎上,對核心能力、核心功能、整體效能以及使用者體驗上都做了很大的提升,歡迎大家更新使用。

5.1.0 具體版本釋出資訊如下:

新特性

  • 支援 SQL Hint 功能

  • 彈性伸縮:新增限流設定及預設實現(rateLimiter)

  • 彈性伸縮:新增全量資料匹配校驗演演算法(DATA_MATCH)

  • 彈性伸縮:新增資料讀取批次大小自定義(readBatchSize)避免可能的 OOME

  • 彈性伸縮:新增 sourceWritingStopAlgorithm SPI 介面及預設空實現,新增 sourceWritingStopper

  • 彈性伸縮:新增 checkoutLockAlgorithm SPI 介面及預設空實現,新增設定 checkoutLocker

  • 彈性伸縮:config-encrypt.yaml 新增 dataConverters 設定

  • 新增 DistSQL 語法:SHOW AUTHORITY RULE

  • 新增 DistSQL 語法:SHOW TRANSACTION RULE

  • 新增 DistSQL 語法:ALTER TRANSACTION RULE

  • 新增 DistSQL 語法:SHOW SQL_PARSER RULE

  • 新增 DistSQL 語法:ALTER SQL_PARSER RULE

  • 新增 DistSQL 語法:ALTER DEFAULT SHARDING STRATEGY

  • 新增 DistSQL 語法:DROP DEFAULT SHARDING STRATEGY

  • 新增 DistSQL 語法:CREATE DEFAULT SINGLE TABLE RULE

  • 新增 DistSQL 語法:SHOW SINGLE TABLES

  • 新增 DistSQL 語法:SHOW SINGLE TABLE RULES

  • 新增 DistSQL 語法:SHOW SHARDING TABLE NODES

  • 新增 DistSQL 語法:CREATE/ALTER/DROP SHARDING KEY GENERATOR

  • 新增 DistSQL 語法:SHOW SHARDING KEY GENERATORS

  • 新增 DistSQL 語法:REFRESH TABLE METEDATA

  • 新增 DistSQL 語法:PARSE SQL,輸出解析 SQL 得到的抽象語法樹

    新增 DistSQL 語法:SHOW UNUSED SHARDING ALGORITHMS

  • 新增 DistSQL 語法:SHOW UNUSED SHARDING KEY GENERATORS

  • 新增 DistSQL 語法:CREATE/DROP SHARDING SCALING RULE

  • 新增 DistSQL 語法:ENABLE/DISABLE SHARDING SCALING RULE

  • 新增 DistSQL 語法:SHOW SHARDING SCALING RULES

  • 新增 DistSQL 語法:SHOW INSTANCE MODE

  • 新增 DistSQL 語法:COUNT SCHEMA RULES

  • 資料庫發現支援 Spring Boot 設定方式

  • 資料庫發現支援 Spring Namespace 設定方式

  • 資料庫發現新增支援 openGauss

  • 影子庫功能支援邏輯資料來源傳遞

  • 列匹配影子演演算法新增不支援資料型別校驗器

  • 脫敏單資料來源場景下,提供 xa start/end/prepare/commit/recover 支援

API 變更

  • 彈性伸縮:scaling 設定從 server.yaml移到 config-sharding.yaml
  • 彈性伸縮:ScalingClusterAutoSwitchAlgorithm 介面重新命名、方法引數重構

  • 彈性伸縮:資料一致性校驗 API 方法重新命名及返回型別修改

  • DistSQL:重新設計資料庫發現相關的 DistSQL 語法

  • DistSQL:GENERATED_ KEY 關鍵字調整為 KEY_ GENERATE_STRATEGY

  • Native authority provider 已標記為棄用,將在未來版本中移除

  • 資料庫發現模組 API 重構,設定和演演算法分離

  • 讀寫分離模組 API 重構,增加靜態和動態設定

  • 影子庫 API 變更,移除 enable 屬性

  • 影子庫 API 變更, 影子演演算法型別變更

增強

  • 提升大量單表載入效能

  • 刪除自動新增的 order by 子句

  • 優化繫結表關聯查詢不帶分片關聯條件的路由邏輯

  • 支援路由結果不變時 update 語句更新分片鍵

  • 優化改寫引擎執行效能

  • 使用 federation 引擎支援 select union/union all ...語句

  • 支援路由結果不變時 insert on duplicate key update 語句更新分片鍵

  • 使用 UNION ALL 改寫簡單查詢語句的 SQL 路由結果以提升效能

  • Proxy 支援 autocommit 狀態

  • ShardingSphere-Proxy openGauss 支援 SCRAM SHA-256 認證方式

  • 從 Proxy 啟動指令碼移除屬性 java.net.preferIPv4Stack=true

  • JDBC 端去掉對空規則的校驗

  • 優化 openGauss 批次插入協定效能

  • 預設禁用 Netty 洩漏探測器

  • PostgreSQL / openGauss Proxy 支援 Describe Prepared Statement

  • PostgreSQL Proxy 資料批次插入效能優化

  • 彈性伸縮:DataConsistencyChecker 初步支援流式資料校驗

  • DistSQL:SHOW INSTANCE LIST 的結果中增加 instance_id

  • DistSQL:啟用/禁用 proxy 範例時可使用 instance_id 進行操作

  • DistSQL:CREATE SHARDING TABLE RULE時支援自動建立演演算法,減少建立 RULE 步驟

  • DistSQL:CREATE SHARDING TABLE RULE時支援指定已存在的 KeyGenerator

  • DistSQL:DROP DATABASE 支援 IF EXISTS 選項

  • DistSQL:SHARDING TABLE RULE 中的 DATANODES 支援列舉形式的 inline 表示式

  • DistSQL:CREATE/ALTER SHARDING TABLE RULE支援複合分片演演算法

  • DistSQL:SHOW SHARDING TABLE NODES支援非 inline 場景(範圍、時間等)

  • DistSQL:當讀寫分離規則中僅存一個讀庫時,不允許禁用

  • 影子演演算法判定邏輯優化,提升效能

重構

  • 重構 Federation 引擎內部流程

  • 使用預備語句請求 Proxy 時避免事務語句被解析多次

  • 彈性伸縮:scaling 模組重構到 pipeline 模組

  • 彈性伸縮:scaling job 設定結構多處調整

  • 彈性伸縮:預計算任務拆分並儲存到 job 設定,簡化實現

  • 彈性伸縮:pipeline-core 初步支援 encrypt 複用流程

  • 彈性伸縮:初步支援 scaling 和 encrypt 同時進行

  • 彈性伸縮:新增 input 和 output 設定,workerThread 和 rateLimiter 移入其中

  • 彈性伸縮:blockQueueSize 移入 streamChannel

  • 彈性伸縮:jobId 型別從整型調整為字元型

  • 優化 JDBC 只載入指定邏輯庫

  • 優化註冊中心原資料儲存結構

  • 註解影子演演算法重構為 HINT 影子演演算法

漏洞修復

  • 支援函數解析

  • 修復 alter table drop constrian 語句

  • 優化 optimize table 語句路由

  • 支援 resource group 語句的路由

  • 支援解析 binlog 語句

  • 支援 PostgreSQL / openGauss '與'和'或' 運算

  • 支援解析 openGauss insert on duplicate key 語法

  • 支援 PostgreSQL / openGauss union 解析

  • 修復查詢欄位中包含關鍵字的問題

  • 修復 function 解析引數的異常

  • 修復子查詢沒有別名查詢異常的問題

  • 修復 utc timestamp 函數解析異常的問題

  • 修復 alter column 加解密異常

  • 支援 alter column with position encrypt column 的加解密異常

  • 修復 PostgreSQL 支援 delete with schema

  • 修復 Oracle 解析歧義導致的路由結果異常

  • 修復使用分片、加解密功能時 projection count 錯誤問題

  • 修復使用影子庫、讀寫分離出現的 NPE 問題

  • 修復真實表大小寫敏感導致的後設資料錯誤

  • 修復加解密多表關聯查詢改寫異常

  • 修復加解密表級別 queryWithCipherColumn 引數導致的改寫異常

  • 修復中文解析

  • 修復 exists 子查詢加密異常

  • 修復分片條件中出現 MySQL BINARY 關鍵字導致的全路由

  • 修復使用 JDBCMemoryQueryResult 處理的語句時,getResultSet 方法結果為空異常

  • 修復建立儲存函數/過程時,錯誤的分片表校驗邏輯

  • 修復部分使用者端連線 PostgreSQL Proxy 報 Charset 為 null 的問題

  • 修復 MySQL 使用 PreparedStatement 執行 commit 導致事務狀態不正確的問題

  • 修復 PostgreSQL 以非英文語言返回錯誤資訊會導致 Proxy 無法返回正確的資料給使用者端

  • 修復在 Windows 環境下,Proxy 載入路徑包含空格的組態檔會報錯

  • 修復 Proxy flush 時機過早導致事務狀態不正確的問題

  • 修復 Proxy 無法正確返回二進位制無符號數值的問題

  • 修復 MySQL Proxy PreparedStatement 協定實現不正確的問題

  • 修復非事務中 openGauss 執行批次插入協定持有過多連線的問題

  • 彈性伸縮:修復 XA 初始化連線洩露問題,資料校驗會觸發

  • 彈性伸縮:PostgreSQL 多資料來源情況下複製流繫結異常

  • 彈性伸縮:PostgreSQL 增量同步階段 update 記錄導致同步報錯

  • 彈性伸縮:修復 MySQL 5.5 檢查 BINLOGROWIMAGE 報錯

  • 彈性伸縮:DataConsistencyChecker 修復 PostgreSQL xml 資料型別校驗失敗

  • DistSQL:修復資料庫發現和讀寫分離共用時,SHOW READWRITE_SPLITTING RULES 資料缺失問題

  • DistSQL:修復資料庫發現和讀寫分離共用時,SHOW READWRITE_SPLITTING READ RESOURCES資料缺失的問題

  • DistSQL:修復 CREATE SHARDING TABLE RULE 語句未指定分庫、分表策略時的空指標異常

  • DistSQL:修復 PREVIEW SQL by schema.table 時發生 NPE 的問題

  • DistSQL:修復 DISABLE 語句在某些情況下可能禁用讀寫分離主庫的問題

  • DistSQL:修復 DISABLE INSTANCE 在某些情況可能禁用當前範例的問題

  • 修復當 provider 為 SCHEMAPRIVILEGESPERMITTED 時,使用者可能查詢到未授權的邏輯庫的問題

  • 修復當 authority provider 未設定時,發生 NPE 的問題

  • 修復資料庫發現無法修改 cron 設定

  • 修復讀寫分離權重演演算法單讀節點時異常

  • 修復非 Memory 模式下建立多餘資料來源問題

  • 修復列值匹配影子演演算法資料型別轉換異常