CECTC/dbpack: 用Golang編寫的分散式事務中介軟體
DBPack是一種以AT事務模式實現的DB網格解析,是一種分散式事務模型,不侵入業務邏輯,具有高效能。
分散式事務、讀寫拆分和分片的資料庫代理!支援任何語言!它可以部署為 pod 中的 sidecar。
DBPack 意為資料庫叢集工具包。它可以作為一個Pod中的sidecar部署,它遮蔽了複雜的基礎邏輯,使業務開發不需要依賴特定的SDK,簡化了開發過程,提高了開發效率。
特徵
- 支援MYSQL協議
- 受kubernetes啟發的簡單易用的分散式事務解決方案
- 支援讀寫拆分,支援透過Hint自定義SQL路由
- 作為sidecar部署,支援任何語言
- sharding:支援分表查詢,支援order by,支援limit
DBPack 與 Seata AT 事務有點不同,它可以作為一個 sidecar 部署在 k8s 中,這樣任何程式語言都可以使用這個 sidecar 來處理分散式事務。它還支援分片資料庫和表
分散式事務中介軟體的工作流描述:
- Slient 向 Aggregation Service 的 DBPack 代理傳送 HTTP 請求。(注意:請求地址和埠應該配置為 DBPack 代理而不是實際的聚合服務 API 地址)。
- DBPack 生成唯一的 XID(全域性事務 ID),並將其儲存在 ETCD 中。
- 如果全域性事務開始成功(失敗將結束事務),聚合服務可以透過 HTTP 頭(X-Dbpack-Xid)獲取 XID。然後聚合服務可以向 Service1 傳送 API 請求並將 XID 傳遞給它。
- Service1收到XID後,向DBPack傳送業務SQL,代理會為Service1註冊分支事務(生成branchID,存入ETCD...)
- Service1註冊後,DBPack會為業務SQL生成undo_log,然後undo_log會隨著Service1的本地事務一起提交。
- Service2 將執行與 Service1 相同的 step4、5。
- Aggregation Service 可以從 Service1 和 Service2 獲取 API 結果,並決定是全域性提交還是回滾。如果兩個 API 都成功,它會向 DBPack 響應 HTTP 200。如果失敗,它會響應除 200 之外的其他狀態碼。DBPack 將相應地在 ETCD 中將全域性事務更新為“commiting”或“rollbacking”。
- 透過 ETCD watch 機制,Service1 和 Service2 將知道是提交還是回滾他們的分支事務。(如果是提交,他們會刪除 undo_log;如果是回滾,他們會執行 undo_log。)
- 在所有分支提交或回滾後,分支狀態將在 ETCD 中更新。Aggregation Service 的 DBPack 代理會知道全域性事務已經完成,然後它會從 ETCD 中刪除 XID 和 BranchID 資訊。
相關文章
- LAF-DTX分散式事務中介軟體分散式
- 分散式事務中介軟體Seata的設計原理分散式
- DBPack 賦能 python 微服務協調分散式事務Python微服務分散式
- 使用強大的DBPack處理分散式事務(PHP使用教程)分散式PHP
- 分散式事務中介軟體 Fescar—RM 模組原始碼解讀分散式原始碼
- 中介軟體---分散式任務排程---Celery分散式
- 分散式訊息中介軟體分散式
- golang 中介軟體Golang
- 中介軟體---分散式跟蹤---Pinpoint分散式
- 分散式事務(一)—分散式事務的概念分散式
- golang如何優雅的編寫事務程式碼Golang
- [分散式][訊息中介軟體]訊息中介軟體如何實現每秒幾十萬的高併發寫入分散式
- DTM:Golang中微服務架構的分散式事務框架Golang微服務架構分散式框架
- Golang 實現 Redis(8): TCC分散式事務GolangRedis分散式
- golang http 中介軟體GolangHTTP
- 微服務分散式事務解決方案-開源軟體seata微服務分散式
- 乾貨 | 揭秘京東數科強一致、高效能的分散式事務中介軟體JDTX分散式
- 十分鐘學會用 Go 編寫 Web 中介軟體GoWeb
- Redux 進階 -- 編寫和使用中介軟體Redux
- 叢集及分散式定時任務中介軟體MEE_TIMED分散式
- 事務使用中如何避免誤用分散式事務分散式
- 用Go語言寫HTTP中介軟體GoHTTP
- 分散式事務(3)---RocketMQ實現分散式事務原理分散式MQ
- 深入理解阿里分散式訊息中介軟體阿里分散式
- 分散式資料庫中介軟體 MyCat 搞起來!分散式資料庫
- MyCat的坑如何在分散式中介軟體DBLE上改善分散式
- 分散式事務和分散式hash分散式
- SpringBoot分散式任務中介軟體開發 附視訊講解 (手把手教你開發和使用中介軟體)Spring Boot分散式
- 分散式事務(4)---RocketMQ實現分散式事務專案分散式MQ
- 分散式事務框架 seata-golang 通訊模型詳解分散式框架Golang模型
- 理解分散式事務分散式
- 分散式事務概述分散式
- 聊聊分散式事務分散式
- seata 分散式事務分散式
- 本地事務和分散式事務的區別分散式
- 分散式系統(三)——分散式事務分散式
- 分散式事務~從seata例項來學習分散式事務分散式
- MassTransit | 基於StateMachine實現Saga編排式分散式事務Mac分散式