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

分布式事務,原理簡單,寫起來全是坑!

數據庫 MySQL
Seata 中的 XA 模式實際上是基于 MySQL 的 XA 兩階段提交發展出來的,所以學習 XA 模式,需要小伙伴們先理解 MySQL 中的 XA 是怎么一回事,把 MySQL 中的 XA 搞清楚了,再來學習 Seata 中的 XA 模式就容易的多了。

今天我們就一起來看下另一種模式,XA 模式!

其實我覺得 seata 中的四種不同的分布式事務模式,學完 AT、TCC 以及 XA 就夠了,Saga 不好玩,而且長事務本身就有很多問題,也不推薦使用。

Seata 中的 XA 模式實際上是基于 MySQL 的 XA 兩階段提交發展出來的,所以學習 XA 模式,需要小伙伴們先理解 MySQL 中的 XA 是怎么一回事,把 MySQL 中的 XA 搞清楚了,再來學習 Seata 中的 XA 模式就容易的多了。

1. 什么是 XA 規范

1.1 什么是兩階段提交

我們先來稍微回顧一下兩階段提交。

先來看下面一張圖:

圖片

這張圖里涉及到三個概念:

  • AP:這個不用多說,AP 就是應用程序本身。
  • RM:RM 是資源管理器,也就是事務的參與者,大部分情況下就是指數據庫,一個分布式事務往往涉及到多個 RM。
  • TM:TM 就是事務管理器,創建分布式事務并協調分布式事務中的各個子事務的執行和狀態,子事務就是指在 RM 上執行的具體操作。

那么什么是兩階段(Two-Phase Commit, 簡稱 2PC)提交?

兩階段提交說白了道理很簡單,松哥舉個簡單例子來和大家說明兩階段提交:

比如下面一張圖:

圖片

我們在 Business 中分別調用 Storage 與 Order、Account,這三個中的操作要同時成功或者同時失敗,但是由于這三個分處于不同服務,因此我們只能先讓這三個服務中的操作各自執行,三個服務中的事務各自執行就是兩階段中的第一階段。

第一階段執行完畢后,先不要急著提交,因為三個服務中有的可能執行失敗了,此時需要三個服務各自把自己一階段的執行結果報告給一個事務協調者(也就是前面文章中的 Seata Server),事務協調者收到消息后,如果三個服務的一階段都執行成功了,此時就通知三個事務分別提交,如果三個服務中有服務執行失敗了,此時就通知三個事務分別回滾。

這就是所謂的兩階段提交。

總結一下:兩階段提交中,事務分為參與者(例如上圖的各個具體服務)與協調者(上文案例中的 Seata Server),參與者將操作成敗通知協調者,再由協調者根據所有參與者的反饋情報決定各參與者是要提交操作還是中止操作,這里的參與者可以理解為 RM,協調者可以理解為 TM。

不過 Seata 中的各個分布式事務模式,基本都是在二階段提交的基礎上演化出來的,因此并不完全一樣,這點需要小伙伴們注意。

1.2 什么是 XA 規范

XA 規范 是 X/Open 組織定義的分布式事務處理(DTP,Distributed Transaction Processing)標準。

XA 規范描述了全局的事務管理器與局部的資源管理器之間的接口。XA規范的目的是允許多個資源(如數據庫,應用服務器,消息隊列等)在同一事務中訪問,這樣可以使 ACID 屬性跨越應用程序而保持有效。

XA 規范使用兩階段提交來保證所有資源同時提交或回滾任何特定的事務。

XA 規范在上世紀 90 年代初就被提出。目前,幾乎所有主流的數據庫都對 XA 規范提供了支持。

XA 事務的基礎是兩階段提交協議。需要有一個事務協調者來保證所有的事務參與者都完成了準備工作(第一階段)。如果協調者收到所有參與者都準備好的消息,就會通知所有的事務都可以提交了(第二階段)。MySQL 在這個 XA 事務中扮演的是參與者的角色,而不是協調者(事務管理器)。

MySQL 的 XA 事務分為內部 XA 和外部 XA。外部 XA 可以參與到外部的分布式事務中,需要應用層介入作為協調者;內部 XA 事務用于同一實例下跨多引擎事務,由 Binlog 作為協調者,比如在一個存儲引擎提交時,需要將提交信息寫入二進制日志,這就是一個分布式內部 XA 事務,只不過二進制日志的參與者是 MySQL 本身。MySQL 在 XA 事務中扮演的是一個參與者的角色,而不是協調者。

2. MySQL 中的 XA

接下來松哥通過一個簡單的例子先給大家看下 MySQL 中的 XA 是怎么玩的。

2.1 兩階段事務提交

比如說轉賬操作,我用 MySQL 中的 XA 事務來和大家演示一下從一個賬戶中轉出 10 塊錢:

圖片

上面這段事務提交是一個兩階段事務提交的案例。

具體執行步驟如下:

  • XA START "transfer_money":這個表示開啟一個 XA 事務,后面的字符串是事務的 xid,這是一個唯一字符串,開啟之后,事務的狀態變為ACTIVE。
  • update account set amount=amount-10 where account_no='A'; 這個表示執行具體的 SQL。
  • XA END "transfer_money":這個表示結束一個 XA 事務,此時事務的狀態轉為IDLE。
  • XA PREPARE "transfer_money":這個將事務置為 PREPARE 狀態。
  • XA COMMIT "transfer_money":這個用來提交事務,提交之后,事務的狀態就是 COMMITED。

最后一步,可以通過 XA COMMIT 來提交,也可以通過 XA ROLLBACK 來回滾,回滾后事務的狀態就是 ROLLBACK。

另外第四步可以省略,即一個 IDLE 狀態的 XA 事務可以直接提交或者回滾。

我們來看下面一張流程圖:

圖片

從這張圖里我們可以看出,事務可以一步提交,也可以兩階段提交,都是支持的。如果是兩階段提交,prepare 之后,其實是在等其他的資源管理器(RM)反饋結果。

2.2 事務直接提交

松哥再給大家演示一下事務一步提交:

圖片

這個就比較簡單,沒啥好說的。

這塊再跟大家介紹另外一個 XA 事務相關的命令 XA RECOVER,如下圖:

圖片

XA RECOVER 可以列出所有處于 PREPARE 狀態的 XA 事務,其他狀態的事務則都不會列出來,如上圖。

2.3 事務回滾

再舉一個事務回滾的例子:

圖片

小伙伴們看到,xa recover 可以查看處于 prepare 狀態的事務,事務回滾有三個參數:第一個參數,是以 gtrid_length 為依據,從 data 字符串上截取下來的值;第二個參數,是第一個從 data 上截取下來值之后,data 剩余的值,在本案例中,第一次被截取之后,就不剩了,所以第二個參數是一個空字符串;第三個參數是 formatID 的值。

回滾之后,再執行 xa recover 就看不到東西了。

2.4 小結

在用一個客戶端環境下,XA 事務和本地(非 XA )事務互相排斥,如果已經通過 XA START 來開啟一個事務,則本地事務不會被啟動,直到 XA 事務被提交或者被回滾為止。

相反的,如果已經使用 START TRANSACTION 啟動一個本地事務,則 XA 語句不能被使用,直到該事務被提交或者回滾為止,而且 XA 事務僅僅被 InnoDB 存儲引擎支持。

3. Seata 中的 XA

3.1 Seata 中的 XA 模式

我們先來看一點理論知識,3.3 小節我們再來看代碼實踐。

通過上面的介紹,大家已經知道了 MySQL 中的 XA 事務是怎么回事了,Seata 中的 XA 模式其實就是在 MySQL 中 XA 模式的基礎上實現的。Seata 中的 XA 模式就是在 Seata 定義的分布式事務框架內,利用事務資源(數據庫、消息服務等)對 XA 協議的支持,以 XA 協議的機制來管理分支事務的一種事務模式。

我們來看下面一張圖:

圖片

我來大概說一下這個執行步驟:

  • 首先由 TM 開啟全局分布式事務。
  • 各個業務 SQL 分別放在不同的 XA 分支中進行,具體執行的流程就是XA Start->業務 SQL->XA End,這個流程跟我 2.1 小節和大家演示的 MySQL 中 XA 事務的流程是一致的。
  • 分支中的 XA 事務執行完成后,執行XA prepare,并將自己執行的狀態報告給 TC。
  • 其他的分支事務均按照 2、3 步驟來執行。
  • 當所有分支事務都執行完畢后,TC 也收到了各個分支事務報告上來的執行狀態,如果所有狀態都 OK,則 TC 通知所有 RM 執行XA Commit 完成事務的最終提交,否則 TC 通知所有 RM 執行XA Rollback 進行事務回滾。

這就是 Seata 中的 XA 模式!只要小伙伴們理解了 2.2 小節中 MySQL 的 XA 模式,那么 Seata 中的 XA 模式就很好理解了。

3.2 特色

前面小伙伴們已經學會了 AT 和 TCC 兩種不同的分布式事務模式了,現在再加入一個 XA,我們再來把這三個放在一起比較下。

  • AT 和 TCC 都是通過反向補償將數據復原的,也就是說,通過一條更新語句將數據復原;XA 因為是 MySQL 自己的功能,所以不是反向補償,而是正兒八經的回滾(處于 prepare 狀態的數據并沒有 commit,將來在二階段可以選擇 commit 或者 rollback)。
  • AT 和 XA 模式是無侵入的分布式事務解決方案,適用于不希望對業務進行改造的場景,幾乎0學習成本;TCC 則有一定的代碼侵入。
  • AT 和 XA 都是一種全自動的,無論是提交呀,回滾呀(無論是真回滾還是反向補償),都是全自動的,就是開發者基本上不需要額外做什么事情;TCC 則是一種手動的分布式事務,一階段的 prepare、二階段的 commit 或者 rollback,所有邏輯都是開發者自己寫的。
  • 松哥發前面文章的時候,有小伙伴提到分布式事務的一致性問題,XA 模式是分布式強一致性的解決方案,但是因為性能低而導致使用較少。

好啦,比較完啦,那就上代碼吧!

3.3 代碼實踐

小伙伴們只需要搞明白前面的 AT 模式后,XA 模式其實跟 AT 模式差不多!就是替換一下數據源即可!話是這么說,不過真做起來,還是有很多坑,我們一起來看下。

為了方便大家理解,本文我就不重新搞案例了,咱們還用上篇文章那個下訂單的案例來演示。

這是一個商品下單的案例,一共有五個服務,我來和大家稍微解釋下:

eureka:這是服務注冊中心。

account:這是賬戶服務,可以查詢/修改用戶的賬戶信息(主要是賬戶余額)。

order:這是訂單服務,可以下訂單。

storage:這是一個倉儲服務,可以查詢/修改商品的庫存數量。

bussiness:這是業務,用戶下單操作將在這里完成。

這個案例講了一個什么事呢?

當用戶想要下單的時候,調用了 bussiness 中的接口,bussiness 中的接口又調用了它自己的 service,在 service 中,首先開啟了全局分布式事務,然后通過 feign 調用 storage 中的接口去扣庫存,然后再通過 feign 調用 order 中的接口去創建訂單(order 在創建訂單的時候,不僅會創建訂單,還會扣除用戶賬戶的余額),在這個過程中,如果有任何一個環節出錯了(余額不足、庫存不足等導致的問題),就會觸發整體的事務回滾。

本案例具體架構如下圖:

圖片

這個案例就是一個典型的分布式事務問題,storage、order 以及 account 中的事務分屬于不同的微服務,但是我們希望他們同時成功或者同時失敗。

這個案例的基本架構我這里就不重復搭建了,小伙伴們可以參考上篇文章,這里我們主要來看 XA 事務如何添加進來。

3.3.1 數據庫配置

由于 XA 模式利用的是 MySQL 自身對 XA 規范的實現,所以 XA 機制實際上是不需要 undo_log 表的,小伙伴們可以把你 AT 模式中的 undo_log 表刪除啦~ 如果刪除后運行 Java 程序報錯,那說明你的 XA 模式使用的不地道!注意看松哥后面的講解哦。

接下來我就來說幾個要點。

數據庫驅動

這是一個坑。松哥經過反復測試,seata 中的 XA 模式和最新版的 MySQL 驅動不兼容,運行時候會有錯誤,經過測試,MySQL 8.0.11 這個版本的驅動是沒問題的,所以在 account、storage 以及 order 三個需要數據庫調用的服務上,記得修改一下數據庫驅動依賴的版本號:

<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<scope>runtime</scope>
<version>8.0.11</version>
</dependency>

druid 依賴

有的小伙伴們看到這里用到了阿里的 Druid 數據庫連接池,就趕緊加入這個依賴!殊不知,這又掉入版本兼容的坑了,spring-cloud-starter-alibaba-seata 依賴中實際上包含了 druid 依賴,而且版本號是沒有問題的!所以小伙伴們千萬別自己手動加 druid 依賴,可能會因為版本號問題掉坑。

關掉數據源代碼

接下來就是關閉掉 seata 數據源代理了,account、storage 以及 order 里邊都改一下,加入如下配置:

seata.enable-auto-data-source-proxy=false

配置自定義數據源

接下來就是配置自定義數據源了,account、order 以及 storage 都要配置,如下:

@Configuration
public class DataSourceConfiguration {

@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public DruidDataSource druidDataSource() {
return new DruidDataSource();
}

@Bean("dataSourceProxy")
@Primary
public DataSource dataSource(DruidDataSource druidDataSource) {
return new DataSourceProxyXA(druidDataSource);
}


@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSourceProxy)throws Exception{
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourceProxy);
sqlSessionFactoryBean.setTransactionFactory(new SpringManagedTransactionFactory());
return sqlSessionFactoryBean.getObject();
}

}

先配置 DruidDataSource,但這不是我們最終目的,最終目的是配置 DataSourceProxyXA,看名字就知道,這就會把事務切換為 XA 模式,最后,還需要基于 DataSourceProxyXA 來配置一下 MyBatis,都是常規操作,不多說。

責任編輯:武曉燕 來源: 江南一點雨
相關推薦

2022-06-21 08:27:22

Seata分布式事務

2021-06-10 06:57:39

Redis存儲數據庫

2020-03-31 08:05:23

分布式開發技術

2022-07-10 20:24:48

Seata分布式事務

2025-10-09 09:18:15

JavaScriptJSON前端

2022-06-27 08:21:05

Seata分布式事務微服務

2025-01-15 08:34:00

分布式事務服務

2023-09-14 15:44:46

分布式事務數據存儲

2017-07-26 15:08:05

大數據分布式事務

2019-10-10 09:16:34

Zookeeper架構分布式

2009-06-19 15:28:31

JDBC分布式事務

2009-09-18 15:10:13

分布式事務LINQ TO SQL

2021-09-29 09:07:37

分布式架構系統

2022-08-26 00:02:03

RocketMQ單體架構MQ

2019-08-19 10:24:33

分布式事務數據庫

2024-01-26 13:17:00

rollbackMQ訂單系統

2025-04-29 04:00:00

分布式事務事務消息

2019-06-26 09:41:44

分布式事務微服務

2022-03-24 07:51:27

seata分布式事務Java

2025-05-15 08:05:00

點贊
收藏

51CTO技術棧公眾號

欧美黄色视屏| 亚洲欧美一区二区三区四区五区| 欧美舌奴丨vk视频| 中文字幕精品—区二区四季| **亚洲第一综合导航网站| 青青草手机视频在线观看| 欧美一区二区三区久久| 精品视频一区二区不卡| 午夜久久久久久久久久久| 色欲av永久无码精品无码蜜桃| 久久亚洲国产精品一区二区| 久久五月天综合| 国产一卡二卡三卡四卡| a∨色狠狠一区二区三区| 亚洲视频在线一区二区| 蜜桃成人在线| 精品人妻一区二区三区日产乱码 | 麻豆成人在线看| 国产毛片毛片毛片毛片毛片毛片| 日韩成人综合网站| 午夜av一区二区| 亚洲国产精品嫩草影院久久| 国产精品免费成人| 亚洲区欧洲区| 欧美国产在线观看| 国产伦精品一区二区三区视频免费 | 国产最新免费视频| 成人在线免费看| 丁香桃色午夜亚洲一区二区三区| 国产精品美女在线观看| 国产免费av一区二区| 久久久久久久久久久9不雅视频| 亚洲国产精品久久久久久| 免费在线观看污网站| 日韩久久一区二区三区| 日韩av午夜在线观看| 欧美激情精品久久久久久免费印度| 成人黄色免费网址| 久久久久观看| 精品国产百合女同互慰| 97超碰免费在线观看| 91麻豆精品国产综合久久久 | 欧美三级三级| 欧美精品一区二区三区高清aⅴ| 欧美一级小视频| 国产第一精品| 欧美日韩免费视频| 久久久久久久片| 高清电影一区| 色婷婷精品久久二区二区蜜臂av| 国产免费黄色av| 毛片电影在线| 欧美日韩在线一区| 国产亚洲欧美在线视频| 日产福利视频在线观看| 五月天视频一区| 成人午夜免费在线| 国产h片在线观看| 欧美日韩免费区域视频在线观看| 国产伦精品一区二区三区四区视频 | 免费人成在线观看播放视频 | 亚洲人av在线影院| 人妻体内射精一区二区| 国产真实有声精品录音| 在线观看国产精品淫| 天天干天天操天天拍| 日韩欧美大片| 欧美xxxx18国产| 久久久美女视频| 亚洲精选成人| 日本欧美一二三区| 中文字幕+乱码+中文| 婷婷中文字幕一区| 久久午夜a级毛片| 中文字幕第28页| 国产亚洲在线| 中文字幕久精品免费视频| 东方伊人免费在线观看| 97精品视频在线看| 亚洲成人精品在线| 国产ts丝袜人妖系列视频| 亚洲成人高清| 日韩欧美一区二区在线视频| 国产 xxxx| 欧美一级本道电影免费专区| 久热精品视频在线观看| 日韩欧美不卡视频| 免费在线观看视频一区| 51精品国产人成在线观看 | 成人毛片在线播放| 蜜臀va亚洲va欧美va天堂| 999国内精品视频在线| 亚洲欧美日本在线观看| 国产精品三级av| 美女黄色免费看| 亚洲欧美在线成人| 欧美mv日韩mv亚洲| 色婷婷综合久久久久中文字幕| a成人v在线| 精品国产亚洲一区二区三区在线观看| asian性开放少妇pics| 99久久亚洲精品蜜臀| 97国产在线视频| 在线观看黄色网| 成人ar影院免费观看视频| 神马影院一区二区| 婷婷av一区二区三区| 国产亚洲欧美激情| 欧美a级免费视频| 在线一区视频观看| 亚洲国产精彩中文乱码av| 婷婷社区五月天| 天使萌一区二区三区免费观看| 91免费精品视频| 亚洲熟妇无码久久精品| 不卡一区二区中文字幕| 一区二区三区在线视频111| 国产区高清在线| 亚洲午夜电影在线观看| 亚洲国产日韩欧美在线观看| 欧美中文一区| 欧美高清在线观看| 91亚洲国产成人精品一区| 三级影片在线观看欧美日韩一区二区| 亚洲影影院av| 91啦中文在线| 欧美极品aⅴ影院| 国产原创popny丨九色 | 欧美久久久久久久久久| 自拍偷拍 国产| 久久香蕉网站| 色综合五月天导航| 国产免费不卡av| 国产精品免费aⅴ片在线观看| aa在线免费观看| 菁菁伊人国产精品| 欧美激情欧美激情在线五月| 国产色综合视频| 亚洲欧美日韩在线播放| 亚洲免费av一区| 成人av国产| 国产精品男人的天堂| 都市激情一区| 欧美亚洲综合久久| 国产成人一区二区在线观看| 天堂午夜影视日韩欧美一区二区| 欧美激情论坛| 三上悠亚国产精品一区二区三区| 日韩精品www| 国产精品777777| 久久久综合激的五月天| 欧美性大战久久久久xxx| 亚洲精品国产动漫| 日韩免费观看网站| a视频网址在线观看| 欧美中文字幕一二三区视频| 国精产品一区一区| 欧美日韩在线大尺度| 欧美亚洲国产日韩2020| 在线免费观看视频网站| 国产精品沙发午睡系列990531| 亚洲一区在线不卡| 视频在线不卡免费观看| 成人激情视频在线| 三级福利片在线观看| 精品久久久久久综合日本欧美| 精品少妇theporn| www.亚洲精品| www黄色在线| 99精品视频在线| 99三级在线| 三级中文字幕在线观看| 亚洲性视频网址| 96亚洲精品久久久蜜桃| 亚洲一卡二卡三卡四卡无卡久久| 免费看毛片的网站| 日日摸夜夜添夜夜添国产精品 | 亚洲毛片播放| 欧美重口乱码一区二区| 亚洲国产精选| 高清在线视频日韩欧美| 九色在线视频蝌蚪| 欧美一区三区二区| 五月婷婷中文字幕| 国产精品麻豆久久久| 国产xxx在线观看| 99视频一区| 亚洲一区二区三区色| 中文字幕日韩高清在线| 国产成人av在线| 中文国产字幕在线观看| 91久久精品午夜一区二区| 热久久久久久久久| 99精品国产在热久久| 性欧美.com| 国产精品白丝一区二区三区| 国产精品观看在线亚洲人成网| a在线免费观看| 亚洲欧美日韩爽爽影院| 精品女同一区二区三区| 在线观看视频一区二区| 欧美日韩中文字幕在线观看| 久久精品视频一区二区三区| 日韩精品xxx| 老司机精品视频一区二区三区| 国产乱淫av片杨贵妃| 色综合久久网| 久久天堂国产精品| 午夜久久av| 国产欧美一区二区三区在线看| 多野结衣av一区| 欧美成人小视频| 伊人免费在线| 亚洲色图50p| 国产综合在线播放| 7777精品伊人久久久大香线蕉的 | 欧美老女人性生活视频| av在线这里只有精品| 色偷偷中文字幕| 日韩高清电影一区| 北条麻妃69av| 怡红院精品视频在线观看极品| 亚洲精品免费网站| 国产 日韩 欧美一区| 97精品一区二区视频在线观看| yellow91字幕网在线| 中文字幕日韩精品有码视频| 色综合888| 亚洲精品国产精品久久清纯直播| www.污视频| 欧美一级专区免费大片| 亚洲在线观看av| 欧美日韩视频在线一区二区| 波多野结衣午夜| 91黄色免费看| 国产黄色免费观看| 欧美视频国产精品| 亚洲一区欧美在线| 亚洲 欧美综合在线网络| 久热精品在线观看| 亚洲国产日韩在线一区模特| 九九视频免费观看| 亚洲综合色区另类av| 国产又黄又爽又无遮挡| 玉足女爽爽91| 久久久精品国产sm调教| 亚洲午夜免费电影| 国产精品成人aaaa在线| 亚欧色一区w666天堂| 亚洲天堂日韩av| 欧美视频中文字幕在线| 中文字幕超碰在线| 色呦呦一区二区三区| 波多野结衣啪啪| 色婷婷激情久久| www.亚洲激情| 欧美久久久久久蜜桃| 99热这里精品| 狠狠操狠狠色综合网| 国产微拍精品一区| 色域天天综合网| 亚洲在线精品视频| 日韩视频永久免费| 免费观看的毛片| 欧美日韩综合不卡| 91无套直看片红桃| 日韩欧美你懂的| 天天干天天摸天天操| 亚洲欧美日韩网| 日本中文字幕在线2020| 欧美精品亚州精品| 黄色软件视频在线观看| 国产91在线播放精品91| 欧洲精品久久久久毛片完整版| 亚洲综合中文字幕在线观看| 电影一区二区在线观看| 欧美日韩系列| 婷婷成人基地| 一区二区传媒有限公司| 奇米影视一区二区三区小说| 亚洲欧洲日韩综合| 久久综合成人精品亚洲另类欧美| 亚洲色图 激情小说| 亚洲精品久久久蜜桃| 日韩在线视频免费播放| 欧美久久久久久久久| 亚欧在线观看视频| 搡老女人一区二区三区视频tv| 91九色在线看| 国产一区二区丝袜高跟鞋图片| gogo久久日韩裸体艺术| 日产国产精品精品a∨| 欧美黄色影院| 午夜精品一区二区在线观看的| 欧美午夜不卡影院在线观看完整版免费 | 成人精品一区二区三区免费 | 一区二区三区四区五区精品| 国产精品扒开腿做爽爽爽软件| 欧美三级午夜理伦三级| 激情另类综合| 九一精品在线观看| 成人福利电影精品一区二区在线观看| 亚洲色图第四色| 婷婷久久综合九色综合伊人色| 在线观看中文字幕网站| 日韩精品一二三四区| 超碰免费公开在线| 国产精品黄页免费高清在线观看| 粉嫩久久久久久久极品| 中文精品一区二区三区| 首页国产欧美久久| 亚洲一区二区三区四区av| 专区另类欧美日韩| 波多野结衣电车痴汉| 亚洲国产精品va在线看黑人| 国产一二三区在线观看| 国产精品精品久久久| 欧美日韩导航| 成人黄色大片网站| 国产伦理精品不卡| 99热这里只有精品2| 欧美—级在线免费片| 男人天堂av在线播放| 亚洲国产精品热久久| 日本无删减在线| 成人欧美一区二区三区黑人| 成人在线免费观看91| 国产成人亚洲精品无码h在线| 成人h动漫精品一区二| 免费一级a毛片夜夜看| 欧美精品xxxxbbbb| 在线观看黄色av| 国产精品综合网站| 精品国产欧美日韩| 国产成人精品无码播放| 26uuu精品一区二区| xxxx.国产| 国产午夜精品久久久| 水蜜桃在线视频| 麻豆久久久9性大片| 国产情侣一区| 免费a级黄色片| 色综合网站在线| 国产一二在线观看| 国产成人一区二区三区小说| 国内精品久久久久久99蜜桃| 亚洲精品高清无码视频| 国产欧美日韩中文久久| 黄色一区二区视频| 最近中文字幕2019免费| 色8久久久久| 成人免费看片视频在线观看| 国产不卡在线播放| 国产一级片网址| 亚洲激情在线观看| 色是在线视频| 日韩中文字幕一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 一本精品一区二区三区| 日本黄色www| 精品动漫一区二区三区| 免费在线高清av| 国产精品一区久久久| 欧美aaaa视频| 国产ts在线观看| 天天操天天干天天综合网| 国产天堂在线| 92福利视频午夜1000合集在线观看 | 欧美成人一级| 欧美精品一区二区三区三州| 久久夜色精品一区| 一二三四区在线| 久久全国免费视频| 欧美日韩播放| 国内少妇毛片视频| www.日韩精品| 久久久久久av无码免费看大片| 久久国产精彩视频| 欧美一区二区三区红桃小说| 欧美亚洲激情视频| 成人亚洲一区二区| 乱码一区二区三区| 色综合天天综合| 大片免费在线看视频| 精品国产一区二区三区日日嗨 | 国产99久久精品一区二区永久免费 | 国产一区二区在线免费观看| 国产网友自拍视频| 一本色道久久综合狠狠躁篇的优点| 国产精品久久久久久av公交车| 免费日韩电影在线观看| 蜜桃视频在线观看一区二区| 九九九国产视频| 中文综合在线观看| 精品视频自拍| 亚洲精品成人在线播放| 狠狠综合久久av一区二区小说| 成人高清免费在线| 欧美一区二区三区四区五区六区| 国产成人自拍在线|