成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

分布式系統的“后悔藥”:5種補償機制保障你的業務一致性

開發 前端
無論是電商訂單的支付失敗,還是跨服務調用的事務中斷,補償機制就像系統的「后悔藥」,幫助我們在故障后止血回滾或最終達成一致。今天,我們深入解析5種核心補償機制。

在分布式系統中,我們常常面臨這樣的靈魂拷問:「如果某個操作中途失敗了,系統如何優雅地回到一致狀態?」

無論是電商訂單的支付失敗,還是跨服務調用的事務中斷,補償機制就像系統的「后悔藥」,幫助我們在故障后止血回滾最終達成一致。今天,我們深入解析5種核心補償機制。

一、Saga模式:長事務的「分段回滾」

1.1 核心思想

將一個長事務拆解為多個本地事務,每個子事務對應一個補償操作。任何一個步驟失敗,按反向順序觸發補償

// 訂單服務:創建訂單(正向操作)
public void createOrder(Order order) {
    // 持久化訂單到數據庫
}

// 訂單服務:補償操作(取消訂單)
public void cancelOrder(Order order) {
    // 標記訂單狀態為已取消
}

// 庫存服務:扣減庫存(正向操作)
public void reduceStock(String productId, int num) {
    // 扣減商品庫存
}

// 庫存服務:補償操作(恢復庫存)
public void compensateStock(String productId, int num) {
    // 恢復庫存數量
}

二、TCC模式:資源預留的「三階段提交」

2.1 三個階段

圖片圖片

// 積分服務TCC接口
publicinterface PointsService {
    @Transactional
    boolean tryDeductPoints(Long userId, int points);
    
    @Transactional
    boolean confirmDeductPoints(Long userId, int points);
    
    @Transactional
    boolean cancelDeductPoints(Long userId, int points);
}

// 實現類示例
@Service
publicclass PointsServiceImpl implements PointsService {
    // Try階段:預扣積分
    public boolean tryDeductPoints(Long userId, int points) {
        // 檢查積分是否充足
        // 預扣積分到臨時表
    }

    // Confirm階段:實際扣減
    public boolean confirmDeductPoints(Long userId, int points) {
        // 刪除臨時表記錄
        // 更新用戶積分
    }

    // Cancel階段:返還積分
    public boolean cancelDeductPoints(Long userId, int points) {
        // 從臨時表恢復積分
    }
}

三、消息隊列:異步通信的「可靠重試」

3.1 補償流程設計

圖片圖片

// RabbitMQ補償示例
@RabbitListener(queues = "order.queue")
public void handleOrderMessage(OrderMessage message, Channel channel) {
    try {
        orderService.processOrder(message);
        channel.basicAck(deliveryTag, false);
    } catch (Exception e) {
        // 記錄重試次數
        if (retryCount >= MAX_RETRY) {
            channel.basicNack(deliveryTag, false, false);
            deadLetterService.sendToDlq(message);
        } else {
            channel.basicNack(deliveryTag, false, true);
        }
    }
}

四、狀態機補償:復雜流程的「精準回退」

4.1 狀態流轉設計

圖片圖片

// 訂單狀態機示例
publicclass OrderStateMachine {
    private OrderState currentState;

    public void transitionTo(OrderState newState) {
        // 校驗狀態流轉是否合法
        this.currentState = newState;
        orderRepository.save(this);
    }

    public void compensate() {
        if (currentState == OrderState.COMMITTED) {
            transitionTo(OrderState.COMPENSATING);
            // 執行補償邏輯
            transitionTo(OrderState.ROLLBACKED);
        }
    }
}

五、人工補償:最后的「安全網」

當自動化補償失效時,需提供人工操作界面完整日志追溯

// 補償任務管理后臺
@RestController
@RequestMapping("/compensation")
publicclass CompensationController {
    
    @GetMapping("/failed-orders")
    public List<Order> listFailedOrders() {
        return orderRepository.findByStatus(OrderStatus.FAILED);
    }

    @PostMapping("/manual-compensate")
    public void manualCompensate(@RequestParam Long orderId) {
        // 人工驗證后觸發補償
        orderService.triggerCompensation(orderId);
    }
}

如何選擇補償機制?

場景特征

推薦機制

短事務、強一致性

本地事務回滾

跨服務長流程

Saga模式

高并發資源操作

TCC模式

異步最終一致性

消息隊列+重試

復雜狀態流轉

狀態機驅動補償

最后的小貼士

  1. 補償操作必須實現冪等性(多次執行結果一致)
  2. 記錄完整的操作日志上下文信息
  3. 設置補償的超時閾值重試上限
  4. 監控系統需要覆蓋補償成功率指標
責任編輯:武曉燕 來源: 草捏子
相關推薦

2017-09-22 12:08:01

數據庫分布式系統互聯網

2017-09-21 10:59:36

分布式系統線性一致性測試

2021-07-28 08:39:25

分布式架構系統

2025-02-10 03:00:00

2019-10-11 23:27:19

分布式一致性算法開發

2024-05-30 07:00:51

2018-03-19 09:50:50

分布式存儲系統

2019-09-05 08:43:34

微服務分布式一致性數據共享

2021-11-22 16:30:30

分布式一致性分布式系統

2017-04-06 11:59:19

分布式服務化系統

2022-06-07 12:08:10

Paxos算法

2021-06-03 15:27:31

RaftSOFAJRaft

2024-11-28 10:56:55

2025-03-14 08:00:00

分布式系統服務器一致性

2023-11-01 10:11:00

Java分布式

2021-06-06 12:45:41

分布式CAPBASE

2023-11-06 09:06:54

分布式一致性數據

2024-01-31 09:54:51

Redis分布式

2020-10-28 11:15:24

EPaxos分布式性算法

2021-01-21 07:34:16

分布式系統場景
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 18性欧美| 欧美一级黑人aaaaaaa做受 | 亚洲欧美国产一区二区三区 | 一区二区三区在线免费观看 | 美女视频一区 | 婷婷久久网 | 国产午夜精品一区二区三区嫩草 | 一区二区三区视频在线观看 | 国产色在线 | 国产精品污污视频 | 国产精品久久亚洲7777 | 福利久久 | 一区二区不卡 | 伊人最新网址 | 国内精品久久久久久 | 久久这里只有精品首页 | 欧美xxxⅹ性欧美大片 | 中文字幕一区在线 | 亚洲成人一区二区 | 国产精品国产精品国产专区不蜜 | 伊人av在线播放 | 亚洲欧美在线观看 | 国产91精品久久久久久久网曝门 | 国产xxxx搡xxxxx搡麻豆 | 久久一区二区视频 | av在线一区二区三区 | 激情 婷婷| 一区二区三区四区在线视频 | 日本亚洲欧美 | 国产精品久久久久久久久久久久久久 | a精品视频| 国产极品粉嫩美女呻吟在线看人 | 亚洲精品一区二区三区在线观看 | 夜夜精品浪潮av一区二区三区 | 国产超碰人人爽人人做人人爱 | 国产伦精品一区二区三区照片91 | 久久久久国产一级毛片 | 国产激情网站 | 成人久久18免费网站图片 | 国产东北一级毛片 | 国产区精品 |