精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

分布式事務(wù)解決方案:深入理解 TCC 模式

開發(fā)
TCC 是一種強大的分布式事務(wù)解決方案,它通過巧妙的補償機制來保證事務(wù)的一致性。雖然實現(xiàn)較為復(fù)雜,但在某些場景下是不可替代的選擇。

在分布式系統(tǒng)中,事務(wù)處理一直是一個復(fù)雜的話題。想象一下,當(dāng)你在網(wǎng)上商城購物時,整個過程涉及:

  • 訂單系統(tǒng)創(chuàng)建訂單
  • 庫存系統(tǒng)扣減庫存
  • 支付系統(tǒng)完成支付
  • 積分系統(tǒng)增加積分

這些操作分布在不同的服務(wù)中,如何保證它們要么全部成功,要么全部失敗?這就是分布式事務(wù)需要解決的問題。

一、分布式事務(wù)的挑戰(zhàn)

1.傳統(tǒng)事務(wù)的局限

在單體應(yīng)用中,我們習(xí)慣使用數(shù)據(jù)庫的 ACID 事務(wù):

@Transactional
public void createOrder(Order order) {
    // 創(chuàng)建訂單
    orderRepository.save(order);
    // 扣減庫存
    inventoryRepository.deduct(order.getProductId(), order.getQuantity());
    // 扣減余額
    accountRepository.deduct(order.getUserId(), order.getAmount());
}

但在分布式環(huán)境下,這種方式行不通了,因為:

  • 跨多個數(shù)據(jù)庫
  • 跨多個服務(wù)
  • 網(wǎng)絡(luò)可能失敗
  • 服務(wù)可能宕機

2.CAP 理論的限制

在分布式系統(tǒng)中,我們不得不在以下三個特性中做出選擇:

  • 一致性(Consistency)
  • 可用性(Availability)
  • 分區(qū)容錯性(Partition tolerance)

二、TCC 模式介紹

1.什么是 TCC?

TCC(Try-Confirm-Cancel)是一種補償性事務(wù)模式,它將一個完整的業(yè)務(wù)操作分為二步完成:

(1) Try: 嘗試執(zhí)行業(yè)務(wù)

  • 完成所有業(yè)務(wù)檢查
  • 預(yù)留必要的業(yè)務(wù)資源

(2) Confirm: 確認(rèn)執(zhí)行業(yè)務(wù)

  • 真正執(zhí)行業(yè)務(wù)
  • 不做任何業(yè)務(wù)檢查
  • 只使用 Try 階段預(yù)留的資源

(3) Cancel: 取消執(zhí)行業(yè)務(wù)

  • 釋放 Try 階段預(yù)留的資源
  • 回滾操作

來源:seata

2.TCC 示例:訂單支付流程

讓我們通過一個具體的訂單支付場景來理解 TCC:

// 訂單服務(wù)的 TCC 實現(xiàn)
public class OrderTccService {
    
    // Try: 創(chuàng)建預(yù)訂單
    @Transactional
    public void tryCreate(Order order) {
        // 檢查訂單參數(shù)
        validateOrder(order);
        // 創(chuàng)建預(yù)訂單
        order.setStatus(OrderStatus.TRYING);
        orderRepository.save(order);
    }
    
    // Confirm: 確認(rèn)訂單
    @Transactional
    public void confirmCreate(String orderId) {
        Order order = orderRepository.findById(orderId);
        order.setStatus(OrderStatus.CONFIRMED);
        orderRepository.save(order);
    }
    
    // Cancel: 取消訂單
    @Transactional
    public void cancelCreate(String orderId) {
        Order order = orderRepository.findById(orderId);
        order.setStatus(OrderStatus.CANCELLED);
        orderRepository.save(order);
    }
}

// 庫存服務(wù)的 TCC 實現(xiàn)
public class InventoryTccService {
    
    // Try: 凍結(jié)庫存
    @Transactional
    public void tryDeduct(String productId, int quantity) {
        Inventory inventory = inventoryRepository.findById(productId);
        // 檢查并凍結(jié)庫存
        if (inventory.getAvailable() < quantity) {
            throw new InsufficientInventoryException();
        }
        inventory.setFrozen(inventory.getFrozen() + quantity);
        inventory.setAvailable(inventory.getAvailable() - quantity);
        inventoryRepository.save(inventory);
    }
    
    // Confirm: 確認(rèn)扣減
    @Transactional
    public void confirmDeduct(String productId, int quantity) {
        Inventory inventory = inventoryRepository.findById(productId);
        inventory.setFrozen(inventory.getFrozen() - quantity);
        inventoryRepository.save(inventory);
    }
    
    // Cancel: 解凍庫存
    @Transactional
    public void cancelDeduct(String productId, int quantity) {
        Inventory inventory = inventoryRepository.findById(productId);
        inventory.setFrozen(inventory.getFrozen() - quantity);
        inventory.setAvailable(inventory.getAvailable() + quantity);
        inventoryRepository.save(inventory);
    }
}

// 支付服務(wù)的 TCC 實現(xiàn)
public class PaymentTccService {
    
    // Try: 凍結(jié)金額
    @Transactional
    public void tryDeduct(String userId, BigDecimal amount) {
        Account account = accountRepository.findById(userId);
        // 檢查并凍結(jié)金額
        if (account.getAvailable().compareTo(amount) < 0) {
            throw new InsufficientBalanceException();
        }
        account.setFrozen(account.getFrozen().add(amount));
        account.setAvailable(account.getAvailable().subtract(amount));
        accountRepository.save(account);
    }
    
    // Confirm: 確認(rèn)支付
    @Transactional
    public void confirmDeduct(String userId, BigDecimal amount) {
        Account account = accountRepository.findById(userId);
        account.setFrozen(account.getFrozen().subtract(amount));
        accountRepository.save(account);
    }
    
    // Cancel: 解凍金額
    @Transactional
    public void cancelDeduct(String userId, BigDecimal amount) {
        Account account = accountRepository.findById(userId);
        account.setFrozen(account.getFrozen().subtract(amount));
        account.setAvailable(account.getAvailable().add(amount));
        accountRepository.save(account);
    }
}

3.TCC 事務(wù)協(xié)調(diào)器

為了協(xié)調(diào)整個 TCC 流程,我們需要一個事務(wù)協(xié)調(diào)器:

@Service
public class OrderTccCoordinator {
    
    @Autowired
    private OrderTccService orderService;
    
    @Autowired
    private InventoryTccService inventoryService;
    
    @Autowired
    private PaymentTccService paymentService;
    
    public void createOrder(Order order) {
        String xid = generateTransactionId();
        
        try {
            // ==== Try 階段 ====
            // 1. 創(chuàng)建預(yù)訂單
            orderService.tryCreate(order);
            
            // 2. 嘗試扣減庫存
            inventoryService.tryDeduct(
                order.getProductId(), 
                order.getQuantity()
            );
            
            // 3. 嘗試扣減余額
            paymentService.tryDeduct(
                order.getUserId(), 
                order.getAmount()
            );
            
            // ==== Confirm 階段 ====
            // 1. 確認(rèn)訂單
            orderService.confirmCreate(order.getId());
            
            // 2. 確認(rèn)庫存扣減
            inventoryService.confirmDeduct(
                order.getProductId(), 
                order.getQuantity()
            );
            
            // 3. 確認(rèn)支付
            paymentService.confirmDeduct(
                order.getUserId(), 
                order.getAmount()
            );
            
        } catch (Exception e) {
            // ==== Cancel 階段 ====
            // 1. 取消訂單
            orderService.cancelCreate(order.getId());
            
            // 2. 恢復(fù)庫存
            inventoryService.cancelDeduct(
                order.getProductId(), 
                order.getQuantity()
            );
            
            // 3. 恢復(fù)余額
            paymentService.cancelDeduct(
                order.getUserId(), 
                order.getAmount()
            );
            
            throw new OrderCreateFailedException(e);
        }
    }
}

三、TCC 實現(xiàn)要點

1. 業(yè)務(wù)模型設(shè)計

在實現(xiàn) TCC 時,業(yè)務(wù)模型需要考慮預(yù)留資源的狀態(tài):

public class Inventory {
    private String productId;
    private int total;      // 總庫存
    private int available;  // 可用庫存
    private int frozen;     // 凍結(jié)庫存
}

public class Account {
    private String userId;
    private BigDecimal total;     // 總額
    private BigDecimal available; // 可用余額
    private BigDecimal frozen;    // 凍結(jié)金額
}

圖 3: TCC 中的資源狀態(tài)變化,來源 seata

2. 冪等性設(shè)計

所有操作都需要保證冪等,因為在網(wǎng)絡(luò)異常時可能會重試:

@Transactional
public void tryDeduct(String userId, BigDecimal amount, String xid) {
    // 檢查是否已經(jīng)執(zhí)行過
    if (tccLogRepository.existsByXidAndPhase(xid, "try")) {
        return;
    }
    
    // 執(zhí)行業(yè)務(wù)邏輯
    Account account = accountRepository.findById(userId);
    account.setFrozen(account.getFrozen().add(amount));
    account.setAvailable(account.getAvailable().subtract(amount));
    accountRepository.save(account);
    
    // 記錄執(zhí)行日志
    tccLogRepository.s

3. 防懸掛設(shè)計

(1) 為什么需要防懸掛?

在分布式系統(tǒng)中,網(wǎng)絡(luò)延遲、服務(wù)故障等原因可能導(dǎo)致一個奇怪的現(xiàn)象,Cancel 操作比 Try 操作先執(zhí)行。這就是所謂的"懸掛"問題。具體場景如下:

事務(wù)管理器在調(diào)用 TCC 服務(wù)的一階段 Try 操作時事務(wù)時,由于網(wǎng)絡(luò)擁堵,Try 請求沒有及時到達,事務(wù)管理器超時后,發(fā)起了 Cancel 請求完成后,此時原來的 Try 請求才到達,如果在執(zhí)行這個延遲的 Try 請求,將導(dǎo)致資源被錯誤鎖定

*圖: TCC 懸掛問題示意圖,來源:seata

(2) 解決方案

核心思路是記錄每個事務(wù)的執(zhí)行狀態(tài),并在執(zhí)行 Try 操作前進行檢查:

@Service
public class TccTransactionService {
    
    @Autowired
    private TccLogRepository tccLogRepository;
    
    @Transactional
    public void tryDeduct(String userId, BigDecimal amount, String xid) {
        // 1. 檢查是否已經(jīng)被 Cancel
        if (tccLogRepository.existsByXidAndPhase(xid, "cancel")) {
            throw new TransactionCancelledException("Transaction already cancelled");
        }
        
        // 2. 檢查是否已經(jīng)執(zhí)行過 Try (冪等性檢查)
        if (tccLogRepository.existsByXidAndPhase(xid, "try")) {
            return;
        }
        
        // 3. 執(zhí)行業(yè)務(wù)邏輯
        Account account = accountRepository.findById(userId);
        if (account.getAvailable().compareTo(amount) < 0) {
            throw new InsufficientBalanceException();
        }
        
        // 4. 記錄執(zhí)行日志
        account.setFrozen(account.getFrozen().add(amount));
        account.setAvailable(account.getAvailable().subtract(amount));
        accountRepository.save(account);
        tccLogRepository.save(new TccLog(xid, "try"));
    }
}

4. 超時處理

(1) 為什么需要超時處理?

在分布式環(huán)境下,超時是不可避免的,可能由于以下原因?qū)е?

  • 網(wǎng)絡(luò)延遲或故障
  • 服務(wù)器負(fù)載過高
  • 服務(wù)進程崩潰
  • 死鎖

如果不處理超時,會造成嚴(yán)重后果:

  • 資源被無限期鎖定
  • 事務(wù)無法正常結(jié)束
  • 系統(tǒng)可用性降低
  • 用戶體驗變差

(2) 超時處理機制

定時掃描超時事務(wù):

@Component
public class TccTimeoutChecker {
    
    @Autowired
    private TccLogRepository tccLogRepository;
    
    @Autowired
    private TccTransactionHandler transactionHandler;
    
    @Scheduled(fixedRate = 60000)  // 每分鐘執(zhí)行一次
    public void checkTimeout() {
        // 1. 查找超時的事務(wù)
        List<TccLog> timeoutLogs = tccLogRepository
            .findByPhaseAndCreateTimeBefore(
                "try", 
                LocalDateTime.now().minusMinutes(5)
            );
        
        for (TccLog log : timeoutLogs) {
            try {
                // 2. 執(zhí)行 Cancel 操作
                transactionHandler.cancelTransaction(log.getXid());
                
                // 3. 記錄取消日志
                log.setPhase("cancel");
                log.setUpdateTime(LocalDateTime.now());
                tccLogRepository.save(log);
                
            } catch (Exception e) {
                // 4. 記錄錯誤,可能需要人工介入
                errorLogger.log(
                    "Failed to cancel timeout transaction: " + log.getXid(),
                    e
                );
            }
        }
    }
}

超時配置管理:

@Configuration
public class TccConfig {
    
    @Value("${tcc.transaction.timeout:60000}")
    private long transactionTimeout;  // 默認(rèn)60秒
    
    @Value("${tcc.check.interval:5000}")
    private long checkInterval;       // 默認(rèn)5秒
    
    @Value("${tcc.retry.max:3}")
    private int maxRetryCount;        // 默認(rèn)重試3次
    
    @Value("${tcc.retry.interval:1000}")
    private long retryInterval;       // 默認(rèn)重試間隔1秒
    
    // getter and setter
}

監(jiān)控和告警:

@Component
public class TccMonitor {
    
    @Autowired
    private AlertService alertService;
    
    public void onTransactionTimeout(String xid) {
        // 記錄監(jiān)控指標(biāo)
        MetricsRegistry.counter("tcc.timeout").increment();
        
        // 發(fā)送告警
        alertService.sendAlert(
            "TCC Transaction Timeout",
            String.format("Transaction %s timeout", xid),
            AlertLevel.WARNING
        );
    }
    
    public void onCancelFailed(String xid, Exception e) {
        // 記錄監(jiān)控指標(biāo)
        MetricsRegistry.counter("tcc.cancel.failed").increment();
        
        // 發(fā)送告警
        alertService.sendAlert(
            "TCC Cancel Failed",
            String.format("Transaction %s cancel failed: %s", xid, e.getMessage()),
            AlertLevel.ERROR
        );
    }
}

(3) 最佳實踐

超時時間設(shè)置:

  • 根據(jù)業(yè)務(wù)特點設(shè)置合理的超時時間
  • 考慮網(wǎng)絡(luò)延遲和服務(wù)響應(yīng)時間
  • 為復(fù)雜業(yè)務(wù)預(yù)留足夠的處理時間
  • 不同類型的事務(wù)可以設(shè)置不同的超時時間

重試機制:

  • 實現(xiàn)指數(shù)退避算法
  • 設(shè)置最大重試次數(shù)
  • 合理的重試間隔
  • 重試時要考慮冪等性

監(jiān)控和告警:

  • 監(jiān)控超時事務(wù)數(shù)量
  • 監(jiān)控 Cancel 操作的成功率
  • 監(jiān)控資源占用情況
  • 設(shè)置合理的告警閾值

人工干預(yù):

  • 提供管理后臺
  • 支持手動觸發(fā) Cancel
  • 提供事務(wù)狀態(tài)查詢
  • 記錄詳細(xì)的操作日志

通過這些機制的組合,我們可以構(gòu)建一個健壯的 TCC 事務(wù)處理系統(tǒng),能夠:

  • 及時發(fā)現(xiàn)并處理超時事務(wù)
  • 防止資源被長期鎖定
  • 提供完善的監(jiān)控和運維能力
  • 在出現(xiàn)問題時及時告警并支持人工介入

四、最佳實踐

資源預(yù)留:

  • Try 階段要預(yù)留足夠的資源
  • 預(yù)留資源要考慮并發(fā)情況
  • 預(yù)留時間要合理設(shè)置

狀態(tài)機制:

  • 明確定義每個階段的狀態(tài)
  • 狀態(tài)轉(zhuǎn)換要有清晰的規(guī)則
  • 保存狀態(tài)轉(zhuǎn)換歷史

異常處理:

  • 所有異常都要有補償措施
  • 補償操作要能重試
  • 重試策略要合理設(shè)置

監(jiān)控告警:

  • 監(jiān)控每個階段的執(zhí)行情況
  • 設(shè)置合理的告警閾值
  • 提供人工干預(yù)的接口

五、適用場景

TCC 模式適合:

  • 強一致性要求高的業(yè)務(wù)
  • 實時性要求高的場景
  • 有資源鎖定需求的操作

不適合:

  • 業(yè)務(wù)邏輯簡單的場景
  • 對性能要求特別高的場景
  • 補償成本過高的業(yè)務(wù)

六、結(jié)論

TCC 是一種強大的分布式事務(wù)解決方案,它通過巧妙的補償機制來保證事務(wù)的一致性。雖然實現(xiàn)較為復(fù)雜,但在某些場景下是不可替代的選擇。

關(guān)鍵是要:

  • 理解業(yè)務(wù)場景
  • 合理設(shè)計補償邏輯
  • 做好異常處理
  • 重視監(jiān)控告警

通過合理使用 TCC 模式,我們可以在分布式系統(tǒng)中實現(xiàn)可靠的事務(wù)處理。

責(zé)任編輯:趙寧寧 來源: 架構(gòu)成長指南
相關(guān)推薦

2025-05-07 00:10:00

分布式事務(wù)TCC模式

2025-04-28 00:44:04

2025-04-29 04:00:00

分布式事務(wù)事務(wù)消息

2023-09-14 15:44:46

分布式事務(wù)數(shù)據(jù)存儲

2020-05-28 09:35:05

分布式事務(wù)方案

2025-04-30 10:44:02

2024-10-09 14:14:07

2021-06-28 10:03:44

分布式數(shù)據(jù)庫架構(gòu)

2022-01-12 10:02:02

TCC模式 Seata

2024-03-26 12:08:53

分布式事務(wù)存儲

2019-01-11 18:22:07

阿里巴巴技術(shù)開源

2010-07-21 13:53:41

SQL Server分

2024-06-28 09:07:19

2019-09-09 10:09:51

分布式事務(wù) 數(shù)據(jù)庫

2023-11-30 07:19:08

.NET開源

2024-06-13 08:04:23

2019-07-25 15:32:35

分布式事務(wù)微服務(wù)系統(tǒng)架構(gòu)

2025-08-27 09:11:48

2021-09-28 09:43:11

微服務(wù)架構(gòu)技術(shù)

2021-06-08 12:46:27

分布式阿里TCC
點贊
收藏

51CTO技術(shù)棧公眾號

成人在线观看网址| 美女性感视频久久久| 精品免费国产一区二区| a黄色在线观看| 国产一区二区在线影院| 97视频在线观看成人| 少妇太紧太爽又黄又硬又爽小说 | 成人h视频在线| 精品无码久久久久久久久| 嫩草影视亚洲| 日韩一区二区免费电影| 精品一卡二卡三卡| 好吊日视频在线观看| 91香蕉国产在线观看软件| 国产精品自在线| 天天操天天干视频| 老司机精品视频在线观看6| 国产精品一品二品| 国产精品成人观看视频国产奇米| 91嫩草丨国产丨精品| 秋霞蜜臀av久久电影网免费| 欧美久久久久久久久中文字幕| 男女视频网站在线观看| 天堂资源在线中文| 91首页免费视频| 亚洲综合小说区| 中文字幕码精品视频网站| 伊人久久大香线蕉综合热线| 日韩中文字幕视频在线| 极品粉嫩小仙女高潮喷水久久| 99视频有精品高清视频| 色女孩综合影院| aa视频在线播放| 黄色网页在线播放| 久久精品视频网| 狠狠爱一区二区三区| 精品国产一级片| 久久99精品一区二区三区三区| 奇米四色中文综合久久| 日本亚洲色大成网站www久久| 亚洲乱码精品| 日韩亚洲欧美中文高清在线| 男人的天堂av网| 久久最新网址| 亚洲欧美日韩精品久久奇米色影视| 图片区偷拍区小说区| 精品91福利视频| 欧美日韩精品久久久| 男女曰b免费视频| 在线观看特色大片免费视频| 天天综合天天做天天综合| 久久www视频| 四季久久免费一区二区三区四区| 日韩码欧中文字| 亚洲在线视频一区二区| a√资源在线| 国产精品久久久爽爽爽麻豆色哟哟 | 国产精品白丝喷水在线观看| 日韩成人精品一区二区| 日韩一区二区av| 五月婷婷六月香| 日韩欧美一区二区三区在线视频| 中日韩美女免费视频网站在线观看 | 成人av网站在线播放| 日日夜夜免费精品视频| 国产精品久久久久久久久久99| 亚洲精品成人在线视频| 久久这里只有| 国产欧美精品一区二区三区-老狼| 中文字幕一区二区三区人妻四季 | 亚洲成国产人片在线观看| japanese在线播放| 金瓶狂野欧美性猛交xxxx| 激情久久av一区av二区av三区| 91国视频在线| 欧美成人精品一区二区男人小说| 91极品视觉盛宴| 91国内在线播放| 视频欧美一区| 精品性高朝久久久久久久| 麻豆av免费观看| 日本在线电影一区二区三区| 免费av一区二区| 日韩欧美一区二区一幕| 三级久久三级久久久| 国产又爽又黄的激情精品视频| 国产一区二区三区视频免费观看| 国产精品一二三四| 欧美黄色直播| 黄色网址在线免费观看| 偷拍日韩校园综合在线| 亚洲免费av一区二区三区| 国产日本亚洲| 亚洲精品久久在线| 亚洲一区 欧美| 在线成人h网| 国产国产精品人在线视| www.污视频| 久久综合狠狠综合| 无码毛片aaa在线| 日韩欧美看国产| 日韩一区二区在线看| 亚洲av无码一区二区三区人 | 精品www久久久久奶水| 国产在线视频欧美一区| 精品一区二区三区电影| www.色小姐com| 久久综合网络一区二区| 91久久国产自产拍夜夜嗨| 欧美色视频免费| 亚洲一卡二卡三卡四卡五卡| 一区二区成人网| 秋霞蜜臀av久久电影网免费| 操日韩av在线电影| 无码人妻精品一区二区三区9厂 | 美女黄网久久| 91免费看蜜桃| 992tv免费直播在线观看| 亚洲成人激情av| 五月天婷婷在线观看视频| 小说区图片区色综合区| 久久91精品国产91久久久| 亚洲av无码精品一区二区| 成人性生交大片免费 | 亚洲欧洲一区二区天堂久久| 国产精品一区二区三区久久久| 午夜福利理论片在线观看| 亚洲精品乱码久久久久久黑人| 91国产精品视频在线观看| 一区二区三区韩国免费中文网站| 欧美放荡办公室videos4k| 91精品国产乱码久久久久| 久久蜜桃av一区精品变态类天堂| 欧美一级免费播放| 亚洲图色一区二区三区| 欧美成人性色生活仑片| 国产精品久久久久久久一区二区| 国产亚洲制服色| 日韩有码免费视频| 国产成人一区| 国产成人亚洲综合91| 欧美少妇另类| 一本色道久久综合亚洲91| av网站有哪些| 国产精品久久777777毛茸茸| 国产精品欧美久久| 欧美xxxx性xxxxx高清| 欧美一级片在线观看| 久久久99999| 国产一区二区在线观看免费| 最新av在线免费观看| 成人影院网站ww555久久精品| 最近2019年日本中文免费字幕| 亚洲无码精品一区二区三区| 国产偷国产偷亚洲高清人白洁| 国产视频一区二区三区在线播放 | 日韩精品视频中文在线观看| 日本网站在线免费观看| 99久久伊人网影院| 日本wwww视频| 精品理论电影| 国产免费一区二区三区在线观看 | 91成人性视频| 欧美高清成人| 欧美性极品少妇| 久久精品亚洲a| 国产激情视频一区二区在线观看| 国产成人艳妇aa视频在线| 久久久久观看| 国产精品高清在线| 免费黄色网址在线观看| 在线观看国产91| 免费观看特级毛片| 国产成人99久久亚洲综合精品| 91免费黄视频| 国产精品亚洲片在线播放| 成人a在线视频| 懂色av一区| 亚洲欧美国产精品专区久久| 亚洲网站在线免费观看| 亚洲黄色片在线观看| av黄色一级片| 久久国产精品色婷婷| 精品人妻人人做人人爽| 自拍偷拍精品| 亚洲自拍偷拍视频| 亚洲欧洲自拍| 久久综合久久88| 四虎在线免费看| 欧美美女喷水视频| 日本三级网站在线观看| 国产日韩欧美一区二区三区乱码| 亚洲一二三av| 香蕉亚洲视频| 成人短视频在线观看免费| 亚洲欧洲美洲国产香蕉| 91香蕉国产在线观看| 看黄在线观看| 久久精品欧美视频| 精品无吗乱吗av国产爱色| 欧美电影一区二区| 中文字幕高清在线免费播放| 一区二区三区在线观看视频| 亚洲国产欧美视频| 国产成人精品免费在线| 一区二区三区入口| 亚洲在线观看| 精品日韩在线播放| 精品一区二区三区中文字幕老牛| 成人片在线免费看| 福利一区和二区| 26uuu日韩精品一区二区| av片在线观看| 日日噜噜噜夜夜爽亚洲精品| 视频在线不卡| 亚洲国产精品va在线看黑人动漫 | 欧美黑人一级片| 国产欧美一区二区三区沐欲| 国产xxxx视频| 国产精品123| 亚洲精品综合在线观看| 日韩电影一区二区三区四区| 无码播放一区二区三区| 午夜精品免费| 最新视频 - x88av| 久久国产成人精品| 色涩成人影视在线播放| 亚洲欧美成人vr| 鲁丝一区二区三区免费| 国产成人一二| 国产精品免费一区二区三区观看| 麻豆久久一区| 亚洲自拍偷拍第一页| 精品一区二区三区在线观看视频| 国产精品美女在线观看| 精品视频在线一区二区在线| 国产成人综合精品在线| 神马久久午夜| 欧美一级淫片播放口| 538在线观看| 国内精品中文字幕| av第一福利在线导航| 欧美激情按摩在线| 97人澡人人添人人爽欧美| 欧美激情国内偷拍| 超黄网站在线观看| 久久久久久亚洲精品不卡| 日本在线视频网址| 欧美激情视频在线免费观看 欧美视频免费一 | 日韩电影精品| 成人免费网站在线| 精品视频成人| 成人午夜电影在线播放| 成人线上播放| 久久99九九| 女厕嘘嘘一区二区在线播放| 日韩欧美电影一区二区| 菠萝蜜一区二区| 一本一生久久a久久精品综合蜜| 欧美电影免费观看高清| 国产日韩欧美大片| 黄色成人在线网站| 亚洲中文字幕无码专区| 视频一区二区欧美| 日本不卡一区二区在线观看| 激情欧美日韩一区二区| 国产精品嫩草69影院| 93久久精品日日躁夜夜躁欧美| 中文精品在线观看| 亚洲国产成人自拍| 农村妇女精品一区二区| 午夜精品久久久久久久| 一级久久久久久| 欧美精品高清视频| 少妇高潮一区二区三区69| 亚洲欧洲在线播放| 麻豆tv在线| 国内精品久久久久影院 日本资源| 欧美xxxhd| 国产精品自拍网| 红杏成人性视频免费看| 欧美重口乱码一区二区| 婷婷亚洲图片| 成人一区二区免费视频| 欧美96一区二区免费视频| 日本成人xxx| 久久影院视频免费| 国产日韩欧美在线观看视频| 天天综合日日夜夜精品| 伊人网免费视频| 精品国内片67194| 久久久久久久影视| 欧美另类高清videos| 日韩欧美精品电影| 99re在线| 第一sis亚洲原创| 欧美日韩福利在线| 久久精品二区亚洲w码| 日本一区二区在线观看视频| 日本一区二区成人在线| 日产电影一区二区三区| 欧美三级一区二区| 日本黄色三级视频| 中文字幕日韩视频| 国产无遮挡裸体视频在线观看| 国产免费一区视频观看免费| 你懂的在线观看一区二区| 日韩video| 日韩一区欧美二区| 在线精品一区二区三区| 亚洲日本中文字幕区| 中文av免费观看| 日韩成人免费视频| 欧美v亚洲v| 国产日韩视频在线观看| 国产99亚洲| 日韩欧美不卡在线| 国产91丝袜在线播放九色| 国产又粗又猛又爽又黄的视频四季| 亚洲va欧美va人人爽午夜| 国产精品无码AV| 中文字幕综合在线| 欧美成a人片在线观看久| 韩国成人动漫在线观看| 午夜久久99| 三级黄色片播放| 综合久久一区二区三区| 中文字幕在线网址| 影音先锋欧美精品| 婷婷六月国产精品久久不卡| 国产亚洲精品自在久久| 欧美视频福利| 香蕉视频1024| 夜色激情一区二区| 国产视频一区二区三| 日日狠狠久久偷偷四色综合免费| 成人影院在线免费观看| 日韩久久不卡| 日本vs亚洲vs韩国一区三区| 中文字幕免费视频| 欧美中文字幕一区二区三区亚洲| 你懂的视频在线免费| 欧美一区第一页| 九一国产精品| 看欧美ab黄色大片视频免费 | 欧美日韩一区二区三| 久久精品三级| 亚洲精品色午夜无码专区日韩| 色噜噜狠狠一区二区三区果冻| 日韩porn| 国产va免费精品高清在线| 国产调教一区二区三区| caoporn超碰97| 国产精品欧美经典| 国产免费黄色大片| 欧美黄网免费在线观看| 国产91精品入| 干日本少妇首页| 日本一区二区三区国色天香 | 国产原创一区二区三区| 欧美 日韩 国产 一区二区三区 | 苍井空张开腿实干12次| 亚洲成人久久影院| 免费动漫网站在线观看| 国产精品丝袜白浆摸在线| 欧美大片aaaa| zjzjzjzjzj亚洲女人| 欧美日韩视频免费播放| 国产在线三区| 91手机视频在线观看| 韩日视频一区| av中文字幕免费观看| 欧美日韩精品一区二区三区四区 | 5278欧美一区二区三区| 精品日韩一区| 91视频免费入口| 欧美日韩性视频| 1区2区3区在线观看| 99久久无色码| 久久国产高清| 国产精品99久久久久久成人| 亚洲第一视频网站| 日本欧美韩国| 男人草女人视频| 久久久精品一品道一区| 国产三级视频在线播放| 26uuu另类亚洲欧美日本老年| 日韩欧美电影| 黑丝av在线播放| 91精品国产高清一区二区三区蜜臀| 阿v视频在线观看| 亚洲欧美精品在线观看| 成人性生交大片免费看中文| 中文字幕av片| 国语自产精品视频在线看| 日韩在线观看| 中文字幕 亚洲一区| 欧美一三区三区四区免费在线看 | 亚洲久久久久久| 欧美电影影音先锋|