新年伊始,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 模式下建立多餘資料來源問題
-
修復列值匹配影子演演算法資料型別轉換異常