ShardingSphere x Seata,一致性更強的分散式資料庫中介軟體

支付寶技術團隊發表於2019-09-04

日前,分散式資料庫中介軟體 ShardingSphere 將 Seata 分散式事務能力進行整合,旨在打造一致性更強的分散式資料庫中介軟體。

背景

資料庫領域,分散式事務的實現主要包含:兩階段的 XA 和 BASE 柔性事務。

XA 事務底層,依賴於具體的資料庫廠商對 XA 兩階段提交協議的支援。通常,XA 協議通過在 Prepare 和 Commit 階段進行 2PL(2 階段鎖),保證了分散式事務的 ACID,適用於短事務及非雲化環境(雲化環境下一次 IO 操作大概需要 20ms,兩階段鎖會鎖住資源長達 40ms,因此熱點行上的事務的 TPS 會降到 25/s 左右,非雲化環境通常一次 IO 只需幾毫秒,因此鎖熱點資料的時間相對較低)。

但在 BASE 柔性事務方面,ShardingSphere 提供的接入分散式事務的 SPI,只適用於對效能要求較高,對一致性要求比較低的業務。

Seata 核心的 AT 模式適用於構建於支援本地 ACID 事務的關係型資料庫。通過整合 Seata,其 AT 模式在一階段提交+補償的基礎上,通過 TC 的全域性鎖實現了 RC 隔離級別的支援,可提高 ShardingSphere 的分散式事務的一致性。

整合方案

整合 Seata AT 事務時,需要把 TM,RM,TC 的模型融入到 ShardingSphere 分散式事務的 SPI 的生態中。在資料庫資源上,Seata 通過對接 DataSource 介面,讓 JDBC 操作可以同 TC 進行 RPC 通訊。同樣,ShardingSphere 也是面向 DataSource 介面對使用者配置的物理 DataSource 進行了聚合,因此把物理 DataSource 二次包裝為 Seata 的 DataSource 後,就可以把 Seata AT 事務融入到 ShardingSphere 的分片中。

在 Seata 模型中,全域性事務的上下文存放線上程變數中,通過擴充套件服務間的 transport,可以完成執行緒變數的傳遞,分支事務通過執行緒變數判斷是否加入到整個 Seata 全域性事務中。而 ShardingSphere 的分片執行引擎通常是按多執行緒執行,因此整合 Seata AT 事務時,需要擴充套件主執行緒和子執行緒的事務上下文傳遞,這同服務間的上下文傳遞思路完全相同。

ShardingSphere x Seata,一致性更強的分散式資料庫中介軟體

Quick Start

ShardingSphere 已經實現了 base-seata-raw-jdbc-example,大家可以自行進行嘗試:

https://github.com/apache/incubator-shardingsphere-example/tree/dev/sharding-jdbc-example/transaction-example/transaction-base-seata-example/transaction-base-seata-raw-jdbc-example

操作手冊:

1、按照 seata-work-shop 中的步驟,下載並啟動 seata server。

https://github.com/seata/seata-workshop

參考 Step6 和 Step7 即可。

2、在每一個分片資料庫例項中執行 resources/sql/undo_log.sql 指令碼,建立 undo_log 表

3、Run YamlConfigurationTransactionExample.java

關於 ShardingSphere

ShardingSphere 是一套開源的分散式資料庫中介軟體解決方案組成的生態圈,它由 Sharding-JDBC、Sharding-Proxy 和 Sharding-Sidecar(計劃中)這 3 款相互獨立的產品組成,提供標準化的資料分片、分散式事務和資料庫治理功能,可適用於如 Java 同構、異構語言、容器、雲原生等各種多樣化的應用場景。目前,已經擁有超過 8000 的 Star,57 位 Contributors。

關於 Seata

Seata 是阿里巴巴和螞蟻金服共同開源的分散式事務中介軟體,融合了雙方在分散式事務技術上的積累,並沉澱了新零售、雲端計算和新金融等場景下豐富的實踐經驗,以高效並且對業務 0 侵入的方式,解決微服務場景下面臨的分散式事務問題。目前,已經擁有超過 9900 的 Star,83 位 Contributors。

ShardingSphere x Seata,一致性更強的分散式資料庫中介軟體


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69904796/viewspace-2655932/,如需轉載,請註明出處,否則將追究法律責任。

相關文章