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

Seata+TCC 解決分布式事務,真香!

云計算 分布式
TCC(Try Confirm Cancel)方案是一種應用層面侵入業務的兩階段提交。是目前最火的一種柔性事務方案,其核心思想是:針對每個操作,都要注冊一個與其對應的確認和補償(撤銷)操作。

今天這篇文章介紹一下Seata如何實現TCC事務模式,文章目錄如下:

圖片圖片

什么是TCC模式?

TCC(Try Confirm Cancel)方案是一種應用層面侵入業務的兩階段提交。是目前最火的一種柔性事務方案,其核心思想是:針對每個操作,都要注冊一個與其對應的確認和補償(撤銷)操作。

TCC分為兩個階段,分別如下:

  • 第一階段:Try(嘗試),主要是對業務系統做檢測及資源預留 (加鎖,鎖住資源)
  • 第二階段:本階段根據第一階段的結果,決定是執行confirm還是cancel

Confirm(確認):執行真正的業務(執行業務,釋放鎖)

Cancle(取消):是預留資源的取消(出問題,釋放鎖)

TCCTCC

為了方便理解,下面以電商下單為例進行方案解析,這里把整個過程簡單分為扣減庫存,訂單創建 2 個步驟,庫存服務和訂單服務分別在不同的服務器節點上。

假設商品庫存為 100,購買數量為 2,這里檢查和更新庫存的同時,凍結用戶購買數量的庫存,同時創建訂單,訂單狀態為待確認。

①Try 階段

TCC 機制中的 Try 僅是一個初步操作,它和后續的確認一起才能真正構成一個完整的業務邏輯,這個階段主要完成:

  • 完成所有業務檢查( 一致性 ) 。
  • 預留必須業務資源( 準隔離性 ) 。
  • Try 嘗試執行業務。

Try階段Try階段

②Confirm / Cancel 階段

根據 Try 階段服務是否全部正常執行,繼續執行確認操作(Confirm)或取消操作(Cancel)。

Confirm 和 Cancel 操作滿足冪等性,如果 Confirm 或 Cancel 操作執行失敗,將會不斷重試直到執行完成。

Confirm:當 Try 階段服務全部正常執行, 執行確認業務邏輯操作,業務如下圖:

Try->ConfirmTry->Confirm

這里使用的資源一定是 Try 階段預留的業務資源。在 TCC 事務機制中認為,如果在 Try 階段能正常的預留資源,那 Confirm 一定能完整正確的提交。

Confirm 階段也可以看成是對 Try 階段的一個補充,Try+Confirm 一起組成了一個完整的業務邏輯。

Cancel:當 Try 階段存在服務執行失敗, 進入 Cancel 階段,業務如下圖:

Try-CancelTry-Cancel

Cancel 取消執行,釋放 Try 階段預留的業務資源,上面的例子中,Cancel 操作會把凍結的庫存釋放,并更新訂單狀態為取消。

TCC模式的三種類型?

業內實際生產中對TCC模式進行了擴展,總結出了如下三種類型,其實從官方的定義中無此說法,不過是企業生產中根據實際的需求衍生出來的三種方案。

1、通用型 TCC 解決方案

通用型TCC解決方案是最經典的TCC事務模型的實現,正如第一節介紹的模型,所有的從業務都參與到主業務的決策中。

通用型TCC通用型TCC

適用場景:

由于從業務服務是同步調用,其結果會影響到主業務服務的決策,因此通用型 TCC 分布式事務解決方案適用于執行時間確定且較短的業務,比如電商系統的三個核心服務:訂單服務、賬戶服務、庫存服務。

這個三個服務要么同時成功,要么同時失敗。

圖片圖片

當庫存服務、賬戶服務的第二階段調用完成后,整個分布式事務完成。

2、異步確保型 TCC 解決方案

異步確保型 TCC 解決方案的直接從業務服務是可靠消息服務,而真正的從業務服務則通過消息服務解耦,作為消息服務的消費端,異步地執行。

異步確保型異步確保型

可靠消息服務需要提供 Try,Confirm,Cancel 三個接口。Try 接口預發送,只負責持久化存儲消息數據;Confirm 接口確認發送,這時才開始真正的投遞消息;Cancel 接口取消發送,刪除消息數據。

消息服務的消息數據獨立存儲,獨立伸縮,降低從業務服務與消息系統間的耦合,在消息服務可靠的前提下,實現分布式事務的最終一致性。

此解決方案雖然增加了消息服務的維護成本,但由于消息服務代替從業務服務實現了 TCC 接口,從業務服務不需要任何改造,接入成本非常低。

適用場景:

由于從業務服務消費消息是一個異步的過程,執行時間不確定,可能會導致不一致時間窗口增加。因此,異步確保性 TCC 分布式事務解決方案只適用于對最終一致性時間敏感度較低的一些被動型業務(從業務服務的處理結果不影響主業務服務的決策,只被動的接收主業務服務的決策結果)。比如會員注冊服務和郵件發送服務:

圖片圖片

3、補償型 TCC 解決方案

補償型 TCC 解決方案與通用型 TCC 解決方案的結構相似,其從業務服務也需要參與到主業務服務的活動決策當中。但不一樣的是,前者的從業務服務只需要提供 Do 和 Compensate 兩個接口,而后者需要提供三個接口。

圖片圖片

Do 接口直接執行真正的完整業務邏輯,完成業務處理,業務執行結果外部可見;Compensate 操作用于業務補償,抵消或部分抵消正向業務操作的業務結果,Compensate操作需滿足冪等性。

與通用型解決方案相比,補償型解決方案的從業務服務不需要改造原有業務邏輯,只需要額外增加一個補償回滾邏輯即可,業務改造量較小。但要注意的是,業務在一階段就執行完整個業務邏輯,無法做到有效的事務隔離,當需要回滾時,可能存在補償失敗的情況,還需要額外的異常處理機制,比如人工介入。

適用場景:

由于存在回滾補償失敗的情況,補償型 TCC 分布式事務解決方案只適用于一些并發沖突較少或者需要與外部交互的業務,這些外部業務不屬于被動型業務,其執行結果會影響主業務服務的決策。

以上部分內容參考自:https://seata.io/zh-cn/blog/tcc-mode-applicable-scenario-analysis.html?utm_source=gold_browser_extension

TCC事務模式的落地實現

當然Seata支持的事務模式不局限于AT模式,還有TCC模式、SAGA模式、XA模式,下面整合一下TCC模式。

1、演示場景

就以電商系統中下訂單為例,為了演示,直接去掉賬戶服務,以訂單服務、庫存服務為例介紹。

具體的邏輯如下:

  • 客戶端調用下訂單接口
  • 扣庫存
  • 創建訂單
  • 請求完成

根據上面的邏輯可知,訂單服務肯定是主業務服務,事務的發起方,庫存服務是從業務服務,參與事務的決策。

Seata的AT模式解決方案偽代碼如下:

@GlobalTransactional
public Result<Void> createOrder(Long productId,Long num,.....){
    //1、扣庫存
    reduceStorage();
    //2、創建訂單
    saveOrder();
}

@GlobalTransactional這個注解用于發起一個全局事務。

但是AT模式有局限性,如下:

  • 性能低,鎖定資源時間太長
  • 無法解決跨應用的事務

因此對于要求性能的下單接口,可以考慮使用TCC模式進行拆分成兩階段執行,這樣整個流程鎖定資源的時間將會變短,性能也能提高。

此時的TCC模式的拆分如下:

1)一階段的Try操作

TCC模式中的Try階段其實就是預留資源,在這個過程中可以將需要的商品數量的庫存凍結,這樣就要在庫存表中維護一個凍結的庫存這個字段。

偽代碼如下:

@Transactional
public boolean try(){
  //凍結庫存
  frozenStorage();
  //生成訂單,狀態為待確認
  saveOrder();
}

注意:@Transactional開啟了本地事務,只要出現了異常,本地事務將會回滾,同時執行第二階段的cancel操作。

2)二階段的confirm操作

confirm操作在一階段try操作成功之后提交事務,涉及到的操作如下:

  • 釋放try操作凍結的庫存(凍結庫存-購買數量)
  • 生成訂單

偽代碼如下:

@Transactional
public boolean confirm(){
    //釋放掉try操作預留的庫存
    cleanFrozen();
    //修改訂單,狀態為已完成
    updateOrder();
    return true;
}

注意:這里如果返回false,遵循TCC規范,應該要不斷重試,直到confirm完成。

3)二階段的cancel操作

cancel操作在一階段try操作出現異常之后執行,用于回滾資源,涉及到的操作如下:

  • 恢復凍結的庫存(凍結庫存-購買數量、庫存+購買數量)
  • 刪除訂單

偽代碼如下:

@Transactional
public boolean cancel(){
    //釋放掉try操作預留的庫存
    rollbackFrozen();
    //修改訂單,狀態為已完成
    delOrder();
    return true;
}

注意:這里如果返回false,遵循TCC規范,應該要不斷重試,直到cancel完成。

2、TCC事務模型的三個異常

實現TCC事務模型涉及到的三個異常是不可避免的,實際生產中必須要規避這三大異常。

1)空回滾

定義:在未調用try方法或try方法未執行成功的情況下,就執行了cancel方法進行了回滾。

怎么理解呢?未調用try方法就執行了cancel方法,這個很容易理解,既然沒有預留資源,那么肯定是不能回滾。

try方法未執行成功是什么意思?

可以看上節中的第一階段try方法的偽代碼,由于try方法開啟了本地事務,一旦try方法執行過程中出現了異常,將會導致try方法的本地事務回滾(注意這里不是cancel方法回滾,而是try方法的本地事務回滾),這樣其實try方法中的所有操作都將會回滾,也就沒有必要調用cancel方法。

但是實際上一旦try方法拋出了異常,那么必定是要調用cancel方法進行回滾,這樣就導致了空回滾。

解決方案:

解決邏輯很簡單:在cancel方法執行操作之前,必須要知道try方法是否執行成功。

2)冪等性

TCC模式定義中提到:如果confirm或者cancel方法執行失敗,要一直重試直到成功。

這里就涉及了冪等性,confirm和cancel方法必須保證同一個全局事務中的冪等性。

解決方案:

解決邏輯很簡單:對付冪等,自然是要利用冪等標識進行防重操作。

3)懸掛

事務協調器在調用 TCC 服務的一階段 Try 操作時,可能會出現因網絡擁堵而導致的超時,此時事務管理器會觸發二階段回滾,調用 TCC 服務的 Cancel 操作,Cancel 調用未超時;

在此之后,擁堵在網絡上的一階段 Try 數據包被 TCC 服務收到,出現了二階段 Cancel 請求比一階段 Try 請求先執行的情況,此 TCC 服務在執行晚到的 Try 之后,將永遠不會再收到二階段的 Confirm 或者 Cancel ,造成 TCC 服務懸掛。

解決方案:

解決邏輯很簡單:在執行try方法操作資源之前判斷cancel方法是否已經執行;同樣的在cancel方法執行后要記錄執行的狀態。

4)總結

針對以上三個異常,落地的解決方案很多,比如維護一個事務狀態表,每個事務的執行階段全部記錄下來。

  • 冪等:在執行confirm或者cancel之前根據事務狀態表查詢當前全局事務是否已經執行過confirm或者cancel方法
  • 空回滾:在執行cancel之前才能根據事務狀態表查詢當前全局事務是否已經執行成功try方法
  • 懸掛:在執行try方法之前,根據事務狀態表查詢當前全局事務是否已經執行過cancel方法

Seata整合TCC實現

本節只介紹關鍵代碼,畢竟篇幅有限,其他部分請自行下載源碼。

案例源碼已上傳GitHub,關注公眾號:碼猿技術專欄,回復關鍵:9528 獲取!

源碼目錄如下:

源碼目錄源碼目錄

項目啟動所需要的相關文件如下圖:

圖片圖片

nacos目錄中的SEATA_GROUP是Seata事務服務端和客戶端所需要的相關配置,直接導入nacos即可。

seata目錄中的conf是1.3.0版本服務端的配置

SQL目錄是相關的幾個數據庫。

1、TCC接口定義

在order-boot模塊創建OrderTccService,代碼如下:

圖片圖片

代碼中注釋已經很完整了,下面挑幾個重點介紹一下:

1)@LocalTCC:該注解開啟TCC事務

2)@TwoPhaseBusinessAction:該注解標注在try方法上,其中的三個屬性如下:

  • name:TCC事務的名稱,必須是唯一的
  • commitMethod:confirm方法的名稱,默認是commit
  • rollbackMethod:cancel方法的名稱,默認是rollback

3)confirm和cancel的返回值尤為重要,返回false則會不斷的重試。

2、TCC接口實現

定義有了,總要實現,如下:

1)try方法

try方法try方法

①處的代碼是為了防止懸掛異常,從事務日志表中獲取全局事務ID的狀態,如果是cancel狀態則不執行。

②處的代碼凍結庫存

③處的代碼生成訂單,狀態為待確認

④處的代碼向冪等工具類中添加一個標記,key為當前類和全局事務ID,value為當前時間戳。

注意:必須要開啟本地事務,如上代碼使用@Transactional開啟本地事務

2)confirm方法

confirm方法confirm方法

①處的代碼從冪等工具類中根據當前類和全局事務ID獲取值,由于try階段執行成功會向其中添加值,confirm方法執行成功會移出這個值,因此在confirm開頭判斷這個值是否存在就起到了冪等效果,防止重試的效果。

⑥處的代碼從冪等工具類中移出try方法中添加的值。

②處的代碼是從BusinessActionContext中獲取try方法中的入參。

③處的代碼是釋放掉凍結的庫存

④處的代碼是修改訂單的狀態為已完成。

注意:1. 開啟本地事務  2. 注意返回值,返回false時將會重試

3)cancel方法

cancel方法cancel方法

①處的代碼是向事務日志記錄表中插入一條數據,標記當前事務進入cancel方法,用來防止懸掛,這個和try方法中的①處的代碼相呼應。

②處的代碼是為了防止冪等和空回滾,因為只有當try方法中執行成功冪等工具類中對應的當前類和全局事務ID才會存儲該值。這樣既防止了冪等,也防止了空回滾。

③處的代碼恢復凍結的庫存。

④處的代碼刪除這筆訂單

⑤處的代碼是移出冪等工具類當前類和全局事務ID對應的值。

3、如何防止TCC模型的三個異常?

實現方法有很多,有些案例是全部使用事務日志表記錄當前的狀態,這樣完美的解決了冪等、空回滾、懸掛的問題。

陳某這里為了方便,使用了兩種方案,如下:

1)冪等、空回滾

使用了一個冪等工具類,其中是個Map,key為當前類和全局事務ID,value是時間戳。

代碼如下:

圖片圖片

思路如下:

  • 在try方法最后使用冪等工具類中的add方法添加值
  • 在confirm、cancel方法中使用冪等工具類中的remove方法移出值
  • 在confirm、cancel方法中使用冪等工具類中get方法獲取值,如果為空,則表示已經執行過了,直接返回true,這樣既防止了冪等,也防止了空回滾。

2)懸掛

懸掛的實現依靠的是事務日志表,表結構如下:

CREATE TABLE`transactional_record` (
`id`bigint(11) NOTNULL AUTO_INCREMENT,
`xid`varchar(100) NOTNULL,
`status`int(1) DEFAULTNULLCOMMENT'1. try  2 commit 3 cancel ',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDBDEFAULTCHARSET=utf8mb4;

其中的xid是全局事務ID,status是事務的狀態。

其他的字段自己可以擴展

解決懸掛問題的邏輯如下:

1)cancel方法中將當前全局事務ID記錄到事務日志表中,狀態為cancel

2)try方法執行資源操作前檢查事務日志表中當前全局事務ID是否已經是cancel狀態

4、創建訂單的業務方法

上面只是完成了TCC的三個方法,主業務事務發起方還未提供,代碼如下:

圖片圖片

@GlobalTransactional這個注解開啟了全局事務,是事務的發起方。

內部直接調用的TCC的try方法。

5、其他的配置

以上只是列出了關鍵的步驟,剩余其他的配置自己根據案例源碼完善,如下:

  • 接口測試
  • 整合nacos
  • 整合feign
  • 整合seata,TCC模式中的配置和AT模式的Seata配置相同

注意:一定要配置Seata的事務組tx-service-group,配置方法見之前的文章。

6、總結

TCC事務模型相對來說比較簡單的一種,有興趣的可以下載源碼試試。

責任編輯:武曉燕 來源: 碼猿技術專欄
相關推薦

2024-10-09 14:14:07

2022-03-24 07:51:27

seata分布式事務Java

2022-01-12 10:02:02

TCC模式 Seata

2025-05-07 00:10:00

分布式事務TCC模式

2022-06-27 08:21:05

Seata分布式事務微服務

2022-06-21 08:27:22

Seata分布式事務

2020-12-09 09:14:57

SpringCloudSeata 分布式

2025-04-28 00:44:04

2022-07-10 20:24:48

Seata分布式事務

2021-06-08 12:46:27

分布式阿里TCC

2024-12-09 09:35:00

2025-01-26 00:00:40

Seata分布式事務

2025-08-27 09:11:48

2023-11-06 13:15:32

分布式事務Seata

2021-04-23 08:15:51

Seata XA AT

2024-08-19 09:05:00

Seata分布式事務

2024-06-12 09:06:48

2022-07-03 14:03:57

分布式Seata

2023-01-06 09:19:12

Seata分布式事務

2020-12-08 11:43:03

Spring Clou分布式Seata
點贊
收藏

51CTO技術棧公眾號

狠狠做深爱婷婷综合一区| 三区四区电影在线观看| 亚洲巨乳在线| 亚洲欧美国产制服动漫| 黄色片在线免费| 黄色免费在线网站| 北岛玲一区二区三区四区| 日本午夜人人精品| 小早川怜子一区二区的演员表| 免费观看在线一区二区三区| 欧美日韩激情视频| 亚洲精品中文字幕在线| 亚洲精品97久久中文字幕无码| 国产日韩一区二区三区在线| xvideos亚洲| 国产草草浮力影院| 日韩一级视频| 欧美日韩中文字幕| 国产一区一区三区| 四虎影院在线播放| 国产精品一区二区免费不卡 | 美女网站色91| 91精品国产91久久久久久吃药| 成人免费视频入口| 婷婷综合福利| 精品国产91洋老外米糕| 奇米视频7777| 视频一区在线免费看| 亚洲一级电影视频| 国产又黄又爽免费视频| 福利在线午夜| 久久亚洲综合av| 亚洲自拍av在线| 亚洲天堂视频在线| 久久久久久穴| 69精品小视频| 国产亚洲第一页| 99精品视频精品精品视频| 亚洲精品之草原avav久久| 91精品人妻一区二区三区蜜桃2| 成人精品动漫| 在线免费观看一区| 无码aⅴ精品一区二区三区浪潮 | 国产成一区二区| 日本午夜小视频| 欧美xxx在线观看| 久久激情视频免费观看| 免费看日本黄色片| 国产一区二区三区91| 精品亚洲一区二区三区四区五区| 岛国精品一区二区三区| 日本一区影院| 欧美sm极限捆绑bd| 日本泡妞xxxx免费视频软件| 日韩三级av高清片| 日韩欧美一区中文| 一区二区三区人妻| 综合伊人久久| 亚洲第一天堂无码专区| 国产精品亚洲一区二区无码| 白白在线精品| 亚洲激情小视频| www.免费av| 亚洲自拍电影| 国产一区二区黄| 伊人影院综合网| 色婷婷色综合| 美女久久久久久久久久久| 好吊色视频在线观看| 亚洲成av人**亚洲成av**| 国产精品视频一区二区三区四| 国产成人精品一区二三区| 中日韩男男gay无套| 69影院欧美专区视频| 久久精品视频7| 欧美亚洲一区| 国产欧美一区二区| 精品二区在线观看| av不卡免费电影| 欧美日韩成人一区二区三区| 免费a在线观看| 国产清纯美女被跳蛋高潮一区二区久久w| 日韩片电影在线免费观看| 调教视频免费在线观看| 一区二区欧美视频| 爱福利视频一区二区| 精品久久在线| 欧美精品一区二区久久婷婷| 欧美老熟妇乱大交xxxxx| 日韩黄色大片网站| 欧美丰满老妇厨房牲生活 | 欧洲综合视频| 久久亚洲捆绑美女| 一本一道久久a久久精品综合| 中中文字幕av在线| 精品久久久久久亚洲精品| 无码少妇一区二区三区芒果| 久久精品九色| 日韩国产在线看| 国产稀缺精品盗摄盗拍| 国产精品一级| 亚洲999一在线观看www| 青青青手机在线视频观看| 亚洲女人的天堂| 女人和拘做爰正片视频| 欧美高清一级片| 亚洲最新在线视频| 国产一级在线播放| 卡一卡二国产精品| 久久精品国产一区二区三区日韩| 1024视频在线| 欧美性xxxxhd| 北京富婆泄欲对白| 亚洲网色网站| 国产精品第10页| 日本免费一区视频| 国产精品福利av| 自慰无码一区二区三区| 亚洲一级大片| 久久天天躁夜夜躁狠狠躁2022| 99超碰在线观看| 成人av电影在线观看| 二级片在线观看| 久久亚洲精品爱爱| 国产在线看一区| 精品国产一区二区亚洲人成毛片| 久草免费资源站| 91久久夜色精品国产按摩| 欧美在线观看网站| 亚洲a视频在线| 亚洲色图欧洲色图| 免费激情视频在线观看| 国产一区二区三区亚洲综合| 在线亚洲欧美视频| 欧美一区二区三区网站| a美女胸又www黄视频久久| 国产资源第一页| 国产日本亚洲| 不卡av电影在线观看| 在线免费观看高清视频| 亚洲国产精品二十页| 熟妇人妻va精品中文字幕| 青草久久视频| 91精品国产91久久久久福利| 天天干天天舔天天射| 亚洲午夜免费视频| 亚洲图片综合网| 亚洲精品激情| 久久精品中文字幕一区二区三区 | 免费av一级片| 亚洲高清不卡在线观看| 国产伦精品一区二区三区88av| 欧美黄色精品| 国产精品播放| 国产在线观看www| 亚洲国产精品久久| 91精品国产乱码久久久张津瑜| 成人av第一页| 亚洲熟妇av日韩熟妇在线| 欧美精品密入口播放| 3344国产精品免费看| 欧美色图另类| 欧美色倩网站大全免费| 免费精品在线视频| 韩国精品在线观看| 日韩精品一区二区在线视频| 另类ts人妖一区二区三区| 91成人精品网站| 国产精品四虎| 欧美精品久久天天躁| 精品无码久久久久成人漫画| 国产精品主播直播| 野外做受又硬又粗又大视频√| 欧美电影免费网站| 国产精品九九九| 91cn在线观看| 日韩精品在线影院| 在线观看一二三区| 亚洲愉拍自拍另类高清精品| 亚洲av无码成人精品国产| 日韩av成人高清| 69精品丰满人妻无码视频a片| 粉嫩的18在线观看极品精品| 全球成人中文在线| 国产三区在线观看| 日韩av中文在线| 中文字幕乱码视频| 亚洲高清免费观看高清完整版在线观看| 手机av免费看| 国产精品亚洲午夜一区二区三区| 91av资源网| 亚洲精品网址| 清纯唯美一区二区三区| 国内精品视频| 日韩免费中文字幕| 日韩精品卡一| 在线播放精品一区二区三区| www.国产欧美| 精品视频123区在线观看| 精品无码久久久久久久久| 久久久99精品久久| 97精品人人妻人人| 免费在线看一区| 尤物av无码色av无码| 亚洲精品tv久久久久久久久久| 欧美精品一区二区三区在线四季 | 成人免费网站入口| 成人三级视频| 麻豆精品传媒视频| 婷婷视频一区二区三区| 国产精品爽爽爽爽爽爽在线观看| heyzo在线欧美播放| 久久精品视频在线播放| 欧美精品少妇| 亚洲精品国产精品乱码不99按摩 | 最新中文字幕免费| 午夜精品久久久| 久草视频免费在线| 亚洲人午夜精品天堂一二香蕉| 三上悠亚ssⅰn939无码播放 | 欧美人妻一区二区三区| a亚洲天堂av| 日韩成人av影院| 国产综合色视频| 在线不卡一区二区三区| 天堂午夜影视日韩欧美一区二区| 国产主播自拍av| 国内精品福利| 国产91沈先生在线播放| 亚洲综合婷婷| 国产高清免费在线| 久久一区91| 一区二区三区四区国产| 欧美一站二站| 久久精品ww人人做人人爽| 精品欧美午夜寂寞影院| 国产精品毛片va一区二区三区| 精品中文在线| 亚洲一区二区三区乱码aⅴ蜜桃女| 欧洲亚洲精品| 成人激情视频在线| 成人噜噜噜噜| 91手机在线观看| 亚洲日本视频在线| 亚洲综合最新在线| 日韩区一区二| 国产精品9999久久久久仙踪林| 91成人短视频| 国产麻豆日韩| 亚洲专区视频| 亚洲第一综合| 99久久婷婷国产综合精品电影√| 亚洲精品欧美精品| 999精品色在线播放| 自拍偷拍一区二区三区| 亚洲国产不卡| 日韩人妻无码精品久久久不卡| 亚洲国产专区校园欧美| 日韩av在线第一页| 日韩国产在线观看| 欧美美女一级片| 国产激情偷乱视频一区二区三区| 亚洲女则毛耸耸bbw| 91在线云播放| 我不卡一区二区| 亚洲男人天堂一区| 免费一级特黄特色大片| 欧美日韩中文字幕综合视频| 午夜视频网站在线观看| 91麻豆精品国产自产在线观看一区| 国产视频一区二区三区四区五区| 精品欧美乱码久久久久久 | 欧美激情一区二区三区蜜桃视频| 亚洲精品国产精品国自| 亚洲黄色性网站| 国产精品第9页| 欧美三级视频在线播放| 亚洲第一视频在线播放| 亚洲精品自产拍| 黄在线免费观看| 97在线视频免费看| 91天天综合| 国产精品免费一区二区三区| 国产a久久精品一区二区三区| 成年人黄色在线观看| 夜久久久久久| 中文字幕永久有效| 不卡免费追剧大全电视剧网站| 久操视频在线观看免费| 亚洲激情综合网| 青青国产在线视频| 日韩免费高清视频| 丁香婷婷在线| 欧美极品少妇全裸体| 成人mm视频在线观看| 成人午夜电影免费在线观看| 精品一区二区三区的国产在线观看| 欧美日韩午夜爽爽| 日韩主播视频在线| 岛国精品一区二区三区| 国产精品无人区| 97超碰人人干| 日韩精品资源二区在线| av片在线看| 欧美最猛性xxxxx免费| 亚洲日本va| 最新中文字幕久久| 日韩成人dvd| 在线观看国产网站| 亚洲宅男天堂在线观看无病毒| 亚洲字幕av一区二区三区四区| 日韩av中文字幕在线免费观看| 成人福利片网站| 国产精品视频自在线| 在线日本制服中文欧美| 18黄暴禁片在线观看| 国产综合久久久久影院| 亚洲第一综合网| 色综合久久天天综合网| 免费观看黄色一级视频| 久久99国产精品自在自在app| www.成人在线视频| 欧美二区三区| 国产精品乱看| 久久久国产精品无码| 亚洲国产日产av| 性生活视频软件| 色综合久久天天综线观看| 色综合久久久| 一区二区视频在线播放| 蜜桃在线一区二区三区| 国产肥白大熟妇bbbb视频| 色综合欧美在线视频区| 青青操视频在线| 秋霞成人午夜鲁丝一区二区三区| 欧美黑人巨大videos精品| 可以在线看的av网站| 不卡电影一区二区三区| 日韩免费一级片| 亚洲国产精品久久久久秋霞不卡| 国产理论电影在线| 成人情视频高清免费观看电影| 自拍日韩欧美| 亚洲熟妇一区二区| 亚洲妇女屁股眼交7| 日韩在线一区二区三区四区| 国产综合在线看| aaa国产精品| 国产69精品久久久久999小说| 成人91在线观看| 中文字幕第15页| 亚洲免费高清视频| 亚洲播播91| 亚洲欧洲一区二区| 国内成人免费视频| 美女福利视频在线观看| 精品国产乱码久久久久久图片| 草草影院在线| 免费99视频| 蜜臀久久99精品久久久画质超高清| 久久精品国产亚洲AV成人婷婷| 欧美精品一二三四| 欧洲黄色一区| 久久综合毛片| 蜜臂av日日欢夜夜爽一区| 中文字幕五月天| 亚洲国产精品99久久| 欧美gay视频| 伊人狠狠色丁香综合尤物| 国产高清无密码一区二区三区| 日韩高清精品免费观看| 亚洲人成伊人成综合网久久久| 欧美日韩免费电影| 日本中文字幕一级片| 99国产精品久久| 又污又黄的网站| 久久久久久久久91| 中文字幕伦av一区二区邻居| 91视频这里只有精品| 一个色妞综合视频在线观看| 人成在线免费视频| 成人黄色免费网站在线观看| 亚洲黄色毛片| 69xxx免费| 亚洲第一中文字幕在线观看| 性感美女一区二区在线观看| 国产精品一二三在线观看| 久久久久久久一区| 99视频免费看| 国产99久久久欧美黑人| 亚洲精品91| 成人无码av片在线观看| 欧美成人一级视频| 欧美××××黑人××性爽| 日韩精品久久一区二区| 日本一区二区在线不卡| 欧美熟妇乱码在线一区| 国产日韩在线看片| 国产精品尤物| 欧美日韩在线国产|