在微服務開發中,存在諸多的開發痛點,例如分佈式事務、全鏈路跟蹤、限流降級和服務平滑上下線等。而在這其中,分佈式事務是最讓開發者頭痛的。那分佈式事務是什麼呢?html
分佈式事務就是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不一樣的分佈式系統的不一樣節點之上。簡單的說,就是一次大的操做由不一樣的小操做組成,這些小的操做分佈在不一樣的服務器上,且屬於不一樣的應用,分佈式事務須要保證這些小操做要麼所有成功,要麼所有失敗。本質上來講,分佈式事務就是爲了保證不一樣數據庫的數據一致性。或者,在換一句話說,分佈式事務 = n 個本地事務。經過事務管理器,達到 n 個本地事務要麼所有成功,要麼所有失敗。git
那有什麼方案解決上述的這些難點和痛點呢?github
SEATA做爲一款開源的分佈式事務解決方案應運而生,其致力於在微服務架構下提供高性能和簡單易用的分佈式事務服務。redis
官方網址:https://seata.io/zh-cn/index.htmldocker
GitHub: https://github.com/seata/seata數據庫
微服務架構下,易用、高效的分佈式事務解決方案。bash
技術積累服務器
願景:像使用本地事務同樣使用分佈式事務,提供一站式的分佈式事務解決方案架構
其中,TC 爲單獨部署的 Server 服務端,TM 和 RM 爲嵌入到應用中的 Client 客戶端。負載均衡
TM 請求 TC 開啓一個全局事務。TC 會生成一個 XID 做爲該全局事務的編號。
XID,會在微服務的調用鏈路中傳播,保證將多個微服務的子事務關聯在一塊兒。
RM 請求 TC 將本地事務註冊爲全局事務的分支事務,經過全局事務的 XID 進行關聯。
TM 請求 TC 告訴 XID 對應的全局事務是進行提交仍是回滾。
TC 驅動 RM 們將 XID 對應的本身的本地事務進行提交仍是回滾。
官方文檔地址:https://seata.io/zh-cn/docs/ops/deploy-by-docker.html
新建一個文件夾: /docker-compose/seata
建立文件: docker-compose.yaml
version: "3" services: seata-server: image: seataio/seata-server hostname: seata-server ports: - "8091:8091" environment: - SEATA_PORT=8091 - STORE_MODE=file
在文件同一級, 運行命令: docker-compose up -d
。 -d
是讓seata在後臺運行,若是你想看到各服務的註冊和移除狀況,能夠不用。
在 Linux/Mac 下
$ sh ./bin/seata-server.sh
在 Windows 下
bin\seata-server.bat
參數 | 全寫 | 做用 | 備註 |
---|---|---|---|
-h | --host | 指定在註冊中心註冊的 IP | 不指定時獲取當前的 IP,外部訪問部署在雲環境和容器中的 server 建議指定 |
-p | --port | 指定 server 啓動的端口 | 默認爲 8091 |
-m | --storeMode | 事務日誌存儲方式 | 支持file ,db ,redis ,默認爲 file 注:redis需seata-server 1.3版本及以上 |
-n | --serverNode | 用於指定seata-server節點ID | 如 1 ,2 ,3 ..., 默認爲 1 |
-e | --seataEnv | 指定 seata-server 運行環境 | 如 dev , test 等, 服務啓動時會使用 registry-dev.conf 這樣的配置 |
如:
$ sh ./bin/seata-server.sh -p 8091 -h 127.0.0.1 -m file
下一章將給你們介紹基於Dubbo + Seata的分佈式事務 --- AT模式的實戰案例,敬請期待!