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

為什么說傳統分布式事務不再適用于微服務架構?

大數據 分布式
微服務架構該如何保證數據一致性呢?本文就來談談這個話題。

[[180941]]

傳統應用使用本地事務和分布式事務保證數據一致性,但是在微服務架構中數據都是服務私有的,需要通過服務提供的API來訪問,所以分布式事務不再適用微服務架構。那么微服務架構又該如何保證數據一致性呢?本文就來談談這個話題。

  1. 傳統分布式事務不是微服務中數據一致性的***選擇
  2. 微服務架構中應滿足數據最終一致性原則
  3. 微服務架構實現最終一致性的三種模式
  4. 對賬是***的***防線

傳統分布式事務

我們先來看下***部分,傳統使用本地事務和分布式事務保證一致性。

36大數據

傳統單機應用一般都會使用一個關系型數據庫,好處是應用可以使用ACID。為保證一致性我們只需要:開始一個事務,改變(插入,刪除,更新)很多行,然后提交事務(如果有異常時回滾事務)。更進一步,借助開發平臺中的數據訪問技術和框架(如 Spring),我們需要做的事情更少,只需要關注數據本身的改變。

隨著組織規模不斷擴大,業務量不斷增長,單機應用和數據庫已經不足以支持龐大的業務量和數據量,這個時候需要對應用和數據庫進行拆分,這就出現了一個應用需要同時訪問兩個或兩個以上的數據庫情況。開始我們用分布式事務來保證一致性,也就是我們常說的兩階段提交協議(2PC)。

36大數據

本地事務和分布式事務現在已經非常成熟,相關介紹很豐富,此處不再討論。我們下面來談談為什么分布式事務不適用于微服務架構。

36大數據

首先,對于微服務架構來說,數據訪問變得更加復雜,這是因為數據都是微服務私有的,唯一可訪問的方式就是通過 API。這種打包數據訪問方式使得微服務之間松耦合,并且彼此之間獨立,更容易進行性能擴展。

其次,不同的微服務經常使用不同的數據庫。應用會產生各種不同類型的數據,關系型數據庫并不一定是***選擇。

例如,某個產生和查詢字符串的應用采用 Elasticsearch 的字符搜索引擎;某個產生社交圖片數據的應用可以采用圖數據庫,例如Neo4j。

基于微服務的應用一般都使用 SQL 和 NoSQL 結合的模式。但是這些非關系型數據大多數并不支持 2PC。

可見在微服務架構中已經不能選擇分布式事務了。

最終一致性原則

依據 CAP 理論,必須在可用性(availability)和一致性(consistency)之間做出選擇。如果選擇提供一致性需要付出在滿足一致性之前阻塞其他并發訪問的代價。這可能持續一個不確定的時間,尤其是在系統已經表現出高延遲時或者網絡故障導致失去連接時。

依據目前的成功經驗,可用性一般是更好的選擇,但是在服務和數據庫之間維護數據一致性是非常根本的需求,微服務架構中應選擇滿足最終一致性。

最終一致性是指系統中的所有數據副本經過一定時間后,最終能夠達到一致的狀態。

當然選擇了最終一致性,就要保證到最終的這段時間要在用戶可接受的范圍之內。那么我們怎么實現最終一致性呢?

從一致性的本質來看,是要保證在一個業務邏輯中包含的服務要么都成功,要么都失敗。那我們怎么選擇方向呢?保證成功還是保證失敗呢?

36大數據

我們說業務模式決定了我們的選擇。實現最終一致性有三種模式:可靠事件模式、業務補償模式、TCC 模式。

可靠事件模式

可靠事件模式屬于事件驅動架構,當某件重要事情發生時,例如更新一個業務實體,微服務會向消息代理發布一個事件。消息代理會向訂閱事件的微服務推送事件,當訂閱這些事件的微服務接收此事件時,就可以完成自己的業務,也可能會引發更多的事件發布。

1. 如訂單服務創建一個待支付的訂單,發布一個“創建訂單”的事件。

36大數據

2. 支付服務消費“創建訂單”事件,支付完成后發布一個“支付完成”事件。

36大數據

3. 訂單服務消費“支付完成”事件,訂單狀態更新為待出庫。

36大數據

從而就實現了完成的業務流程。但是這并不是一個***的流程。

36大數據

這個過程可能導致出現不一致的地方在于:某個微服務在更新了業務實體后發布事件卻失敗;雖然微服務發布事件成功,但是消息代理未能正確推送事件到訂閱的微服務;接受事件的微服務重復消費了事件。

可靠事件模式在于保證可靠事件投遞和避免重復消費,可靠事件投遞定義為:

  • 每個服務原子性的業務操作和發布事件。
  • 消息代理確保事件傳遞至少一次。

避免重復消費要求服務實現冪等性,如支付服務不能因為重復收到事件而多次支付。

因為現在流行的消息隊列都實現了事件的持久化和 at least once 的投遞模式,『消息代理確保事件投遞至少一次』已經滿足,今天不做展開。

下面分享的內容主要從可靠事件投遞和實現冪等性兩方面來討論,我們先來看可靠事件投遞。

首先我們來看一個實現的代碼片段,這是從某生產系統上截取下來的。

36大數據

根據上述代碼及注釋,初看可能出現 3 種情況:

  1. 操作數據庫成功,向消息代理投遞事件也成功。
  2. 操作數據庫失敗,不會向消息代理中投遞事件了。
  3. 操作數據庫成功,但是向消息代理中投遞事件時失敗,向外拋出了異常,剛剛執行的更新數據庫的操作將被回滾。

從上面分析的幾種情況來看,貌似沒有問題。但是仔細分析不難發現缺陷所在,在上面的處理過程中存在一段隱患時間窗口。

36大數據

微服務 A 投遞事件的時候可能消息代理已經處理成功,但是返回響應的時候網絡異常,導致 append 操作拋出異常。最終結果是事件被投遞,數據庫卻被回滾。

36大數據

在投遞完成后到數據庫 commit 操作之間如果微服務 A 宕機也將造成數據庫操作因為連接異常關閉而被回滾。最終結果還是事件被投遞,數據庫卻被回滾。這個實現往往運行很長時間都沒有出過問題,但是一旦出現了將會讓人感覺莫名,很難發現問題所在。

下面給出兩種可靠事件投遞的實現方式。

1. 本地事件表

本地事件表方法將事件和業務數據保存在同一個數據庫中,使用一個額外的“事件恢復”服務來恢復事件,由本地事務保證更新業務和發布事件的原子性。考慮到事件恢復可能會有一定的延時,服務在完成本地事務后可立即向消息代理發布一個事件。

本地事件表

  1. 微服務在同一個本地事務中記錄業務數據和事件。
  2. 微服務實時發布一個事件立即通知關聯的業務服務,如果事件發布成功立即刪除記錄的事件。
  3. 事件恢復服務定時從事件表中恢復未發布成功的事件,重新發布,重新發布成功才刪除記錄的事件。

其中第Ⅱ條的操作主要是為了增加發布事件的實時性,由第三條保證事件一定被發布。

本地事件表方式業務系統和事件系統耦合比較緊密,額外的事件數據庫操作也會給數據庫帶來額外的壓力,可能成為瓶頸。

2. 外部事件表

外部事件表方法將事件持久化到外部的事件系統,事件系統需提供實時事件服務以接受微服務發布事件,同時事件系統還需要提供事件恢復服務來確認和恢復事件。

外部事件表

  1. 業務服務在事務提交前,通過實時事件服務向事件系統請求發送事件,事件系統只記錄事件并不真正發送。
  2. 業務服務在提交后,通過實時事件服務向事件系統確認發送,事件得到確認后事件系統才真正發布事件到消息代理。
  3. 業務服務在業務回滾時,通過實時事件向事件系統取消事件。
  4. 如果業務服務在發送確認或取消之前停止服務了怎么辦呢?事件系統的事件恢復服務會定期找到未確認發送的事件向業務服務查詢狀態,根據業務服務返回的狀態決定事件是要發布還是取消。

該方式將業務系統和事件系統獨立解耦,都可以獨立伸縮。但是這種方式需要一次額外的發送操作,并且需要發布者提供額外的查詢接口。

介紹完了可靠事件投遞再來說一說冪等性的實現,有些事件本身是冪等的,有些事件卻不是。

本身具有冪等性的事件需要考慮執行順序

如果事件本身描述的是某個時間點的固定值(如賬戶余額為 100),而不是描述一條轉換指令(如余額增加 10),那么這個事件是冪等的。

我們要意識到事件可能出現的次數和順序是不可預測的,需要保證冪等事件的順序執行,否則結果往往不是我們想要的。

如果我們先后收到兩條事件,(1)賬戶余額更新為100,(2)賬戶余額更新為120。

1. 微服務收到事件(1)

微服務收到事件(1)

2. 微服務收到事件(2)

微服務收到事件(2)

3. 微服務再次收到事件(1)

微服務再次收到事件(1)

顯然結果是錯誤的,所以我們需要保證事件(2)一旦執行事件(1)就不能再處理,否則賬戶余額仍不是我們想要的結果。

為保證事件的順序一個簡單的做法是在事件中添加時間戳,微服務記錄每類型的事件***處理的時間戳,如果收到的事件的時間戳早于我們記錄的,丟棄該事件。如果事件不是在同一個服務器上發出的,那么服務器之間的時間同步是個難題,更穩妥的做法是使用一個全局遞增序列號替換時間戳。

對于本身不具有冪等性的操作,主要思想是為每條事件存儲執行結果,當收到一條事件時我們需要根據事件的 ID 查詢該事件是否已經執行過,如果執行過直接返回上一次的執行結果,否則調度執行事件。

36大數據

在這個思想下我們需要考慮重復執行一條事件和查詢存儲結果的開銷。

重復處理開銷小的事件

如果重復處理一條事件開銷很小,或者可預見只有非常少的事件會被重復接收,可以選擇重復處理一次事件,在將事件數據持久化時由數據庫拋出唯一性約束異常。

重復處理開銷大事件使用事件存儲過濾重復事件

如果重復處理一條事件的開銷相比額外一次查詢的開銷要高很多,使用一個過濾服務來過濾重復的事件,過濾服務使用事件存儲存儲已經處理過的事件和結果。

當收到一條事件時,過濾服務首先查詢事件存儲,確定該條事件是否已經被處理過,如果事件已經被處理過,直接返回存儲的結果;否則調度業務服務執行處理,并將處理完的結果存儲到事件存儲中。

一般情況下上面的方法能夠運行得很好,如果我們的微服務是 RPC 類的服務我們需要更加小心,可能出現的問題在于,(1)過濾服務在業務處理完成后才將事件結果存儲到事件存儲中,但是在業務處理完成前有可能就已經收到重復事件,由于是 RPC 服務也不能依賴數據庫的唯一性約束;(2)業務服務的處理結果可能出現位置狀態,一般出現在正常提交請求但是沒有收到響應的時候。

對于問題(1)可以按步驟記錄事件處理過程,比如事件的記錄事件的處理過程為“接收”、“發送請求”、“收到應答”、“處理完成”。好處是過濾服務能及時的發現重復事件,進一步還能根據事件狀態作不同的處理。

對于問題(2)可以通過一次額外的查詢請求來確定事件的實際處理狀態,要注意額外的查詢會帶來更長時間的延時,更進一步可能某些 RPC 服務根本不提供查詢接口。此時只能選擇接收暫時的不一致,時候采用對賬和人工接入的方式來保證一致性。

補償模式

為了描述方便,這里先定義兩個概念:

  1. 業務異常:業務邏輯產生錯誤的情況,比如賬戶余額不足、商品庫存不足等。
  2. 技術異常:非業務邏輯產生的異常,如網絡連接異常、網絡超時等。

補償模式使用一個額外的協調服務來協調各個需要保證一致性的微服務,協調服務按順序調用各個微服務,如果某個微服務調用異常(包括業務異常和技術異常)就取消之前所有已經調用成功的微服務。

補償模式建議僅用于不能避免出現業務異常的情況,如果有可能應該優化業務模式,以避免要求補償事務。如賬戶余額不足的業務異常可通過預先凍結金額的方式避免,商品庫存不足可要求商家準備額外的庫存等。

我們通過一個實例來說明補償模式,一家旅行公司提供預訂行程的業務,可以通過公司的網站提前預訂飛機票、火車票、酒店等。

假設一位客戶規劃的行程是:

上海-北京6月19日9點的某某航班。

某某酒店住宿3晚。

北京-上海6月22日17點火車。

在客戶提交行程后,旅行公司的預訂行程業務按順序串行的調用航班預訂服務、酒店預訂服務、火車預訂服務。***的火車預訂服務成功后整個預訂業務才算完成。

一位客戶規劃的行程

如果火車票預訂服務沒有調用成功,那么之前預訂的航班、酒店都得取消。取消之前預訂的酒店、航班即為補償過程。

火車票預訂服務沒有調用成功

為了降低開發的復雜性和提高效率,協調服務實現為一個通用的補償框架。補償框架提供服務編排和自動完成補償的能力。

要實現補償過程,我們需要做到兩點:

首先要確定失敗的步驟和狀態,從而確定需要補償的范圍。

火車票預訂服務沒有調用成功

在上面的例子中我們不僅要知道第 3 個步驟(預訂火車)失敗,還要知道失敗的原因。如果是因為預訂火車服務返回無票,那么補償過程只需要取消前兩個步驟就可以了;但是如果失敗的原因是因為網絡超時,那么補償過程除前兩個步驟之外還需要包括第 3 個步驟。

其次要能提供補償操作使用到的業務數據。

比如一個支付微服務的補償操作要求參數包括支付時的業務流水 id、賬號和金額。理論上說實際完成補償操作可以根據唯一的業務流水 id 就可以,但是提供更多的要素有益于微服務的健壯性,微服務在收到補償操作的時候可以做業務的檢查,比如檢查賬戶是否相等,金額是否一致等等。

實現補償模式的關鍵在于業務流水的記錄

做到上面兩點的辦法是記錄完整的業務流水,可以通過業務流水的狀態來確定需要補償的步驟,同時業務流水為補償操作提供需要的業務數據。

業務流水為補償操作提供需要的業務數據

當客戶的一個預訂請求達到時,協調服務(補償框架)為請求生成一個全局唯一的業務流水號,并在調用各個工作服務的同時記錄完整的狀態。

  1. 記錄調用 bookFlight 的業務流水,調用 bookFlight 服務,更新業務流水狀態。
  2. 記錄調用 bookHotel 的業務流水,調用 bookHotel 服務,更新業務流水狀態。
  3. 記錄調用 bookTrain 的業務流水,調用 bookTrain 服務,更新業務流水狀態。

當調用某個服務出現異常時,比如第 3 步驟(預訂火車)異常。

當調用某個服務出現異常時,比如第 3 步驟(預訂火車)異常

協調服務(補償框架)同樣會記錄第 3 步的狀態,同時會另外記錄一條事件,說明業務出現了異常。然后就是執行補償過程了,可以從業務流水的狀態中知道補償的范圍,補償過程中需要的業務數據從記錄的業務流水中獲取。

對于一個通用的補償框架來說,預先知道微服務需要記錄的業務要素是不可能的。那么就需要一種方法來保證業務流水的可擴展性,這里介紹兩種方法:大表和關聯表。

大表和關聯表

大表顧明思議就是設計時除必須的字段外,還需要預留大量的備用字段,框架可以提供輔助工具來幫助將業務數據映射到備用字段中。

關聯表,分為框架表和業務表,技術表中保存為實現補償操作所需要的技術數據,業務表保存業務數據,通過在技術表中增加業務表名和業務表主鍵來建立和業務數據的關聯。

大表對于框架層實現起來簡單,但是也有一些難點,比如預留多少字段合適,每個字段又需要預留多少長度。另外一個難點是如果向從數據層面來查詢數據,很難看出備用字段的業務含義,維護過程不友好。

關聯表在業務要素上更靈活,能支持不同的業務類型記錄不同的業務要素;但是對于框架實現上難度更高,另外每次查詢都需要復雜的關聯動作,性能方面會受影響。

有了上面的完整的流水記錄,協調服務就可以根據工作服務的狀態在異常時完成補償過程。但是補償由于網絡等原因,補償操作并不一定能保證 100%成功,這時候我們還要做更多一點。

通過重試保證補償過程的完整,從而滿足最終一致性

補償過程作為一個服務調用過程同樣存在調用不成功的情況,這個時候需要通過重試的機制來保證補償的成功率。當然這也就要求補償操作本身具備冪等性。

關于冪等性的實現在前面做過討論。

如果只是一味的失敗就立即重試會給工作服務造成不必要的壓力,我們要根據服務執行失敗的原因來選擇不同的重試策略。

通過重試保證補償過程的完整,從而滿足最終一致性

1) 如果失敗的原因不是暫時性的,由于業務因素導致(如業務要素檢查失敗)的業務錯誤,這類錯誤是不會重發就能自動恢復的,那么應該立即終止重試。

2) 如果錯誤的原因是一些罕見的異常,比如因為網絡傳輸過程出現數據丟失或者錯誤,應該立即再次重試,因為類似的錯誤一般很少會再次發生。

3) 如果錯誤的原因是系統繁忙(比如 HTTP 協議返回的 500 或者另外約定的返回碼)或者超時,這個時候需要等待一些時間再重試。

重試操作一般會指定重試次數上線,如果重試次數達到了上限就不再進行重試了。這個時候應該通過一種手段通知相關人員進行處理。

對于等待重試的策略如果重試時仍然錯誤,可逐漸增加等待的時間,直到達到一個上限后,以上限作為等待時間。

如果某個時刻聚集了大量需要重試的操作,補償框架需要控制請求的流量,以防止對工作服務造成過大的壓力。

另外關于補償模式還有幾點補充說明。

微服務實現補償操作不是簡單的回退到業務發生時的狀態,因為可能還有其他的并發的請求同時更改了狀態。一般都使用逆操作的方式完成補償。

補償過程不需要嚴格按照與業務發生的相反順序執行,可以依據工作服務的重用程度優先執行,甚至是可以并發的執行。

有些服務的補償過程是有依賴關系的,被依賴服務的補償操作沒有成功就要及時終止補償過程。

如果在一個業務中包含的工作服務不是都提供了補償操作,那我們編排服務時應該把提供補償操作的服務放在前面,這樣當后面的工作服務錯誤時還有機會補償。

設計工作服務的補償接口時應該以協調服務請求的業務要素作為條件,不要以工作服務的應答要素作為條件。因為還存在超時需要補償的情況,這時補償框架就沒法提供補償需要的業務要素。

TCC模式(Try-Confirm-Cancel)

一個完整的 TCC 業務由一個主業務服務和若干個從業務服務組成,主業務服務發起并完成整個業務活動,TCC 模式要求從服務提供三個接口:Try、Confirm、Cancel。

TCC模式(Try-Confirm-Cancel)

1. Try

完成所有業務檢查

預留必須業務資源

2. Confirm

真正執行業務

不作任何業務檢查

只使用 Try 階段預留的業務資源

Confirm 操作滿足冪等性

3. Cancel:

釋放 Try 階段預留的業務資源

Cancel 操作滿足冪等性

整個 TCC 業務分成兩個階段完成。

Cancel

***階段:主業務服務分別調用所有從業務的 try 操作,并在活動管理器中登記所有從業務服務。當所有從業務服務的 try 操作都調用成功或者某個從業務服務的 try 操作失敗,進入第二階段。

第二階段:活動管理器根據***階段的執行結果來執行 confirm 或 cancel 操作。

如果***階段所有 try 操作都成功,則活動管理器調用所有從業務活動的 confirm操作。否則調用所有從業務服務的 cancel 操作。

需要注意的是第二階段 confirm 或 cancel 操作本身也是滿足最終一致性的過程,在調用 confirm 或 cancel 的時候也可能因為某種原因(比如網絡)導致調用失敗,所以需要活動管理支持重試的能力,同時這也就要求 confirm 和 cancel 操作具有冪等性。

在補償模式中一個比較明顯的缺陷是,沒有隔離性。從***個工作服務步驟開始一直到所有工作服務完成(或者補償過程完成),不一致是對其他服務可見的。另外最終一致性的保證還充分的依賴了協調服務的健壯性,如果協調服務異常,就沒法達到一致性。

TCC模式在一定程度上彌補了上述的缺陷,在TCC模式中直到明確的confirm動作,所有的業務操作都是隔離的(由業務層面保證)。另外工作服務可以通過指定 try 操作的超時時間,主動的 cancel 預留的業務資源,從而實現自治的微服務。

TCC模式和補償模式一樣需要需要有協調服務和工作服務,協調服務也可以作為通用服務一般實現為框架。與補償模式不同的是 TCC 服務框架不需要記錄詳細的業務流水,完成 confirm 和 cancel 操作的業務要素由業務服務提供。

TCC模式和補償模式

在第4步確認預訂之前,訂單只是pending狀態,只有等到明確的confirm之后訂單才生效。

pending狀態

如果3個服務中某個服務try操作失敗,那么可以向TCC服務框架提交cancel,或者什么也不做由工作服務自己超時處理。

向TCC服務框架提交cancel

TCC 模式也不能***保證一致性,如果業務服務向 TCC 服務框架提交 confirm后,TCC 服務框架向某個工作服務提交 confirm 失敗(比如網絡故障),那么就會出現不一致,一般稱為 heuristic exception。

需要說明的是為保證業務成功率,業務服務向 TCC 服務框架提交 confirm 以及TCC 服務框架向工作服務提交 confirm/cancel 時都要支持重試,這也就要confirm/cancel 的實現必須具有冪等性。如果業務服務向 TCC 服務框架提交confirm/cancel 失敗,不會導致不一致,因為服務***都會超時而取消。

另外 heuristic exception 是不可杜絕的,但是可以通過設置合適的超時時間,以及重試頻率和監控措施使得出現這個異常的可能性降低到很小。如果出現了heuristic exception 是可以通過人工的手段補救的。

對賬是***的***防線

如果有些業務由于瞬時的網絡故障或調用超時等問題,通過上文所講的 3 種模式一般都能得到很好的解決。但是在當今云計算環境下,很多服務是依賴于外部系統的可用性情況,在一些重要的業務場景下還需要周期性的對賬來保證真實的一致性。比如支付系統和銀行之間每天日終是都會有對賬過程。

對賬是***的***防線

責任編輯:趙寧寧 來源: 36大數據
相關推薦

2021-09-28 09:43:11

微服務架構技術

2021-06-08 12:46:27

分布式阿里TCC

2024-05-17 13:48:19

2023-09-12 22:58:51

分布式架構微服務

2021-11-05 07:18:15

分布式事務業務

2023-01-20 12:08:56

AIPythonTensorFlow

2020-12-14 14:24:07

CAP分布式數據一致性

2025-04-18 12:08:19

2012-06-13 09:23:46

虛擬化

2019-10-10 09:16:34

Zookeeper架構分布式

2023-12-14 08:01:47

環境復制微服務

2022-05-23 10:26:26

數據庫分布式

2023-05-29 14:07:00

Zuul網關系統

2015-02-03 09:36:45

微服務2015元年

2017-09-19 09:36:24

微服務架構分布式

2023-12-29 08:14:41

BASE事務ServiceB

2022-10-26 17:28:41

分布式事務seata

2022-06-27 08:21:05

Seata分布式事務微服務

2021-03-17 10:51:16

架構運維技術

2018-03-02 16:11:29

Spring Clou分布式服務跟蹤
點贊
收藏

51CTO技術棧公眾號

一级毛片视频在线| aaaaaa毛片| 亚洲成人五区| 亚洲不卡一区二区三区| 免费看成人av| 一级做a爱片久久毛片| 一区二区影院| 亚洲免费视频一区二区| 手机版av在线| 国产伦久视频在线观看| 亚洲欧洲在线观看av| 91沈先生播放一区二区| 国产成人无码专区| 欧美精品黄色| 在线成人激情黄色| 亚洲视频 中文字幕| jizz欧美| 精品久久在线播放| 中文字幕一区综合| 日本护士...精品国| 国产精品一区三区| 国产精品视频xxx| 国产无码精品在线观看| 三级电影一区| 亚洲欧美精品中文字幕在线| 波多野结衣在线免费观看| 欧美日韩免费看片| 午夜视频一区二区三区| 自拍偷拍亚洲色图欧美| 男女污污视频在线观看| 成人高清在线视频| 亚洲伊人第一页| 中文字幕在线播放不卡| 亚洲一区视频| 97超级碰碰碰久久久| 91麻豆免费视频网站| 五月天亚洲色图| 精品国产91九色蝌蚪| 国内av免费观看| 开心久久婷婷综合中文字幕| 日韩欧美极品在线观看| 菠萝蜜视频在线观看入口| 香蕉视频国产在线观看| 国产丝袜美腿一区二区三区| 久久精品二区| 香蕉久久一区二区三区| 国产91精品久久久久久久网曝门| 成人午夜黄色影院| 亚洲无码精品在线播放| 日韩极品在线观看| 国产精品av在线| 日韩人妻精品中文字幕| 欧美激情无毛| 日韩精品电影网| 奇米影音第四色| 欧美日韩国产网站| 欧美在线你懂的| 亚洲性生活网站| 日本精品另类| 在线亚洲免费视频| 婷婷免费在线观看| 日韩电影精品| 在线播放中文字幕一区| 992tv人人草| 国产精品麻豆| 日韩欧美一二三| 人妻激情偷乱视频一区二区三区| 亚洲人体在线| 欧美一区二区大片| 亚洲视频 中文字幕| 久久香蕉精品香蕉| 亚洲精选一区二区| 国产99在线 | 亚洲| 日韩激情图片| 久久国产精品影片| www.99re7.com| 9国产精品视频| 青青久久aⅴ北条麻妃| 欧美黄色一级大片| 久久精品国产精品亚洲精品| 成人免费高清完整版在线观看| 精品在线播放视频| 视频一区欧美精品| 亚洲a成v人在线观看| 韩国av免费在线| 久久久亚洲精品一区二区三区 | 一区中文字幕电影| 亚洲精品999| 日韩精品久久久久久久的张开腿让| 亚洲91视频| 55夜色66夜色国产精品视频| 超碰在线97观看| 国产成人亚洲精品狼色在线| 精品乱色一区二区中文字幕| av男人的天堂在线| 亚洲一区二区精品久久av| 久久久精品在线视频| 国产精品亚洲一区二区在线观看 | 色婷婷综合久色| 日本黄色的视频| 蜜桃久久久久| 日韩在线www| 五月婷婷亚洲综合| 激情综合五月天| 免费久久99精品国产自| 制服丝袜在线播放| 在线影视一区二区三区| 国产精品偷伦视频免费观看了| 国产免费久久| 久久久久免费精品国产| 中文字幕在线日亚洲9| 9久草视频在线视频精品| 亚洲一区在线直播| 成人国产二区| 亚洲成人黄色在线| 国产suv精品一区二区68| 欧美亚洲一区| 成人在线观看av| 免费的黄网站在线观看| 色哟哟一区二区三区| 乱码一区二区三区| 国产精品成久久久久| 日韩av电影中文字幕| 高h放荡受浪受bl| 亚洲免费观看视频| 五月激情五月婷婷| 欧州一区二区| 日韩免费精品视频| 无码精品人妻一区二区三区影院 | 亚洲老板91色精品久久| 国产亚洲欧美精品久久久久久| 免费观看成人鲁鲁鲁鲁鲁视频| 久久综合中文色婷婷| 神马午夜伦理不卡| 91精品国产综合久久久久久久久久| 少妇真人直播免费视频| 亚洲美女视频在线免费观看| 成人综合av网| 欧美性video| 日韩欧美另类在线| 久久高清无码视频| 国产成人在线视频免费播放| 黄黄视频在线观看| 曰本一区二区| 精品国产一区二区三区四区在线观看| 五月天婷婷导航| 91麻豆高清视频| 国产精品无码一本二本三本色| 欧美一区 二区| 国产91ⅴ在线精品免费观看| 欧美一区二区视频| 欧美色另类天堂2015| 国产肉体xxxx裸体784大胆| 亚洲久久视频| 乱色588欧美| 3d性欧美动漫精品xxxx软件| 国产亚洲人成网站在线观看| 一区二区视频免费观看| 中文字幕在线不卡国产视频| 日韩视频在线观看一区二区三区| 婷婷色综合网| 99久久99久久精品国产片| 日韩电影免费观看| 日韩成人在线视频| 国产天堂第一区| 国产精品久久久久9999吃药| 亚洲一区二区中文字幕在线观看| 欧美在线日韩| 国产亚洲二区| 蜜桃精品在线| www.日韩免费| 亚洲毛片在线播放| 欧美视频精品一区| 国产又粗又猛又爽又黄的视频小说 | 久久这里只精品最新地址| 青青青国产在线视频| 天天综合网91| 精品国产乱码久久久久久88av| 裤袜国产欧美精品一区| 精品久久久av| 日本xxxxxwwwww| 在线观看国产91| 国产乱国产乱老熟300| av午夜精品一区二区三区| 久久精品免费网站| 欧美激情一区| 日韩欧美亚洲日产国| 粉嫩av国产一区二区三区| 久久久久成人网| av资源种子在线观看| 日韩小视频在线观看专区| 一区二区三区福利视频| 亚洲同性同志一二三专区| 免费看毛片的网站| 麻豆freexxxx性91精品| 人妻夜夜添夜夜无码av| 日韩免费久久| 国内外成人免费视频| 亚洲欧洲专区| 国产成人黄色av| 黑人另类精品××××性爽| 亚洲欧美中文另类| 亚洲男女视频在线观看| 欧美在线观看18| 日本一二三区视频| 国产精品国产三级国产aⅴ入口 | 亚洲乱码精品久久久久..| 91九色02白丝porn| 亚洲国产精品午夜在线观看| 国产日韩欧美a| 538国产视频| 国产成人精品免费在线| 天天干天天玩天天操| 99精品国产福利在线观看免费| 亚洲一区尤物| 精品国产一级毛片| 久久66热这里只有精品| 激情久久免费视频| 国产区亚洲区欧美区| 丁香六月综合| 国内精品小视频在线观看| 高潮毛片在线观看| 最近的2019中文字幕免费一页| 婷婷综合激情网| 精品国产a毛片| www.av网站| 91精品一区二区三区久久久久久 | 欧美va亚洲va在线观看蝴蝶网| 中文字幕在线观看精品| 91黄视频在线| 亚洲 欧美 中文字幕| 欧美日韩亚洲视频一区| 国产91av视频| 亚洲大片在线观看| 国产在线免费视频| 亚洲一区欧美一区| 久久久国产成人| 亚洲女同女同女同女同女同69| 激情高潮到大叫狂喷水| 中文字幕高清一区| 国产精品麻豆免费版现看视频| 国产欧美日韩久久| 日本一区二区视频在线播放| 国产亚洲成aⅴ人片在线观看| 精品无码人妻一区| 久久色成人在线| 熟女高潮一区二区三区| 国产偷国产偷亚洲高清人白洁| 国产黄片一区二区三区| 久久精品一区二区三区四区| 亚洲国产av一区| 欧美激情综合在线| 乱老熟女一区二区三区| 18成人在线视频| 欧美交换国产一区内射| 亚洲第一福利视频在线| 日本在线播放视频| 在线免费视频一区二区| 亚洲天堂视频网| 欧美一区二区黄色| 少妇精品视频一区二区| 亚洲视频精品在线| 无遮挡的视频在线观看| 欧美另类xxx| 麻豆蜜桃在线观看| 国产精品久久色| 精品国产亚洲一区二区三区| 国产精品久久久久久久久久久久午夜片| 久本草在线中文字幕亚洲| 麻豆成人小视频| 久久亚洲成人| 91亚洲精品国产| 久久亚洲欧美| 在线免费看v片| 91丨porny丨最新| 精品日韩在线视频| 亚洲精品成人在线| 日韩不卡在线播放| 欧美日韩亚洲综合一区二区三区 | 亚洲一品av免费观看| 欧洲不卡av| 国内精品久久久久影院 日本资源| 中文字幕21页在线看| 国产这里只有精品| 秋霞蜜臀av久久电影网免费| 伊人久久婷婷色综合98网| 欧美色123| 手机在线免费观看毛片| 懂色中文一区二区在线播放| 91成年人网站| 一卡二卡三卡日韩欧美| 午夜一级黄色片| 精品国产乱码久久| 欧美性天天影视| 日韩av免费在线观看| 欧美成人精品一级| 欧美一区激情视频在线观看| 欧美91福利在线观看| 国产成人综合一区| 成人sese在线| 国产高潮流白浆| 色婷婷av一区二区三区gif| 不卡视频免费在线观看| 在线观看欧美www| 性国裸体高清亚洲| 岛国视频一区免费观看| 色婷婷色综合| 成人三级视频在线播放| 国产91在线看| 精品国产国产综合精品| 在线精品观看国产| 天堂在线资源网| 欧美极品美女视频网站在线观看免费| 亚洲成人一区在线观看| 精品国产免费一区二区三区| 欧美高清不卡| 午夜视频在线观| 国产精品入口麻豆九色| 日本a级c片免费看三区| 亚洲精品videossex少妇| 日韩激情av| av一区二区三区四区电影| 天天影视天天精品| 三上悠亚av一区二区三区| 久久精品在线观看| 欧美一区二区三区网站| 日韩av中文字幕在线播放| 里番在线播放| 古典武侠综合av第一页| 午夜激情一区| 一级片黄色免费| 亚洲欧美区自拍先锋| 国产精品人人做人人爽人人添| 欧美日韩理论片| 国产精品久久久久久久久搜平片| 国产三级精品三级在线观看| 亚洲精品电影在线观看| 欧美伦理免费在线| 91福利入口| 欧美激情无毛| 日本wwwwwww| 亚洲一区二区欧美激情| 黄色av中文字幕| 高清欧美性猛交xxxx黑人猛交| 国产精品白丝一区二区三区 | 日韩图片一区| 久久精品女同亚洲女同13| 舔着乳尖日韩一区| 欧美另类自拍| 国产精品美女无圣光视频| 久久视频在线| 91视频福利网| 夜夜嗨av一区二区三区四季av| 精品国产亚洲一区二区麻豆| 欧美日韩爱爱视频| 国内精品国产成人国产三级粉色 | 亚洲国产欧洲综合997久久| 日本特黄久久久高潮| 五月天色婷婷丁香| 日韩一区二区免费在线观看| 91豆花视频在线播放| 久久精品人成| 美女诱惑一区二区| 欧美激情图片小说| 亚洲精品99久久久久| 麻豆精品蜜桃| eeuss中文| 99在线精品免费| 99久久久无码国产精品免费蜜柚| 自拍偷拍亚洲在线| 久久久久久久久久久久电影| 久久手机在线视频| 91麻豆蜜桃一区二区三区| 中国a一片一级一片| 久久福利视频导航| 欧美日韩导航| 奇米视频888| 天天av天天翘天天综合网| av在线第一页| 电影午夜精品一区二区三区| 日日摸夜夜添夜夜添亚洲女人| 色哟哟一一国产精品| 日韩av网址在线观看| 国产激情欧美| 免费不卡av在线| 国产精品人人做人人爽人人添| 黄色av小说在线观看| 国产精品久久久久久av福利软件| 国产精品v亚洲精品v日韩精品| 性久久久久久久久久| 在线不卡中文字幕播放| 国产一二三在线| 国产免费一区二区三区四在线播放| 成人av在线网| 91九色蝌蚪91por成人| 欧美亚洲另类视频| 在线中文字幕亚洲| 最近中文字幕在线mv视频在线 | 国产剧情久久久久久| 在线亚洲免费|