微服務開發的最大痛點-分佈式事務SEATA入門簡介

前言

在微服務開發中,存在諸多的開發痛點,例如分佈式事務、全鏈路跟蹤、限流降級和服務平滑上下線等。而在這其中,分佈式事務是最讓開發者頭痛的。那分佈式事務是什麼呢?html

分佈式事務就是指事務的參與者、支持事務的服務器、資源服務器以及事務管理器分別位於不一樣的分佈式系統的不一樣節點之上。簡單的說,就是一次大的操做由不一樣的小操做組成,這些小的操做分佈在不一樣的服務器上,且屬於不一樣的應用,分佈式事務須要保證這些小操做要麼所有成功,要麼所有失敗。本質上來講,分佈式事務就是爲了保證不一樣數據庫的數據一致性。或者,在換一句話說,分佈式事務 = n 個本地事務。經過事務管理器,達到 n 個本地事務要麼所有成功,要麼所有失敗。git

SEATA應運而生

那有什麼方案解決上述的這些難點和痛點呢?github

SEATA做爲一款開源的分佈式事務解決方案應運而生,其致力於在微服務架構下提供高性能和簡單易用的分佈式事務服務。redis

官方網址:https://seata.io/zh-cn/index.htmldocker

GitHub: https://github.com/seata/seata數據庫

願景和誕生的鳥巢

  • 微服務架構下,易用、高效的分佈式事務解決方案。bash

  • 技術積累服務器

    • 內部產品:TXC、XTS
    • 商業化產品:GTS、DTS
  • 願景:像使用本地事務同樣使用分佈式事務,提供一站式的分佈式事務解決方案架構

特性

  1. 微服務框架支持:目前已支持 Dubbo、Spring Cloud、Sofa-RPC、Motan 和 grpc 等RPC框架,其餘框架持續集成中。
  2. 高可用: 支持基於數據庫存儲的集羣模式,水平擴展能力強。
  3. 高可擴展性: 支持各種配置中心、註冊中心、序列化、存儲、協議序列化、負載均衡等SPI擴展。
  4. AT自動補償模式: 提供無侵入自動補償的事務模式,目前已支持MySQL、Oracle的自動補償模式、PostgreSQL、H2開發中。
  5. TCC模式: 支持用戶使用TCC靈活擴展事務。
  6. Saga模式:提供長事務河服務編排解決方案。

框架角色

  • TC (Transaction Coordinator) - 事務協調者:維護全局和分支事務的狀態,驅動全局事務提交或回滾。
  • TM (Transaction Manager) - 事務管理器:定義全局事務的範圍,開始全局事務、提交或回滾全局事務。
  • RM ( Resource Manager ) - 資源管理器:管理分支事務處理的資源( Resource ),與 TC 交談以註冊分支事務和報告分支事務的狀態,並驅動分支事務提交或回滾。

其中,TC 爲單獨部署的 Server 服務端,TM 和 RM 爲嵌入到應用中的 Client 客戶端。負載均衡

生命週期

  • TM 請求 TC 開啓一個全局事務。TC 會生成一個 XID 做爲該全局事務的編號。

    XID,會在微服務的調用鏈路中傳播,保證將多個微服務的子事務關聯在一塊兒。

  • RM 請求 TC 將本地事務註冊爲全局事務的分支事務,經過全局事務的 XID 進行關聯。

  • TM 請求 TC 告訴 XID 對應的全局事務是進行提交仍是回滾。

  • TC 驅動 RM 們將 XID 對應的本身的本地事務進行提交仍是回滾。

安裝部署

docker-compose(推薦)

官方文檔地址:https://seata.io/zh-cn/docs/ops/deploy-by-docker.html

  1. 新建一個文件夾: /docker-compose/seata

  2. 建立文件: 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
  3. 在文件同一級, 運行命令: docker-compose up -d-d是讓seata在後臺運行,若是你想看到各服務的註冊和移除狀況,能夠不用。

直接部署

官方文檔地址: https://seata.io/zh-cn/docs/ops/deploy-server.html

  1. RELEASE頁面下載相應版本並解壓
  2. 直接啓動

在 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模式的實戰案例,敬請期待!

相關文章
相關標籤/搜索