日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

seata-golang 一周年回顾

發(fā)布時(shí)間:2025/3/20 编程问答 19 豆豆
生活随笔 收集整理的這篇文章主要介紹了 seata-golang 一周年回顾 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

作者 | 劉曉敏
來源 | 阿里巴巴云原生公眾號

Seata 是一款簡單易用,高性能、開源的一站式分布式事務(wù)解決方案。Seata 從2019 年 1 月開源后就受到了大家的追捧,目前已經(jīng)有幾百家企業(yè)在生產(chǎn)環(huán)境進(jìn)行了技術(shù)的落地。

2020 年 4 月,我們開始基于 Seata 著手做多語言 golang 項(xiàng)目,經(jīng)過一年時(shí)間的開發(fā),很高興 seata-golang 發(fā)布了 1.0.0 版本。

今年 4 月 17 號,有幸在成都 gopher meetup 上將 seata-golang 介紹給熱衷于 golang 的 gopher。

會(huì)上我們向大家演示了如何利用 seata-golang 來接入到微服務(wù)中保證服務(wù)間的數(shù)據(jù)一致性,另外還向大家介紹了 Seata 的核心原理、MySQL driver 原理和接入、seata-golang 的未來規(guī)劃,最后就大家關(guān)注的 Seata 相關(guān)的問題做了 QA。

Seata 原理

活動(dòng)上,我們結(jié)合 seata-golang 的demo 和大家分享了 seata 的工作原理。如下圖所示,是一個(gè) seata at 模式的簡單工作流程。

  • TC(即圖中右半部分):Transaction coordinator,它是一個(gè)分布式事務(wù)協(xié)調(diào)器。
  • TM:Transaction manager,它是一個(gè)事務(wù)管理器,負(fù)責(zé)全局事務(wù)的開啟、提交和回滾。
  • RM:Resource Manager,它是管理分支事務(wù)資源的,它加入全局事務(wù)組后,向 TC 報(bào)告分支事務(wù)的執(zhí)行狀態(tài)。
  • XID:TM 開啟全局事務(wù)時(shí),會(huì)在 TC 創(chuàng)建一個(gè) GlobalSession,GlobalSession 的全局唯一標(biāo)識(shí)即為 XID。
  • BranchID:RM 向 TC 注冊分支事務(wù)后,在 TC 側(cè)生成一個(gè) BranchSession,BranchID 全局唯一標(biāo)識(shí)這個(gè) BranchSession。

當(dāng) RM 向 TC 報(bào)告分支執(zhí)行失敗時(shí),TC 會(huì)標(biāo)記這個(gè) BranchSession 的狀態(tài)為失敗,然后 TM 發(fā)起回滾時(shí),TC 根據(jù) XID 找到所有成功執(zhí)行的事務(wù)分支,通知他們進(jìn)行回滾。

MySQL Driver

最近研發(fā)開源出來的mysql driver 項(xiàng)目,基于 go-sql-driver/mysql 1.5.0 版本開發(fā),天然集成了 seata-golang 的分布式事務(wù)能力,完全支持 database/sql 庫這層抽象,由于很多 orm 框架都基于 database/sql 做了封裝,所以對 database/sql 的支持意味著 seata-golang 可以完美無縫地接入各種 orm 框架。

driver 的 mysqlTx 對象執(zhí)行 Commit 或者 Rollback 時(shí),會(huì)根據(jù) mysqlConn 的 connCtx 是否有值來決定是否和 tc 交互,報(bào)告分支事務(wù)的執(zhí)行狀態(tài)。如果執(zhí)行 Commit,connCtx 有值則把 sqlUndoItemsBuffer 中的 undoLog 和業(yè)務(wù)數(shù)據(jù)一起提交到數(shù)據(jù)庫,然后報(bào)告 tc 事務(wù)分支提交的狀態(tài)(成功還是失敗),否則執(zhí)行正常的提交。如果執(zhí)行 Rollback,connCtx 有值則回滾然后向 tc 報(bào)告分支執(zhí)行失敗,tc 會(huì)根據(jù)這個(gè)狀態(tài)回滾整個(gè)全局事務(wù),connCtx 沒有值則只需正常回滾。

上圖是 undoLog json 序列化后的結(jié)構(gòu)數(shù)據(jù),我們可以看到這條數(shù)據(jù)修改之前,它的 name 是 “TXC”,修改之后它的 name 是 “GTS”,如果對它進(jìn)行回滾,則生成一個(gè)反向的補(bǔ)償語句:update product set name = ‘TXC’ since = 2014 where id = 1。如果是 insert 操作,則反向補(bǔ)償操作為 delete,如果是一個(gè) delete 操作則方向補(bǔ)償操作為 insert。

未來規(guī)劃

社區(qū)已經(jīng)有小伙伴將 mysql driver集成到 gorm,并將 seata-golang 用到生產(chǎn)環(huán)境。目前 seata-golang 只支持 mysql,小伙伴們可根據(jù) mysql driver 的思路,實(shí)現(xiàn) pgsql 和 oracle 的 driver 。這也是未來 seata-golang 將要規(guī)劃做的事情之一。

隨著 go 語言微服務(wù)開發(fā)的興起,分布式事務(wù)問題會(huì)越來越受到關(guān)注,希望社區(qū)的朋友可以更多參與進(jìn)來完善這個(gè)框架,讓它發(fā)揮生命力、服務(wù)社區(qū)、創(chuàng)造價(jià)值。

如果你有任何疑問,歡迎搜索釘釘群號 33069364 加入交流群。

作者簡介

劉曉敏(GitHubID dk-lockdown),目前就職于 h3c 成都分公司,擅長使用 Java/Go 語言,在云原生和微服務(wù)相關(guān)技術(shù)方向均有涉獵,目前專攻分布式事務(wù)。

參考資料

  • seata 官方:https://seata.io
  • java 版 seata:https://github.com/seata/seata
  • seata-golang 項(xiàng)目地址:https://github.com/opentrx/seata-golang
  • driver 地址:https://github.com/opentrx/mysql
  • seata-golang go 夜讀 b 站分享:https://www.bilibili.com/video/BV1oz411e72T
  • 基于 getty 的 seata-golang 通信模型詳解:http://seata.io/zh-cn/blog/seata-golang-communication-mode.html
  • seata-golang 接入指南
  • Go Mysql Driver 集成 Seata-Golang 解決分布式事務(wù)問題

總結(jié)

以上是生活随笔為你收集整理的seata-golang 一周年回顾的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。