国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

分布式事務框架Seata客戶端的使用

云計算 分布式
在選用分布式事務模式時,需要根據具體業務場景和對一致性的需求做出選擇。每種模式都有其優勢和局限,沒有絕對的“最佳”選擇。對于開發者來說,了解各模式的內部機制和可能的性能影響是非常重要的。

Seata (Simple Extensible Autonomous Transaction Architecture) 是一種開源的分布式事務解決方案,致力于在微服務架構下提供高效且對業務無侵入的分布式事務服務。Seata 能夠幫助開發者輕松地解決在微服務架構下服務間的數據一致性問題。

圖片圖片

在分布式系統中,一個業務操作通常會涉及到多個服務的協作,這些服務可能會對不同的數據庫進行操作。傳統的分布式事務解決方案(如2PC,即兩階段提交)雖然能夠保證強一致性,但卻在性能和可用性方面存在不小的挑戰。因此,Seata 提出了一種基于AT、TCC、SAGA、XA等模式的輕量級分布式事務協調方案。

Seata 確實支持多種分布式事務模式,包括 AT(自動補償事務)、TCC(Try-Confirm-Cancel)、SAGA 和 XA(擴展的兩階段提交協議)。每種模式都有自己的使用場景和特點:

1. AT模式(Auto-Compensating Transaction)

圖片圖片

  • 適用場景:簡單的CRUD操作,不需要特殊處理的業務邏輯。
  • 特點:

易于使用,開發者不需要編寫額外的補償邏輯,Seata 會自動為每個分支事務生成撤銷(回滾)邏輯。

性能較好,因為它減少了準備階段的通信開銷。

通過行鎖和UNDO_LOG(回濾日志),加鎖和數據改動被記錄下來,保證在出現錯誤時可以回滾事務。

@Service
public class OrderService {
    @GlobalTransactional(timeoutMills = 300000, name = "create-order")
    public void createOrder(Order order, Payment payment, Inventory inventory) {
        // 更新庫存
        inventoryService.reduceStock(inventory);


        // 創建支付記錄
        paymentService.pay(payment);


        // 創建訂單
        orderRepository.save(order);
    }
}

按照官方配置AT模式后,在方法前面添加GlobalTransactional注解。


AT模式的主要思想就是通過一個中間層進行協調事務的確認和回滾操作,將相應的操作記錄在例如數據庫表里面,在提交后進行事務的信息的刪除,再通過一個全局鎖來避免資源的競爭。其方式對業務代碼不需要侵入。

2. TCC模式(Try-Confirm-Cancel)

圖片圖片

  • 適用場景:業務邏輯較為復雜,或者需要明確的業務補償操作。
  • 特點:

分為三個操作:Try(嘗試執行業務)、Confirm(確認執行業務)、Cancel(取消執行業務),業務邏輯被拆分成這三部分。

開發者需要自行實現這三個操作,提供更強的業務手動控制能力。

具體的業務操作和補償邏輯是可見的,有助于處理復雜的業務場景。

//定義接口實現注解
@LocalTCC
public interface PaymentService {
    // "try" 方法,準備資源,比如凍結用戶資金
    @TwoPhaseBusinessAction(name = "preparePay", commitMethod = "commitPay", rollbackMethod = "cancelPay")
    boolean preparePay(BusinessActionContext context, String accountId, double amount);
    // "confirm" 方法,確認并實際扣除凍結的資金
    boolean commitPay(BusinessActionContext context);
    // "cancel" 方法,取消操作,解凍之前凍結的資金
    boolean cancelPay(BusinessActionContext context);
}


//然后,為接口提供一個實現類,并實現try、confirm和cancel方法:
@Service
public class PaymentServiceImpl implements PaymentService {
    @Autowired
    private AccountRepository accountRepository;


    @Override
    public boolean preparePay(BusinessActionContext context, String accountId, double amount) {
        // 實現資金的凍結邏輯
        // ...
        return true;
    }
    @Override
    public boolean commitPay(BusinessActionContext context) {
        // 實現實際扣除資金的邏輯
        // ...
        return true;
    }
    @Override
    public boolean cancelPay(BusinessActionContext context) {
        // 實現取消扣款,即解凍資金的邏輯
        // ...
        return true;
    }
}


//最后,在需要執行TCC事務的業務邏輯中注入PaymentService并調用上述方法:
@Service
public class OrderService {
    @Autowired
    private PaymentService paymentService;
    @GlobalTransactional
    public void createOrder(Order order, String accountId, double amount) {
        // TCC try 階段
        boolean result = paymentService.preparePay(null, accountId, amount);
        if (!result) {
            throw new RuntimeException("Payment preparation failed.");
        }


        // TCC confirm 或 cancel 階段將由Seata框架根據全局事務的最終狀態自動調用
        // ...
    }
}

其本質的思想就是通過代碼編寫確認機制和補償機制,這種方式需要對業務的代碼的侵入。

3. SAGA模式

  • 適用場景:長事務場景,例如一系列的步驟或服務調用需要在整體上保持一致性。
  • 特點:

基于狀態機實現,每個步驟都對應狀態遷移過程中的一個節點。

不適用于標準的兩階段提交,而是將一個全局事務分解成多個局部事務,通過定義前向操作和反向補償操作來保證整體一致性。

適用于事務執行時間較長的業務流程,減少了鎖資源的持有時間。

// 偽代碼,僅為示例說明
StateMachineBuilder stateMachineBuilder = StateMachineBuilderFactory.create();
StateMachine stateMachine = stateMachineBuilder
    .state("Start")
    .initial("CreateOrder")
        .to("ReserveInventory").on("InventoryReserved")
        .to("CancelOrder").on("InventoryReserveFailed")
    .step("ReserveInventory")
        .to("ProcessPayment").on("PaymentProcessed")
        .to("RevertInventory").on("PaymentProcessFailed")
    .step("ProcessPayment")
        .to("End").on("Success")
    .step("CancelOrder")
    .compensateWith("CancelOrderOperation")
    .step("RevertInventory")
    .compensateWith("RevertInventoryOperation")
    .build();
stateMachine.start();

使用狀態機來進行多事務的描述其本質的思想就是對多事務進行確認和補償,這種也會需要對業務代碼的侵入。

4. XA模式

圖片圖片

  • 適用場景:需要嚴格的ACID事務,并且各參與方(數據庫、消息中間件等)支持XA接口。
  • 特點:

基于兩階段提交(2PC),第一階段是準備階段,第二階段是提交或回濾階段。

實現了跨資源管理器的全局事務。

通常比AT模式效率低,因為它在第一階段結束時需要所有參與者就事務結果達成一致,然后在第二階段進行提交或回滾。

將動態的代理數據源替換成XA模式,然后和AT模式一樣,在需要的方法前面添加GlobalTransactional注解

@Service
public class OrderService {
    @Autowired
    private OrderRepository orderRepository;
    @GlobalTransactional
    public void createOrder(Order order) {
        // 此處的數據庫操作會自動被Seata管理
        orderRepository.save(order);
        // ...其他可能涉及數據庫操作的代碼
    }
}

其本質的思想就是與AT模式類似,但是需要基于數據庫能支持XA模式才能運行,AT模式是在中間層進行確認和回滾的日志記錄,而XA模式是將記錄交給數據庫來運行,也避免了AT模式下手動操作數據導致問題。XA模式不需要侵入業務代碼。

圖片圖片

在選用分布式事務模式時,需要根據具體業務場景和對一致性的需求做出選擇。每種模式都有其優勢和局限,沒有絕對的“最佳”選擇。對于開發者來說,了解各模式的內部機制和可能的性能影響是非常重要的。

責任編輯:武曉燕 來源: 程序員技術成長之路
相關推薦

2022-06-27 08:21:05

Seata分布式事務微服務

2022-06-21 08:27:22

Seata分布式事務

2022-03-24 07:51:27

seata分布式事務Java

2022-07-10 20:24:48

Seata分布式事務

2021-08-06 08:33:27

Springboot分布式Seata

2023-01-06 09:19:12

Seata分布式事務

2025-04-28 00:44:04

2023-11-06 13:15:32

分布式事務Seata

2024-10-09 14:14:07

2021-04-23 08:15:51

Seata XA AT

2025-04-30 10:44:02

2023-08-17 10:23:07

擴展方案

2020-03-12 19:00:48

Ceph分布式存儲

2011-11-30 14:21:19

Java分布式緩存

2024-08-19 09:05:00

Seata分布式事務

2025-05-07 00:10:00

分布式事務TCC模式

2020-12-09 09:14:57

SpringCloudSeata 分布式

2022-07-03 14:03:57

分布式Seata

2020-12-08 11:43:03

Spring Clou分布式Seata

2020-04-28 12:18:08

Seata模式分布式
點贊
收藏

51CTO技術棧公眾號

日本高清免费电影一区| 欧美α欧美αv大片| 99aiav| 欧美黑人巨大xxx极品| 中文字幕免费在线视频| 国产一区二区不卡在线| 日本中文字幕不卡免费| 91精品韩国| 日韩一级在线观看| 在线天堂av| 中文字幕在线观看不卡| 国产精品三级一区二区| 国内精品久久久久久久97牛牛 | 免费拍拍拍网站| 91精品国产自产拍在线观看蜜| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | xx免费视频| 日韩av中文字幕一区二区三区 | 在线视频国产区| 五月综合激情网| 性生活免费在线观看| 狠狠久久亚洲欧美| 欧洲av一区| 激情欧美一区| 岛国视频一区免费观看| 成人影院在线| 欧美孕妇与黑人孕交| 激情综合五月| 另类天堂视频在线观看| avav成人| 精品中文字幕一区二区三区| 成人亚洲精品久久久久软件| 日本久久91av| 精品视频免费| 国产精品激情自拍| 精品精品国产毛片在线看| 欧美精品在线极品| 极品少妇一区二区三区| 日韩日本欧美亚洲| 最近中文视频在线| 午夜日韩av| 美日韩精品视频免费看| 久久奇米777| 欧美日韩国产麻豆| 欧美成熟毛茸茸复古| 国产乱码午夜在线视频| 中文字幕不卡的av| 国产精品三区www17con| 亚洲日本网址| xnxx国产精品| 91成人在线播放| 草碰在线视频| 国产揄拍国内精品对白| 亚洲第一区在线观看| av在线之家电影网站| 国产精品久99| 中文字幕免费在线观看| 宅男在线国产精品| 国产成人精品一区二区三区免费| 日韩在线观看视频免费| 久久资源中文字幕| 国产精品麻豆免费版| 欧美性受ⅹ╳╳╳黑人a性爽| 中文无字幕一区二区三区| 国产四区在线观看| 久久夜色精品国产噜噜av小说| 中文字幕在线不卡一区| 女同一区二区| 女人让男人操自己视频在线观看| 激情综合亚洲| 欧美亚洲成人网| 成人深夜福利| 亚洲国产欧美日韩另类综合| 色99中文字幕| 国产欧美精品久久| 91免费精品| 欧美精品人人做人人爱视频| 国产一区在线视频| 中文字幕国产免费| 欧美专区日韩专区| 国产一区二区三区影视| 97在线视频观看| av在线影院| 亚洲第一在线综合在线| 麻豆影视在线观看_| 亚洲美免无码中文字幕在线| 91蜜桃免费观看视频| 久久精品水蜜桃av综合天堂| 亚洲最大成人在线观看| 五月婷婷欧美视频| 超碰在线99| 91chinesevideo永久地址| 欧美黑人国产人伦爽爽爽| 久久天天久久| 国产欧美一区二区三区视频| 午夜影院日韩| 国产熟女高潮视频| 欧美日韩精品欧美日韩精品 | 欧美男人的天堂| 菠萝蜜视频在线观看一区| 欧美色综合一区二区三区| 国产亚洲视频中文字幕视频| 欧美日韩一二| 国产成a人亚洲精v品在线观看| 一区二区三区在线不卡| 蜜桃av在线播放| 91av免费看| 国产精品久久久99| 成人在线高清免费| 亚洲一区二区在线| 91一区二区在线观看| 91精品久久久久久粉嫩| 啪一啪鲁一鲁2019在线视频| 国产一区二区三区美女| 飘雪影院手机免费高清版在线观看| 丝袜情趣国产精品| 久久国产高清| 在线观看av网| 久久精品影视伊人网| 日韩中文字幕麻豆| 亚洲日本一区二区三区在线观看| 一区二区三区久久精品| 在线综合视频| 肉丝一区二区| 66m—66摸成人免费视频| 国内精品不卡在线| 黄色网在线播放| 亚洲free性xxxx护士白浆| 日本一区二区在线不卡| 国产精品蜜芽在线观看| 99九九视频| 亚洲动漫第一页| caoporn成人免费视频在线| 青青在线视频免费观看| 欧美成人女星排名| 亚洲国产日韩在线| 一本大道香蕉8中文在线视频| 韩国美女主播一区| 91毛片在线观看| 欧美日韩精品免费观看视欧美高清免费大片 | 69成人在线| 国产一区自拍视频| 一本一道综合狠狠老| 国产乱码精品一区二区亚洲 | 国产精品美女| 欧美xxxhd| 欧美一级黄色片视频| 日本欧美中文字幕| 亚洲在线中文字幕| 欧美成人黄色网址| 污黄色在线观看| 18性欧美xxxⅹ性满足| www.欧美亚洲| 日韩在线免费| 国产成人免费高清视频| 欧美一区二区视频免费观看| 欧美日韩一视频区二区| 日韩a在线看| 91视频8mav| 欧美午夜理伦三级在线观看| 91精品精品| 成人在线免费视频| 国产精品日韩二区| 精品视频一区三区九区| 国产色综合网| 久久香蕉av| 国产精品视频二| 久久91精品国产91久久久| 中文字幕欧美区| 精品一级毛片| 免费在线视频一级不卡| 国产精品一区二区欧美| 日韩一区二区在线观看视频 | 亚洲精品videossex少妇| 蜜桃视频第一区免费观看| 涩涩视频在线免费看| 欧美视频一区在线| 中文字幕在线不卡| 成人a区在线观看| 妖精视频一区二区三区免费观看| 亚洲图色在线| 亚洲美女免费精品视频在线观看| 亚洲网站免费| 91精品韩国| 欧美亚洲系列| 男女曰b免费视频| 羞羞在线视频| 性色av一区二区三区| |精品福利一区二区三区| 欧美人妖在线| 国产网站在线播放| 亚洲一区二区精品在线| 久久久av网站| 亚洲成人免费在线观看| 亚洲美女黄网| 视频欧美精品| 手机看片福利在线观看| 久久免费看毛片| 久久久久久久久久婷婷| 精品成人av一区|