一文了解Seata的安裝和配置
我們都知道現(xiàn)在使用微服務,那么就會出現(xiàn)一種情況,就是一個功能,從 A 服務,到 B 服務,然后到 C 服務,每個服務都可能需要去調(diào)取不同的服務,而這個服務之間的調(diào)用,而當他們使用三個獨立的數(shù)據(jù)源的時候,那么他們也就只能保證自己每個服務內(nèi)部的事務,而去全局的一致性,則是沒有辦法保證的,也就是我們再面試的時候,經(jīng)常會被問到的分布式事務。
分布式事務
其實分布式事務用一句話概括,那就是一次業(yè)務操作,如果橫跨多個數(shù)據(jù)源或者需要跨多個系統(tǒng)進行遠程調(diào)用的話,就會產(chǎn)生分布式事務問題。
如何解決分布式事務
分布式事務其實現(xiàn)在解決方案有很多,比如 TCC方案,XA 方案,本地消息表,可靠消息最終一致性方案,最大努力通知方案等等,但是這種方案實現(xiàn)上肯定都是偏復雜的,而阿里我們都知道他是有一套自己解決分布式事務的方案的,那么大家都知道是什么呢?今天了不起就來和大家看看這個 Seata 一款開源的分布式事務解決方案,致力于在微服務架構(gòu)下提供高性能和簡單易用的分布式事務服務。
Seata簡介
Senta 是一款開源的分布式事務解決方案,致力于在微服務架構(gòu)下提供高性能和簡單易用的分布式事務服務。
我們來看看官網(wǎng)的介紹,
Seata官網(wǎng)
圖片
突然看到這個圖里面的術(shù)語的時候,是不是有點懵,我們來看看這個Seata的術(shù)語
TC (Transaction Coordinator) - 事務協(xié)調(diào)者
維護全局和分支事務的狀態(tài),驅(qū)動全局事務提交或回滾。
TM (Transaction Manager) - 事務管理器
定義全局事務的范圍:開始全局事務、提交或回滾全局事務。
RM (Resource Manager) - 資源管理器
管理分支事務處理的資源,與TC交談以注冊分支事務和報告分支事務的狀態(tài),并驅(qū)動分支事務提交或回滾。
其實如果看上面的圖,我們看看這個處理過程
圖片
接下來我們直接來實戰(zhàn)試一下這個Seata的實際操作。
Seata-Server安裝
我們直接用官網(wǎng)的Demo來學習一下
快速開始
我們挑選一個不是那么新的版本,畢竟都知道,新版本中那可是有很多坑的,一個不留神就踩進去,學習還是穩(wěn)一手。
圖片
下載完成,直接解壓,然后去找到文件目錄,
我們直接找到config下的 file.config,
修改file.conf
主要就是修改,事務日志存儲模式為db+數(shù)據(jù)庫連接信息
我們直接把mode改為db
然后db改為我們自己的數(shù)據(jù)庫地址
圖片
然后我們?nèi)グ褦?shù)據(jù)庫給創(chuàng)建好,建表語句在config下的 readme文件中。
圖片
我們找到 server 的 Mysql 的建表語句
圖片
ok了 建表成功。
修改registry.conf
還是同樣的目錄,我們再修改一下 registry.conf 主要是來修改nacos的信息的,因為 Seata 其實推薦的也是 nacos,所以下面的這個 type 我們直接來改成自己的 naocs 就可以了。
registry {
# file 、nacos 、eureka、redis、zk、consul、etcd3、sofa
type = "nacos"
nacos {
application = "seata-server"
serverAddr = "127.0.0.1:8848"
group = "SEATA_GROUP"
namespace = "5518397c-7ea8-4f55-89ca-dacfc6fdf914"
cluster = "default"
username = "nacos"
password = "nacos"
}
config {
# file、nacos 、apollo、zk、consul、etcd3
type = "nacos"
nacos {
serverAddr = "127.0.0.1:8848"
namespace = "5518397c-7ea8-4f55-89ca-dacfc6fdf914"
group = "SEATA_GROUP"
username = "nacos"
password = "nacos"
dataId = "seataServer.properties"
}
...
}
獲取 config.txt 文件
直接獲取config.txt
config.txt
然后我們修改一下store
圖片
配nacos
先從git上面下載 nacos-config.sh,然后推送配置到nacos
nacos-config.sh
把 nacos-config.sh 文件放到 config 下,然后執(zhí)行命令
sh nacos-config.sh -h localhost -p 8848 -g SEATA_GROUP -t 5518397c-7ea8-4f55-89ca-dacfc6fdf914 -u nacos -w nacos
命令的解釋如下:
-h: 注冊到注冊中心的ip
-p: Server rpc 監(jiān)聽端口
-m: 全局事務會話信息存儲模式,file、db、redis,優(yōu)先讀取啟動參數(shù) (Seata-Server 1.3及以上版本支持redis)
-n: Server node,多個Server時,需區(qū)分各自節(jié)點,用于生成不同區(qū)間的transactionId,以免沖突
-e: 多環(huán)境配置參考 http://seata.io/en-us/docs/ops/multi-configuration-isolation.html
圖片
執(zhí)行這個有個前提,那就是registry.conf中的namespace和命令中的必須保持一樣,并且在 nacos中也增加了對應的命名空間,如果你沒有仔細的看文檔,并且沒有對 nacos 中的命名空間做增加的話,那么你就肯定失敗,然后在 nacos 中就是看不到自己的配置情況。
圖片
創(chuàng)建完成之后,就會出現(xiàn)這個命名空間的ID,我們直接來隨機的,然后復制這個ID 到registry.conf中配置一下就可以了。
大家可以看到上面的圖中出現(xiàn)了total-count是98,但是failure-count:1 我們看執(zhí)行完命令后,失敗的是哪個,
nacos-config.sh: line 88: [: too many arguments
Set store.publicKey= failure
這個失敗了,但是有人可能會失敗四個
Set store.publicKey= failure
Set store.redis.sentinel.masterName= failure
Set store.redis.sentinel.sentinelHosts= failure
Set store.redis.password= failure
其實這四個并不影響這個執(zhí)行,因為我們可以去 Nacos 中看配置情況,
圖片
因為了不起之季節(jié)吧這個 store.redis 的內(nèi)容給全注釋了。所以只有一個沒成功。
接下來我們就可以啟動seata了。
啟動 seata
我們這里先不考慮這個client,因為可以在我們后面使用的時候再去添加這個
直接執(zhí)行 bin/seata-server.bat 文件,然后看看能啟動成功不。
圖片
當我們看到這個 Server started 的時候,我們就知道,我們的 seata 的服務端就啟動成功了,到這里我們的 seata 的安裝和配置就算是已經(jīng)完成了。
你學會了么?