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

如何實現一個通用的分布式事務框架?

開發 后端 分布式
本文將以Spring容器為例,試圖分析一下,實現一個通用的TCC分布式事務框架需要注意的一些問題。

一個TCC事務框架需要解決的當然是分布式事務的管理。關于TCC事務機制的介紹,可以參考TCC事務機制簡介。

TCC事務模型雖然說起來簡單,然而要基于TCC實現一個通用的分布式事務框架,卻比它看上去要復雜的多,不只是簡單的調用一下Confirm/Cancel業務就可以了的。

本文將以Spring容器為例,試圖分析一下,實現一個通用的TCC分布式事務框架需要注意的一些問題。

一、TCC全局事務必須基于RM本地事務來實現

TCC服務是由Try/Confirm/Cancel業務構成的,其Try/Confirm/Cancel業務在執行時,會訪問資源管理器(Resource Manager,下文簡稱RM)來存取數據。

這些存取操作,必須要參與RM本地事務,以使其更改的數據要么都commit,要么都rollback。

這一點不難理解,考慮一下如下場景:

 

假設圖中的服務B沒有基于RM本地事務(以RDBS為例,可通過設置auto-commit為true來模擬),那么一旦[B:Try]操作中途執行失敗,TCC事務框架后續決定回滾全局事務時,該[B:Cancel]則需要判斷[B:Try]中哪些操作已經寫到DB、哪些操作還沒有寫到DB.

假設[B:Try]業務有5個寫庫操作,[B:Cancel]業務則需要逐個判斷這5個操作是否生效,并將生效的操作執行反向操作。

不幸的是,由于[B:Cancel]業務也有n(0<=n<=5)個反向的寫庫操作,此時一旦[B:Cancel]也中途出錯,則后續的[B:Cancel]執行任務更加繁重。

因為相比第一次[B:Cancel]操作,后續的[B:Cancel]操作還需要判斷先前的[B:Cancel]操作的n(0<=n<=5)個寫庫中哪幾個已經執行、哪幾個還沒有執行.

這就涉及到了冪等性問題,而對冪等性的保障,又很可能還需要涉及額外的寫庫操作,該寫庫操作又會因為沒有RM本地事務的支持而存在類似問題。。。

可想而知,如果不基于RM本地事務,TCC事務框架是無法有效的管理TCC全局事務的。

反之,基于RM本地事務的TCC事務,這種情況則會很容易處理。

[B:Try]操作中途執行失敗,TCC事務框架將其參與RM本地事務直接rollback即可。后續TCC事務框架決定回滾全局事務時,在知道“[B:Try]操作涉及的RM本地事務已經rollback”的情況下,根本無需執行[B:Cancel]操作。

換句話說,基于RM本地事務實現TCC事務框架時,一個TCC型服務的cancel業務要么執行,要么不執行,不需要考慮部分執行的情況。

二、TCC事務框架應該接管Spring容器的TransactionManager

基于RM本地事務的TCC事務框架,可以將各Try/Confirm/Cancel業務看成一個原子服務:一個RM本地事務提交,參與該RM本地事務的所有Try/Confirm/Cancel業務操作都生效;反之,則都不生效。

掌握每個RM本地事務的狀態以及它們與Try/Confirm/Cancel業務方法之間的對應關系,以此為基礎,TCC事務框架才能有效的構建TCC全局事務。

TCC服務的Try/Confirm/Cancel業務方法在RM上的數據存取操作,其RM本地事務是由Spring容器的PlatformTransactionManager來commit/rollback的,TCC事務框架想要了解RM本地事務的狀態,只能通過接管Spring的事務管理器功能。

2.1. 為什么TCC事務框架需要掌握RM本地事務的狀態?

首先,根據TCC機制的定義,TCC事務是通過執行Cancel業務來達到回滾效果的。仔細分析一下,這里暗含一個事實:只有生效的Try業務操作才需要執行對應的Cancel業務操作。

換句話說,只有Try業務操作所參與的RM本地事務被commit了,后續TCC全局事務回滾時才需要執行其對應的Cancel業務操作

否則,如果Try業務操作所參與的RM本地事務被rollback了,后續TCC全局事務回滾時就不能執行其Cancel業務,此時若盲目執行Cancel業務反而會導致數據不一致。

其次,Confirm/Cancel業務操作必須保證生效。Confirm/Cancel業務操作也會涉及RM數據存取操作,其參與的RM本地事務也必須被commit。

TCC事務框架需要在確切的知道所有Confirm/Cancel業務操作參與的RM本地事務都被成功commit后,才能將標記該TCC全局事務為完成。

如果TCC事務框架誤判了Confirm/Cancel業務參與RM本地事務的狀態,就會造成全局事務不一致。

最后,未完成的TCC全局,TCC事務框架必須重新嘗試提交/回滾操作。重試時會再次調用各TCC服務的Confirm/Cancel業務操作。

如果某個服務的Confirm/Cancel業務之前已經生效(其參與的RM本地事務已經提交),重試時就不應該再次被調用。否則,其Confirm/Cancel業務被多次調用,就會有“服務冪等性”的問題。

2.2. 攔截TCC服務的Try/Confirm/Cancel業務方法的執行,根據其異常信息可否知道其RM本地事務是否commit/rollback了呢?

基本上很難做到,為什么這么說?

第一,事務是可以在多個(本地/遠程)服務之間互相傳播其事務上下文的,一個業務方法(Try/Confirm/Cancel)執行完畢并不一定會觸發當前事務的commit/rollback操作。

比如,被傳播事務上下文的業務方法,在它開始執行時,容器并不會為其創建新的事務,而是它的調用方參與的事務,使得二者操作在同一個事務中;同樣,在它執行完畢時,容器也不會提交/回滾它參與的事務的。

因此,這類業務方法上的異常情況并不能反映他們是否生效。不接管Spring的TransactionManager,就無法了解事務于何時被創建,也無法了解它于何時被提交/回滾。

第二、一個業務方法可能會包含多個RM本地事務的情況。

比如:A(REQUIRED)->B(REQUIRES_NEW)->C(REQUIRED),這種情況下,A服務所參與的RM本地事務被提交時,B服務和C服務參與的RM本地事務則可能會被回滾。

第三、并不是拋出了異常的業務方法,其參與的事務就回滾了。

Spring容器的聲明式事務定義了兩類異常,其事務完成方向都不一樣:系統異常(一般為Unchecked異常,默認事務完成方向是rollback)、應用異常(一般為Checked異常,默認事務完成方向是commit)。

二者的事務完成方向又可以通過@Transactional配置顯式的指定,如rollbackFor/noRollbackFor等。

第四、Spring容器還支持使用setRollbackOnly的方式顯式的控制事務完成方向;

最后,自行攔截業務方法的攔截器和Spring的事務處理的攔截器還會存在執行先后、攔截范圍不同等問題。

例如,如果自行攔截器執行在前,就會出現業務方法雖然已經執行完畢但此時其參與的RM本地事務還沒有commit/rollback。

TCC事務框架的定位應該是一個TransactionManager,其職責是負責commit/rollback事務。

而一個事務應該commit、還是rollback,則應該是由Spring容器來決定的:

Spring決定提交事務時,會調用TransactionManager來完成commit操作;Spring決定回滾事務時,會調用TransactionManager來完成rollback操作。

接管Spring容器的TransactionManager,TCC事務框架可以明確的得到Spring的事務性指令,并管理Spring容器中各服務的RM本地事務。

否則,如果通過自行攔截的機制,則使得業務系統存在TCC事務處理、RM本地事務處理兩套事務處理邏輯,二者互不通信,各行其是。

這種情況下要協調TCC全局事務,基本上可以說是緣木求魚,本地事務尚且無法管理,更何談管理分布式事務?

三、TCC事務框架應該具備故障恢復機制

一個TCC事務框架,若是沒有故障恢復的保障,是不成其為分布式事務框架的。

分布式事務管理框架的職責,不是做出全局事務提交/回滾的指令,而是管理全局事務提交/回滾的過程。

它需要能夠協調多個RM資源、多個節點的分支事務,保證它們按全局事務的完成方向各自完成自己的分支事務。

這一點,是不容易做到的。因為,實際應用中,會有各種故障出現,很多都會造成事務的中斷,從而使得統一提交/回滾全局事務的目標不能達到,甚至出現”一部分分支事務已經提交,而另一部分分支事務則已回滾”的情況。

比較常見的故障,比如:業務系統服務器宕機、重啟;數據庫服務器宕機、重啟;網絡故障;斷電等。這些故障可能單獨發生,也可能會同時發生。

作為分布式事務框架,應該具備相應的故障恢復機制,無視這些故障的影響是不負責任的做法。

一個完整的分布式事務框架,應該保障即使在最嚴苛的條件下也能保證全局事務的一致性,而不是只能在最理想的環境下才能提供這種保障。退一步說,如果能有所謂“理想的環境”,那也無需使用分布式事務了。

TCC事務框架要支持故障恢復,就必須記錄相應的事務日志。事務日志是故障恢復的基礎和前提,它記錄了事務的各項數據。

TCC事務框架做故障恢復時,可以根據事務日志的數據將中斷的事務恢復至正確的狀態,并在此基礎上繼續執行先前未完成的提交/回滾操作。關注微信公眾號:Java技術棧,在后臺回復:架構,可以獲取我整理的 N 篇架構教程,都是干貨。

四、TCC事務框架應該提供Confirm/Cancel服務的冪等性保障

一般認為,服務的冪等性,是指針對同一個服務的多次(n>1)請求和對它的單次(n=1)請求,二者具有相同的副作用。

在TCC事務模型中,Confirm/Cancel業務可能會被重復調用,其原因很多。

比如,全局事務在提交/回滾時會調用各TCC服務的Confirm/Cancel業務邏輯。執行這些Confirm/Cancel業務時,可能會出現如網絡中斷的故障而使得全局事務不能完成。

因此,故障恢復機制后續仍然會重新提交/回滾這些未完成的全局事務,這樣就會再次調用參與該全局事務的各TCC服務的Confirm/Cancel業務邏輯。

既然Confirm/Cancel業務可能會被多次調用,就需要保障其冪等性。

那么,應該由TCC事務框架來提供冪等性保障?還是應該由業務系統自行來保障冪等性呢?

個人認為,應該是由TCC事務框架來提供冪等性保障。如果僅僅只是極個別服務存在這個問題的話,那么由業務系統來負責也是可以的;

然而,這是一類公共問題,毫無疑問,所有TCC服務的Confirm/Cancel業務存在冪等性問題。TCC服務的公共問題應該由TCC事務框架來解決;

而且,考慮一下由業務系統來負責冪等性需要考慮的問題,就會發現,這無疑增大了業務系統的復雜度。

五、TCC事務框架不能盲目的依賴Cancel業務來回滾事務

前文以及提到過,TCC事務通過Cancel業務來對Try業務進行回撤的機制暗含了一個事實:Try操作已經生效。

也就是說,只有Try操作所參與的RM本地事務已經提交的情況下,才需要執行其Cancel操作進行回撤。沒有執行、或者執行了但是其RM本地事務被rollback的Try業務,是一定不能執行其Cancel業務進行回撤的。

因此,TCC事務框架在全局事務回滾時,應該根據TCC服務的Try業務的執行情況選擇合適的處理機制。而不能盲目的執行Cancel業務,否則就會導致數據不一致。

一個TCC服務的Try操作是否生效,這是TCC事務框架應該知道的,因為其Try業務所參與的RM事務也是由TCC事務框架所commit/rollbac的(前提是TCC事務框架接管了Spring的事務管理器)。推薦:分布式事務不理解?一次給你講清楚。

所以,TCC事務回滾時,TCC事務框架可考慮如下處理策略:

  1. 如果TCC事務框架發現某個服務的Try操作的本地事務尚未提交,應該直接將其回滾,而后就不必再執行該服務的cancel業務;
  2. 如果TCC事務框架發現某個服務的Try操作的本地事務已經回滾,則不必再執行該服務的cancel業務;
  3. 如果TCC事務框架發現某個服務的Try操作尚未被執行過,那么,也不必再執行該服務的cancel業務。

總之,TCC事務框架應該保障:

  1. 已生效的Try操作應該被其Cancel操作所回撤;
  2. 尚未生效的Try操作,則不應該執行其Cancel操作。這一點,不是冪等性所能解決的問題。如上文所述,冪等性是指服務被執行一次和被執行n(n>0)次所產生的影響相同。但是,未被執行和被執行過,二者效果肯定是不一樣的,這不屬于冪等性的范疇。

六、Cancel業務與Try業務并行,甚至先于Try操作完成

這應該算TCC事務機制特有的一個不可思議的陷阱。

一般來說,一個特定的TCC服務,其Try操作的執行,是應該在其Confirm/Cancel操作之前的。

Try操作執行完畢之后,Spring容器再根據Try操作的執行情況,指示TCC事務框架提交/回滾全局事務。然后,TCC事務框架再去逐個調用各TCC服務的Confirm/Cancel操作。

然而,超時、網絡故障、服務器的重啟等故障的存在,使得這個順序會被打亂。比如:

 

上圖中,假設[B:Try]操作執行過程中,網絡閃斷,[A:Try]會收到一個RPC遠程調用異常。

A不處理該異常,導致全局事務決定回滾,TCC事務框架就會去調用[B:Cancel],而此刻A、B之間網絡剛好已經恢復。如果[B:Try]操作耗時較長(網絡阻塞/數據庫操作阻塞),就會出現[B:Try]和[B:Cancel]二者并行處理的現象,甚至[B:Cancel]先完成的現象。

這種情況下,由于[B:Cancel]執行時,[B:Try]尚未生效(其RM本地事務尚未提交),因此,[B:Cancel]是不能執行的,至少是不能生效(執行了其RM本地事務也要rollback)的。

然而,當[B:Cancel]處理完畢(跳過執行、或者執行后rollback其RM本地事務)后,[B:Try]操作完成又生效了(其RM本地事務成功提交),這就會使得[B:Cancel]雖然提供了,但卻沒有起到回撤[B:Try]的作用,導致數據的不一致。

所以,TCC框架在這種情況下,需要:

  1. 將[B:Try]的本地事務標注為rollbackOnly,阻止其后續生效;
  2. 禁止其再次將事務上下文傳遞給其他遠程分支,否則該問題將在其他分支上出現;
  3. 相應地,[B:Cancel]也不必執行,至少不能生效。

當然,TCC事務框架也可以簡單的選擇阻塞[B:Cancel]的處理,待[B:Try]執行完畢后,再根據它的執行情況判斷是否需要執行[B:Cancel]。

不過,這種處理方式因為需要等待,所以,處理效率上會有所不及。

同樣的情況也會出現在confirm業務上,只不過,發生在Confirm業務上的處理邏輯與發生在Cancel業務上的處理邏輯會不一樣。

TCC框架必須保證:

  1. Confirm業務在Try業務之后執行,若發現并行,則只能阻塞相應的Confirm業務操作;
  2. 在進入Confirm執行階段之后,也不可以再提交同一全局事務內的新的Try操作的RM本地事務。

七、TCC服務復用性是不是相對較差?

TCC事務機制的定義,決定了一個服務需要提供三個業務實現:Try業務、Confirm業務、Cancel業務。

可能會有人因此認為TCC服務的復用性較差。怎么說呢,要是將 Try/Confirm/Cancel業務邏輯單獨拿出來復用,其復用性當然是不好的。

Try/Confirm/Cancel 邏輯作為TCC型服務中的一部分,是不能單獨作為一個組件來復用的。Try、Confirm、Cancel業務共同才構成一個組件,如果要復用,應該是復用整個TCC服務組件,而不是單獨的Try/Confirm/Cancel業務。

八、TCC服務是否需要對外暴露三個服務接口?

不需要。TCC服務與普通的服務一樣,只需要暴露一個接口,也就是它的Try業務。

Confirm/Cancel業務邏輯,只是因為全局事務提交/回滾的需要才提供的,因此Confirm/Cancel業務只需要被TCC事務框架發現即可,不需要被調用它的其他業務服務所感知。

換句話說,業務系統的其他服務在需要調用TCC服務時,根本不需要知道它是否為TCC型服務。

因為,TCC服務能被其他業務服務調用的也僅僅是其Try業務,Confirm/Cancel業務是不能被其他業務服務直接調用的。

九、TCC服務A的Confirm/Cancel業務中能否調用它依賴的TCC服務B的Confirm/Cancel業務?

最好不要這樣做。

首先,沒有必要。TCC服務A依賴TCC服務B,那么[A:Try]已經將事務上下文傳播給[B:Try]了,后續由TCC事務框架來調用各自的Confirm/Cancel業務即可;

其次,Confirm/Cancel業務如果被允許調用其他服務,那么它就有可能再次發起新的TCC全局事務。如此遞歸下去,將會導致全局事務關系混亂且不可控。

TCC全局事務,應該盡量在Try操作階段傳播事務上下文。Confirm/Cancel操作階段僅需要完成各自Try業務操作的確認操作/補償操作即可,不適合再做遠程調用,更不能再對外傳播事務上下文。

綜上所述,本文傾向于認為,實現一個通用的TCC分布式事務管理框架,還是相對比較復雜的。一般業務系統如果需要使用TCC事務機制,并不推薦自行設計實現。

這里,給大家推薦一款開源的TCC分布式事務管理器ByteTCChttps://github.com/liuyangming/ByteTCC

ByteTCC基于Try/Confirm/Cancel機制實現,可與Spring容器無縫集成,兼容Spring的聲明式事務管理。提供對dubbo框架、Spring Cloud的開箱即用的支持,可滿足多數據源、跨應用、跨服務器等各種分布式事務場景的需求。

 

責任編輯:龐桂玉 來源: Java技術棧
相關推薦

2022-06-27 08:36:27

分布式事務XA規范

2023-09-04 08:45:07

分布式配置中心Zookeeper

2022-06-27 08:21:05

Seata分布式事務微服務

2021-12-09 10:45:19

分布式事務框架

2024-07-15 08:25:07

2019-07-19 15:51:11

框架選型分布式

2021-11-01 12:25:56

Redis分布式

2020-07-30 09:35:09

Redis分布式鎖數據庫

2022-04-14 07:56:30

公平鎖Java線程

2021-09-07 09:26:13

Python 開發編程語言

2024-01-05 07:28:50

分布式事務框架

2021-06-24 10:27:48

分布式架構系統

2021-12-15 10:00:21

分布式事務框架

2021-06-25 10:45:43

Netty 分布式框架 IO 框架

2024-06-12 09:06:48

2016-09-30 10:13:07

分布式爬蟲系統

2024-05-08 10:20:00

Redis分布式

2025-06-11 08:01:06

2022-06-21 08:27:22

Seata分布式事務

2021-08-06 08:33:27

Springboot分布式Seata
點贊
收藏

51CTO技術棧公眾號

欧美日韩在线播放一区二区| 亚洲一级免费视频| 青青草视频在线视频| 亚洲av综合色区无码一区爱av| 欧美国产综合| 亚洲黄色av女优在线观看| 欧美日韩二三区| 77777影视视频在线观看| 韩国v欧美v亚洲v日本v| 久久久亚洲欧洲日产国码aⅴ| 在线观看国产免费视频| 日韩毛片免费看| 亚洲国产毛片aaaaa无费看| 国产精品一区二区久久不卡 | 亚洲护士老师的毛茸茸最新章节| 99精品视频播放| 免费黄色在线看| 99久久er热在这里只有精品15 | 亚洲视频电影图片偷拍一区| 加勒比av中文字幕| 中文字幕在线中文字幕在线中三区| 国产精品色一区二区三区| 国产精品区一区| 在线免费看av的网站| 亚洲成色精品| 啊v视频在线一区二区三区| 亚洲男人在线天堂| 国产精品一级在线观看| 91精品91久久久中77777| 中文字幕日韩精品无码内射| 成人欧美亚洲| 不卡免费追剧大全电视剧网站| 国产欧美日韩免费看aⅴ视频| 黄色片免费观看视频| 午夜久久美女| 久久精品国产久精国产一老狼| 91精品人妻一区二区| 超碰精品在线观看| 6080亚洲精品一区二区| 色婷婷狠狠18| 亚洲精品一级二级| 亚洲一区二区黄色| 欧美在线观看黄| 日本三级视频在线观看| 久久精品视频一区二区| 久久精品国产精品国产精品污 | 国产一区日韩二区欧美三区| 国产精品福利无圣光在线一区| 欧美精品亚洲精品日韩精品| 韩国av一区| 久久99热精品| 手机av在线看| 国产精品7m凸凹视频分类| 亚洲天堂第一页| 中文字幕网站在线观看| 日韩在线麻豆| 亚洲精品久久7777777| 污污免费在线观看| 精品国产导航| 亚洲精品99久久久久| 中国免费黄色片| 女人抽搐喷水高潮国产精品| 亚洲精品久久久久久久久久久久| 人妻体内射精一区二区三区| 噜噜噜天天躁狠狠躁夜夜精品 | 伊人国产精品视频| 9999在线精品视频| 欧美一区二区三区视频免费播放 | 国产精品7777777| 伊人久久综合| 欧美一级高清免费| 久久国产乱子伦精品| 日本怡春院一区二区| 国产精品久久久| 一级黄色录像大片| 国产美女一区二区三区| 99视频在线播放| 老熟妇高潮一区二区高清视频| 国产999精品久久久久久| 国产成人精品免费视频大全最热| 特黄视频在线观看| 久久精品视频免费观看| 日韩久久久久久久久久久久久| 尤物网在线观看| 亚洲精选一二三| av免费观看大全| 免费电影日韩网站| 欧美高清视频在线高清观看mv色露露十八| xxxx在线免费观看| 三上悠亚影音先锋| 粉嫩一区二区| 欧美日韩国产天堂| 野战少妇38p| 亚洲aaa级| 中文字幕视频一区二区在线有码| 亚洲一二三四五六区| 亚洲视频高清| 日韩暖暖在线视频| 国产乱人乱偷精品视频| 成人av网站免费观看| 天堂资源在线亚洲视频| 羞羞网站在线看| 天天亚洲美女在线视频| 特级丰满少妇一级| 波多野结衣一区二区三区免费视频| 日韩精品黄色网| 久久国产高清视频| 日韩视频一区| 成人亚洲欧美一区二区三区| 熟妇人妻系列aⅴ无码专区友真希 熟妇人妻av无码一区二区三区 | 夜夜躁狠狠躁日日躁av| 成人精品高清在线| 亚洲永久一区二区三区在线| 岛国av在线网站| 欧美日韩高清一区| 91网站免费视频| 欧美区日韩区| 国产欧美久久久久久| 国产又爽又黄网站亚洲视频123| 中国av一区二区三区| 青青草成人免费在线视频| 久久精品嫩草影院| 精品亚洲国产视频| 精品爆乳一区二区三区无码av| 日韩经典中文字幕一区| 国产精品一 二 三| av在线官网| 欧美日韩和欧美的一区二区| 大黑人交xxx极品hd| 欧美1区2区视频| 国产精品久久久久久久久久久久| 天堂在线观看av| 亚洲免费三区一区二区| mm131亚洲精品| 久操精品在线| 欧美在线视频导航| 狠狠躁日日躁夜夜躁av| 亚洲免费av网站| 福利视频999| 欧美最新另类人妖| 日本一区二区在线免费播放| 少妇无码一区二区三区| 亚洲一区在线视频| 欧美69精品久久久久久不卡| 99九九热只有国产精品| 国产欧美日韩中文| 欧美激情免费| 欧美日本乱大交xxxxx| 成人黄色a级片| 丝袜诱惑制服诱惑色一区在线观看 | 九九热精彩视频| 国产在线播放一区二区三区| 亚洲一区二区在| 全球中文成人在线| 日韩亚洲第一页| 国产又大又粗又长| 亚洲欧美日韩中文播放| 视频区 图片区 小说区| 一本一道久久a久久精品蜜桃| 欧美丝袜自拍制服另类| 黄色国产在线观看| 久久只有精品| 视频一区二区三区免费观看| 日本美女久久| 最新国产精品拍自在线播放| 亚洲一级在线播放| 亚洲欧美区自拍先锋| 亚洲美女精品视频| 亚洲久久成人| 欧美xxxx黑人又粗又长密月| 欧美黑人一区| 深夜福利一区二区| 国产片高清在线观看| 亚洲一区免费在线观看| 免费的av网站| 老司机精品视频在线| av中文字幕av| 欧洲在线一区| 国产精品女人久久久久久| 黄色在线免费| 亚洲国产91色在线| 无码人妻精品一区二区三区蜜桃91| 国产三级久久久| 91亚洲一区二区| 国产精品美女久久久浪潮软件| 欧洲成人一区二区| 亚洲综合视频| 国外成人在线播放| 国产美女性感在线观看懂色av| 欧美日韩精品欧美日韩精品| 精品亚洲永久免费| 国产欧美精品在线观看| 污版视频在线观看| 欧美日韩免费| 日本一区视频在线播放| 精品视频一区二区三区在线观看| 欧美精品18videosex性欧美| 九九热视频在线观看| 日韩欧美一卡二卡| 无码一区二区三区| 亚洲在线观看免费| 中日韩av在线播放| 亚洲二区免费| 亚洲一区二区三区四区中文| 激情亚洲另类图片区小说区| 国产精品爽黄69天堂a| 丁香花在线电影小说观看| 一本大道亚洲视频| 天天操天天干天天舔| 欧美精品aⅴ在线视频| 探花视频在线观看| 亚洲在线视频网站| 中文字幕资源站| 久久这里只精品最新地址| 日日夜夜精品视频免费观看| 久久在线精品| 亚洲熟妇无码另类久久久| 五月综合激情| 日本一区二区精品视频| 成人盗摄视频| 91九色视频导航| 精品肉辣文txt下载| 午夜精品久久久久久99热| 里番在线观看网站| 亚洲系列中文字幕| 日本在线一二三| 精品乱人伦一区二区三区| 一级黄色大毛片| 91福利资源站| 中文字幕在线观看视频网站| 亚洲精品国产精华液| 麻豆视频免费在线播放| 久久精品一区二区三区四区| 国产又粗又猛又色| 成人中文字幕合集| 国产成人av免费观看| 精品亚洲aⅴ乱码一区二区三区| 99精品免费在线观看| av成人国产| 久久99中文字幕| 韩国av一区| 97超碰人人澡| 精品1区2区3区4区| 成人污网站在线观看| 在线中文字幕亚洲| 日本丰满大乳奶| 中文乱码免费一区二区三区下载| 亚洲一区二区在| 成人影院天天5g天天爽无毒影院 | 日本高清视频在线| 欧美大肚乱孕交hd孕妇| 亚洲女人18毛片水真多| 欧美成人猛片aaaaaaa| 性猛交富婆╳xxx乱大交天津| 91精品国产综合久久久久久久久久| 一二三四区在线| 91精品国产色综合久久久蜜香臀| 国产剧情久久久| 欧美一区欧美二区| 亚洲av无码片一区二区三区 | 日韩av免费在线播放| 欧美日韩免费看片| 国产精品99久久99久久久二8| 三上悠亚激情av一区二区三区| 国产成人高清激情视频在线观看| 欧美va在线| 国产精品视频网| 国产精品99久久免费| 99视频免费观看蜜桃视频| 精品福利一区| 日本黑人久久| 欧美激情777| 日韩精品在线观看av| 99精品热6080yy久久| 少妇人妻互换不带套| 久久精品二区亚洲w码| 中文字幕一二三| 99国内精品久久| 伊人影院综合网| 亚洲色图视频网| 日本最新中文字幕| 在线区一区二视频| 国产女人爽到高潮a毛片| 亚洲国产精品推荐| www.亚洲.com| 欧美日本在线视频中文字字幕| 国产免费拔擦拔擦8x高清在线人 | 天干夜夜爽爽日日日日| 欧美嫩在线观看| 日韩在线观看视频一区| 国产亚洲精品一区二区| jizz性欧美| 青青久久av北条麻妃黑人| 日韩一区中文| 久久国产欧美精品| 亚欧美无遮挡hd高清在线视频| www精品久久| 美女视频免费一区| 国产精品福利导航| 国产精品伦一区二区三级视频| 精品视频在线观看免费| 欧美性生活久久| 肥臀熟女一区二区三区| 中文字幕最新精品| 久久青草伊人| 亚洲一区免费网站| 国产成人手机高清在线观看网站| 超级碰在线观看| 日韩av一区二区三区| 亚洲av无码专区在线播放中文| 亚洲国产精品二十页| 天天综合网入口| 欧美一卡二卡在线观看| 国产天堂素人系列在线视频| 欧美激情乱人伦| 中文字幕综合| 色综合久久久久久久久五月| 国产模特精品视频久久久久| 黄页网站在线看| 国产精品嫩草影院av蜜臀| 国产又黄又粗又爽| 亚洲国产精品va在线| 国产激情在线视频| 国产精品入口夜色视频大尺度 | 亚洲精品理论电影| 最新超碰在线| 成人av电影天堂| 欧美日韩一二| 国产xxxxx在线观看| av亚洲精华国产精华精| 欧美爱爱小视频| 制服视频三区第一页精品| 超碰在线国产| 国产精品99一区| 日韩福利视频一区| www.日本在线播放| 国产传媒久久文化传媒| www.xxxx日本| 在线播放亚洲一区| 日本成人网址| 国产精品自产拍在线观看中文| 国产伦精品一区二区三区千人斩| 成人毛片一区二区| 成人免费毛片片v| 免费中文字幕视频| 欧美成人猛片aaaaaaa| 七七久久电影网| 成人羞羞视频免费| 亚洲小说区图片区| 成人做爰www看视频软件| 亚洲在线中文字幕| 人人妻人人澡人人爽精品日本| 午夜精品理论片| 窝窝社区一区二区| 日本一极黄色片| 欧美国产视频在线| 亚洲图片视频小说| 另类色图亚洲色图| 91精品国产自产精品男人的天堂| 岛国大片在线播放| 99久久伊人网影院| 日韩手机在线视频| 在线日韩欧美视频| 99综合久久| 日韩欧美猛交xxxxx无码| 成人免费视频播放| 久久亚洲精品石原莉奈| 日韩中文字幕免费| 91精品久久久久久综合五月天 | 精品欧美一区二区精品久久| 亚洲一区二区三区高清| 91精品国自产在线| 91精品国产一区二区三区蜜臀| av中文字幕电影在线看| 欧美日韩喷水| 精一区二区三区| 国产一级中文字幕| 亚洲一区二区黄| 久久在线观看| 成人免费毛片网| 美腿丝袜亚洲三区| 欧美成人免费观看视频| 亚洲裸体xxxx| 99久久久成人国产精品| av免费观看大全| 国产精品国产三级国产aⅴ中文| 亚洲精品成人电影| 日韩美女视频免费在线观看| 外国成人免费视频| av网页在线观看| 欧美日韩国产小视频在线观看| 超碰在线中文字幕| 亚洲福利av| 成人av资源在线观看| 亚洲成人av网址| 久久99国产精品自在自在app| 视频福利一区| 在线免费av播放| 精品久久久久久中文字幕大豆网| 又爽又大又黄a级毛片在线视频|