国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

我給Apache頂級項目提了個Bug

共 7655字,需瀏覽 16分鐘

 ·

2020-11-26 22:37

這篇文章記錄了給 Apache 頂級項目 - 分庫分表中間件 ShardingSphere 提交 Bug 的歷程。

說實話,這是一次比較曲折的 Bug 跟蹤之旅。10月28日,我們在 GitHub 上提交 issue,中途因為官方開發(fā)者的主觀臆斷被 Close 了兩次,直到 11 月 20 日才被認(rèn)定成 Bug 并發(fā)出修復(fù)版本,歷時 20 多天。

本文將還原該 Bug 的分析過程,將有價值的經(jīng)驗和技術(shù)點進(jìn)行提煉。通過本文,你將收獲到:

1、疑難問題的排查思路

2、數(shù)據(jù)庫中間件 Sharding Proxy 的原理

3、MySQL 預(yù)編譯的流程和交互協(xié)議

4、Wireshark 抓包分析 MySQL 的奇淫技巧

??

01 問題描述?

這個 Bug 來源于我的公號讀者,他替公司預(yù)研 ShardingProxy(屬于 ShardingSphere 的子產(chǎn)品,可用作分庫分表,后文會詳細(xì)介紹)。他按照官方文檔寫了一個很簡單的 demo,但是運行后無法查詢出數(shù)據(jù)。

下面是他遇到問題后發(fā)給我的信息,希望我能幫忙一起定位下原因。

截圖中的 doc 詳細(xì)記錄了 ShardingProxy 的配置、調(diào)試分析日志、以及問題的具體現(xiàn)象。

為了方便大家理解,我重新描述下這個 Demo 的業(yè)務(wù)邏輯以及問題表象。

1.?Demo 的業(yè)務(wù)邏輯說明

這個 Demo 很簡單,主要為了跑通 ShardingProxy ?的分庫分表功能。程序用 SpringBoot + MyBatis 實現(xiàn)了一個單表的查詢邏輯,然后用這張表的一個 long 類型字段作為分區(qū)鍵,并通過 ShardingProxy 進(jìn)行了分表。

下面是那張數(shù)據(jù)表的詳細(xì)定義,共 16 個字段,大家關(guān)注前兩個字段即可,其他字段和本文提到的 Bug 無關(guān)。

前兩個字段的作用如下:

  • BIZ_DT:業(yè)務(wù)字段,date類型,和Bug有關(guān)

  • ECIF_CUST_NO:bigint 類型,用做分區(qū)鍵

代碼就是 Controller 調(diào)用 Service,Service 調(diào)用 Dao,Dao 通過 MyBatis 實現(xiàn),這里就不粘貼了。

由于使用了 ShardingProxy 中間件,因此它跟直連數(shù)據(jù)庫的配置會有所不同,在定義 dataSource 時,url 需要配置成這樣:

jdbc:mysql://127.0.0.1:3307/sharding_db?useServerPrepStmts=true&cachePrepStmts=true&serverTimezone=UTC

可以看到,jdbc 連接的是 ShardingProxy 的邏輯數(shù)據(jù)源 sharding_db,端口使用的是?3307,并非真正的底層數(shù)據(jù)庫以及 MySQL Server 的真實端口 3306,具體原理下文會介紹到。其中,標(biāo)藍(lán)色的?useServerPrepStmts?和?cachePrepStmts 這兩個參數(shù),和本文說的 Bug 有關(guān),這里先提一下,后面會具體分析。

另外,ShardingProxy 的分表策略是:用 long 類型的 ecif_cust_no 字段對 2 進(jìn)行取模,分成了兩張表。具體配置如下:

shardingColumn: ecif_cust_no

algorithmExpression: pscst_prdt_cvr${ecif_cust_no % 2}

2.?問題描述

再說下遇到的問題。首先,往數(shù)據(jù)表中預(yù)先插入一條 ECIF_CUST_NO 等于 10000 的數(shù)據(jù):

然后啟動 demo 程序,使用 curl?發(fā)起 post 請求,查詢 ecifCustNo 等于 10000 的那條記錄,居然查詢不出數(shù)據(jù):

至此,背景基本交代清楚了,為什么數(shù)據(jù)庫中明明有數(shù)據(jù),但是程序卻查詢不出來呢?問題到底出現(xiàn)在 ShardingProxy,還是應(yīng)用程序本身?


?

?02 ShardingProxy 原理簡介?

在開啟這個問題的分析過程之前,我先快速普及下 ShardingProxy 的基本原理,以便大家能更好的理解我的分析思路。

開源的數(shù)據(jù)庫中間件大家一定接觸過,最流行的是 MyCat 和 ShardingSphere。其中 MyCat 是阿里開源的;ShardingSphere 是由當(dāng)當(dāng)網(wǎng)開源,并在京東逐漸發(fā)展壯大,于 2020 年成為了 Apache 頂級項目。

ShardingSphere 的目標(biāo)是一個生態(tài)圈,它由非常著名的 ShardingJDBC、ShardingProxy、ShardingSidecar 3 款獨立的產(chǎn)品組成。本文重點普及下 ShardingProxy,另外兩個就不展開了。

1. 什么是 ShardingProxy ?

ShardingProxy 屬于和 MyCat 對標(biāo)的產(chǎn)品,定位為透明化的數(shù)據(jù)庫代理端,可以理解成:一個實現(xiàn)了 MySQL 協(xié)議的 Server(獨立進(jìn)程),可用于讀寫分離、分庫分表、柔性事務(wù)等場景。

對于應(yīng)用程序或者 DBA 來說,可以把 ShardingProxy 當(dāng)做數(shù)據(jù)庫代理,能用 MySQL 客戶端工具(Navicat)或者命令行和它直接交互,而 ShardingProxy 內(nèi)部則通過 MySQL 原生協(xié)議與真實的 MySQL 服務(wù)器通信。

圖1:ShardingProxy 的應(yīng)用架構(gòu)圖

從架構(gòu)圖來看,ShardingProxy 就相當(dāng)于 MySQL,它本身不存儲數(shù)據(jù),但是對外屏蔽了 Database 的存儲細(xì)節(jié),你可以用連接 MySQL 的方式去連接 ShardingProxy(除了端口不同),用你熟悉的 ORMapping 框架使用它。

2. ShardingProxy 的內(nèi)部架構(gòu)

再來看下 ShardingProxy 的內(nèi)部架構(gòu),后續(xù)源碼分析時會涉及到此部分。

圖2:ShardingProxy 的內(nèi)部架構(gòu)圖

整個架構(gòu)分為前端、核心組件和后端:

前端(Frontend)負(fù)責(zé)與客戶端進(jìn)行網(wǎng)絡(luò)通信,采用的是 NIO 框架,在通信的過程中完成對MySQL協(xié)議的編解碼。

核心組件(Core-module)得到解碼的 MySQL 命令后,開始調(diào)用 Sharding-Core 對 SQL 進(jìn)行解析、改寫、路由、歸并等核心功能。

后端(Backend)與真實數(shù)據(jù)庫交互,采用 Hikari 連接池,同樣涉及到 MySQL 協(xié)議的編解碼。

3. ShardingProxy 的預(yù)編譯 SQL 功能

本文的 Bug 跟 ShardingProxy 的預(yù)編譯 SQL 有關(guān),這里單獨介紹下此功能以及與之相關(guān)的 MySQL 協(xié)議,這個是本文的關(guān)鍵,請耐心看完。

熟悉數(shù)據(jù)庫開發(fā)的同學(xué)一定了解:預(yù)編譯 SQL(PreparedStatement),在數(shù)據(jù)庫收到一條 SQL 到執(zhí)行完畢,一般分為以下 3 步:

1、詞法和語義解析

2、優(yōu)化 SQL,制定執(zhí)行計劃

3、執(zhí)行并返回結(jié)果

但是很多情況下,一條 SQL 語句可能會反復(fù)執(zhí)行,只是執(zhí)行時的參數(shù)值不同。而預(yù)編譯功能將這些值用占位符代替,最終達(dá)到一次編譯、多次運行的效果,省去了解析優(yōu)化等過程,能大大提高 SQL 的執(zhí)行效率。

假設(shè)我們要執(zhí)行下面這條 SQL 兩次:

SELECT?*?FROM?t_user?WHERE?user_id?=?10;

那 JDBC 和 MySQL 之間的協(xié)議消息如下:

通過上述流程可以看到:第 1 條消息是PreparedStatement,查詢語句中的參數(shù)值用問號代替了,它告訴 MySQL 對這個SQL 進(jìn)行預(yù)編譯;第 2 條消息 MySQL 告訴 JDBC 準(zhǔn)備成功了;第 3 條消息 JDBC 將參數(shù)設(shè)置為 1 ;第 4 條消息 MySQL 返回查詢結(jié)果;第 5 條和第 6 條消息表示第二次執(zhí)行同樣的 SQL,已經(jīng)無需再次預(yù)編譯了。

再回到 ShardingProxy,如果需要支持預(yù)編譯功能,交互流程肯定是需要變的,因為 Proxy 在收到 JDBC 的PreparedStatement 命令時,SQL 里的分片鍵是問號,它根本不知道該路由到哪個真實數(shù)據(jù)庫。

因此,流程變成了下面這樣:

可以看到,Proxy在收到 PreparedStatement 命令后,并不會把這條消息轉(zhuǎn)發(fā)給MySQL,只是緩存了這個 SQL,在收到 ExecuteStatement 命令后,才根據(jù)分片鍵和傳過來的參數(shù)值確定真實的數(shù)據(jù)庫,并與 MySQL 交互。

?

?03?問題分析?

上一章節(jié)基本把這個 Bug 相關(guān)的原理知識介紹清楚了,下面正式進(jìn)入問題的分析過程。

最開始拿到這個問題,我也是比較頭禿的,尤其看到讀者下面這段信息。

當(dāng)然,我的功力是達(dá)不到盲猜水平的,說下我的完整思路。

?第 1 步??復(fù)現(xiàn)問題

我讓讀者給我打包發(fā)了 Demo 的源代碼、數(shù)據(jù)庫腳本以及 ShardingProxy 配置,然后本地安裝了 ShardingProxy 4.1.1 版本,再通過 Navicat 連接到 ShardingProxy 執(zhí)行數(shù)據(jù)庫腳本,環(huán)境基本就準(zhǔn)備完畢了。

啟動 Demo 程序后,通過 Postman 發(fā)送請求,問題穩(wěn)定復(fù)現(xiàn)了,確實查不出數(shù)據(jù)。

?第 2 步?確認(rèn)應(yīng)用程序是否有BUG

因為整個代碼很簡單,代碼層面唯一有可能存在問題的是 Mybatis 這一層。為了確認(rèn)這一點,我修改了 SpringBoot 的配置,將 MyBatis 的 debug 日志也打印了出來。再次發(fā)起請求后,能從控制臺中看到以下詳細(xì)日志:

日志中沒發(fā)現(xiàn)異常,而且 PreparedStatement 以及 ExecuteStatement 的參數(shù)設(shè)置都是正確的,查詢結(jié)果確實是空。

為了縮小排查范圍,我把 dataSource 的 配置改回了直連真實數(shù)據(jù)庫,這樣能將 ShardingProxy 這個干擾因素排除在外。改完后的 url 如下:

jdbc:mysql://127.0.0.1:3306/db1?useServerPrepStmts=true&cachePrepStmts=true&serverTimezone=UTC

其中,db1 是真實數(shù)據(jù)庫,3306 也是MySQL 服務(wù)器的端口了。然后再次用 Postman 發(fā)送請求,可以看到:有正確數(shù)據(jù)返回了。

通過這一步,我將懷疑對象再次轉(zhuǎn)移到 ShardingProxy 上了,并將 dataSource 配置改回成原樣,繼續(xù)排查。

第 3?步 排查 ShardingProxy

首先,查看 ShardingProxy 的運行日志,沒發(fā)現(xiàn)任何異常;其次,能看到日志中的 Actual SQL 是正確的,它已經(jīng)根據(jù)分區(qū)鍵正確路由到了??pcsct_prdt_cvr0??這張表:

[INFO?]?17:25:48.804?[ShardingSphere-Command-15]?
ShardingSphere-SQL?-?Actual?SQL:?ds_0?:::?SELECT
BIZ_DT,ECIF_CUST_NO,DEP_FLG?...
FROM?pscst_prdt_cvr0
WHERE?ECIF_CUST_NO?=???:::?[10000]

因此可以推斷:ShardingProxy 的分庫分表配置應(yīng)該是沒有問題的。

我開始懷疑:是否跟 ShardingProxy 所使用的數(shù)據(jù)庫驅(qū)動有關(guān)?因為這個 Jar 包是應(yīng)用方選擇版本,手動放到 ShardingProxy 安裝目錄中的。因此,我將驅(qū)動版本從 5.1.47 版本改成了 8.0.13 (和 Demo 使用了相同的版本),但是問題仍然存在。

另外,還能想到的是:是否是 ShardingProxy 的這個最新版本引入了 Bug?然后,我又另外安裝了它的上一個版本 4.1.0,重新測試了一遍,還是有問題。

這個時候,真感覺沒有其他可疑點了,所有能想到的點都排查了一遍。我再次回到了 Demo 程序本身,它和 ShardingProxy 唯一的結(jié)合點就在 DataSource 的 url 上。

jdbc:mysql://127.0.0.1:3307/sharding_db?useServerPrepStmts=true&cachePrepStmts=true&serverTimezone=UTC

庫名和端口號配置無誤,唯一可疑的是另外三個參數(shù):?useServerPrepStmtscachePrepStmts?、serverTimezone。其中,前兩個參數(shù)和預(yù)編譯 SQL 有關(guān),是一個組合。

因此,我將這兩個參數(shù)從 url 中去掉,測試了一下。這個時候奇跡出現(xiàn)了,居然返回了正確數(shù)據(jù)。至此,基本定位到了問題,但根本原因是什么呢?究竟是不是 ShardingProxy 的 Bug ?

第 4?步 Wireshark 抓包分析 MySQL 協(xié)議

找到這個問題的解決方案后,我同步給了讀者。與此同時,他也在 ShardingProxy ?的 GitHub 上提交了 issue,反饋了這個最新進(jìn)展。

由于工作原因,這個問題我就暫時放一邊了,準(zhǔn)備抽空再接著排查。

大概過了一周我想起了這個問題,然后打開 issue 想了解下調(diào)查進(jìn)度,讓我非常驚訝的是:官方開發(fā)者居然在復(fù)現(xiàn)此問題后,主觀臆斷地認(rèn)為是應(yīng)用程序的問題,然后莫名奇妙的把這個 issue 關(guān)閉了,他們的答復(fù)是這樣的:

意思就是:我們針對預(yù)編譯 SQL 功能做了大量的測試,這個是不可能存在問題的,建議你們更換下應(yīng)用程序的數(shù)據(jù)庫連接池,抓包繼續(xù)分析下。(這個說法真讓人非常無語,完全不是程序員嚴(yán)謹(jǐn)?shù)乃季S!)

第二天,我開始用 Wireshark 抓包分析 MySQL 的協(xié)議,想弄清楚根本原因到底是什么?同時聯(lián)系上了官方,讓他們 reopen 了這個問題。

Wireshark 如何抓取 MySQL 協(xié)議的數(shù)據(jù)包,這里就不展開了,大家可以網(wǎng)上查下資料。注意將 Wireshark 的過濾條件設(shè)置成:

mysql || tcp.port==3307

其中:mysql 表示 ShardingProxy 和 MySQL Server 之間的數(shù)據(jù)包,tcp.port==3307 表示 Demo 程序和 ShardingProxy 之間的數(shù)據(jù)包。

啟動 Wireshark 抓包后,再次用 Postman 發(fā)起請求,觸發(fā)整個過程,然后就能順利抓到下面截圖的數(shù)據(jù)包了。

大家關(guān)注底色為 深藍(lán)色 的 8 個數(shù)據(jù)包即可。在本文第 2 章節(jié)的原理部分,我已經(jīng)詳細(xì)介紹過?ShardingProxy?的預(yù)編譯功能以及該流程的 MySQL 協(xié)議消息,這里的 8 個數(shù)據(jù)包和原理介紹是完成吻合的。

那接下來如何進(jìn)一步分析呢?結(jié)合 ShardingProxy 的架構(gòu)圖來思考下:Proxy 僅僅作為一個中間代理,介于應(yīng)用程序和 MySQL Server 之間,它完全實現(xiàn)了 MySQL 協(xié)議,以便對 MySQL 命令進(jìn)行解碼和編碼,然后加上自己的分庫分表邏輯。

如果 ShardingProxy 內(nèi)部存在 Bug,那一定是某個數(shù)據(jù)包出現(xiàn)了問題。順著這個思路,很快就能發(fā)現(xiàn):執(zhí)行完 ExecuteStatement 后,MySQL Server 返回正確數(shù)據(jù)包給 Proxy 了,但是 Proxy 沒有返回正確的數(shù)據(jù)包給應(yīng)用程序

下面截圖的是倒數(shù)第 2 個 Response 數(shù)據(jù)包,由 MySQL Server 返回給 Proxy 的,Payload 中能看到那條記錄的數(shù)據(jù):

下面截圖的是最后 1 個 Response 數(shù)據(jù)包,由 Proxy 返回給應(yīng)用程序的,Payload 中只能看到表字段的定義,那條記錄已經(jīng)不翼而飛了。

通過這一步分析,就已經(jīng)坐實了:ShardingProxy 是有 Bug 的。然后,我將這些依據(jù)發(fā)給了官方開發(fā)者,對方開始重視,并正式進(jìn)入源碼分析階段。

?

?04?根本原因定位?

當(dāng)天晚上,官方開發(fā)者就定位到了根本原因,發(fā)出了 Pull Request。我看了下代碼改動,僅僅修改了一行代碼。

改動的這行代碼,就是在 ShardingProxy 再次組裝數(shù)據(jù)包返回給應(yīng)用程序時拋出來的。

由于我們的數(shù)據(jù)表中存在一個 date 類型的字段,改動的這行代碼卻強(qiáng)制將 date 類型轉(zhuǎn)換成了 Timestamp 類型,因此拋出了異常。還有幾個疑點,我結(jié)合對源代碼的理解逐一解答下。

1、為什么代碼拋異常了,但是 ShardingProxy 的控制臺沒打印呢?

上面截圖的是:拋出 ClassCastException 那個方法的整個調(diào)用鏈。由于 ShardingProxy 并沒有捕獲這個 RuntimeException 以及打印日志,最終這個異常被 netty 吞掉了。

2、為什么 ShardingProxy 需要做 date 到 Timestamp 的類型轉(zhuǎn)換呢?

可以從 ShardingProxy 的架構(gòu)來理解,因為 Proxy 只有對 MySQL 協(xié)議進(jìn)行編解碼后,才能在中間插入它的分庫分表邏輯。

針對 date 類型的字段,ShardingProxy 通過 JDBC 的 API 從查詢結(jié)果中拿到的仍然是 Date 類型,之所以要轉(zhuǎn)換成 Timestamp,這個又跟 MySQL 的協(xié)議有關(guān)了,下面是 MySQL 官方文檔的說明:

簡單理解就是:ShardingProxy 在代碼實現(xiàn)時,用了一個范圍最大的 timestamp 存了三種可能的值 date, datetime 和 timestamp,然后再按照上面這個協(xié)議規(guī)范進(jìn)行二進(jìn)制的寫入。

3、這個 Bug 是只有在使用 SQL 預(yù)編譯功能時才會被觸發(fā)嗎?

是的,只有在處理 ExecuteStatement 命令時,這個方法才會被調(diào)用到。那普通的 SQL 查詢場景為什么用不到呢?

這個又跟 MySQL 協(xié)議有關(guān)了,普通的 SQL 查詢場景,payload 不是二進(jìn)制協(xié)議的,而是普通的文本協(xié)議。這種情況下,無需調(diào)用這個類進(jìn)行轉(zhuǎn)換。

至此,整個分析過程就結(jié)束了。

?

?05?寫在最后?

本文詳細(xì)復(fù)盤了這個 Bug 的分析過程,并對其中的原理知識和排查經(jīng)驗進(jìn)行了總結(jié)。

對于 ShardingSphere 這種頂級開源項目來說,我個人覺得同樣值得做一次深度復(fù)盤。我不認(rèn)同他們對于 issue 的處理方式,另外在核心功能的自動化測試上,也一定是存在 case 不完善的,不然不可能連續(xù)多個版本都沒發(fā)現(xiàn)這個嚴(yán)重 Bug。

如果你有任何疑問,歡迎評論區(qū)留言討論。


有道無術(shù),術(shù)可成;有術(shù)無道,止于術(shù)

歡迎大家關(guān)注Java之道公眾號


好文章,我在看??

瀏覽 37
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 www.99热视频| 国产一卡二卡在线观看| 国产九九九视频| 一区无码视频| 久久久国产视频| 亚洲青青草| 99一区| 色中色av| 精品成人Av一区二区三区| 欧美mv日韩mv国产网站| 99热欧美| 无码狠狠躁久久久久久久91| 少妇婷婷| 99久久精品国产成人一区二区| 西西www444无码大胆| 成人在线视频免费观看| 人人操夜夜操| 一区二区三区四区视频在线| 黄色永久网站| 久久亚洲AV成人无码国产野外| 欧美精品xxx| 人人干人人看| 91偷拍视频| 国产成人一级片| 在线免费看黄网站| 国产一区二区视频在线| 精品国产一二三区| 成人A片在线播放| 青草福利视频| 久久五月天婷婷| 东京热三区| 西西人体44www大胆无码| 丰满熟妇高潮呻吟无码| 精品无码一区二区三区四区五区| 欧美亚洲国产精品| 欧美怡春院| 99热伊人| a网站在线观看| 影音先锋av资源网站| 亚洲国产欧美日韩在线| chinese高潮老女人| 刘玥精品A片在线观看| gogogo高清在线完整免费播放韩国 | 水蜜桃视频网站| 国产一二三视频| 亚洲三级黄色| 国产h在线| 无码人妻精品一区二区蜜桃漫画| 亚洲AV无码成人片在线| 黄色免费视频网站| 午夜免费AV| 男女精品一区| 无码一区精品久久久成人| 久久系列| 无码专区视频| 天天日夜夜艹| 黄色AV网| 亚洲一区二区精品| 国产精品污www在线观看| A级片网站| 北条麻妃99精品青青久久| 欧美色图视频在线观看| 美女中文字幕| 亚洲va欧美va天堂v国产综合| 无码任你躁久久久久| 黄片免费大全| 少妇大战28厘米黑人| 豆花视频成人网站入口免费观看| 亚洲网站视频| 琪琪色在线观看| 青青国产在线| 欧美午夜无码| 一级午夜| 丁香激情五月少妇| 呦小性Free小U女HD| 新超碰97| 日本中文字幕在线观看视频| 9无码| 免费高清无码在线| 久久青草影院| 做aAAAAA免费视频| 日本少妇高清视频| 狠狠色一区| np高辣调教视频| 国产精品自拍视频| 伊人中文字幕| 性爱无码| 97在线观看视频| 精品免费国产一区二区三区四区的使用方法| 你懂的在线播放| 国产肏逼视频| 福利导航网| 九九性爱视频| 青娱乐无码| 欧美熟妇精品黑人巨大一二三区 | 大香蕉综合伊人| 亚洲天堂在线观看视频网站| 午夜老湿机| 久久露脸国语精品国产91| 91人体视频| 波多野结衣vs黑人巨大| 11孩岁女精品A片BBB| 抠骚逼| 精品国产免费观看久久久_久久天天 | 免费看操逼视频| 韩日在线| 免费成人黄色| 久久久久久国产| 青青青在线视频| 99久久综合| 久久9热| 大香蕉网址| 中文字幕欧美日韩| 国产一级婬女AAAA片季秀英| 久久成人123| 操逼三级视频| 成人免费区一区二区三区| 亚洲av不卡| 亚洲黄色天堂| 91麻豆天美传媒在线| 国产免看一级a一片成人aⅴ| 久久黄色成人视频| 97香蕉久久夜色精品国产| 夜色精品视频| 久久亚洲一区| 日韩成人无码全裸视频| 亚洲成人三区| 欧美色图另类图片| 日韩操片| 操逼三级| 成人黄色视频免费| AV网站免费观看| 国产一级a毛一级a毛观看视频网站| 琪琪色在线观看| 十八禁在线播放| 91探花国产综合在线精品| 国产成人精品无码免费| 国产久久久久久| 无码视频免费| h片在线观看免费| 日韩在线三级片| 综合影院| 97人人爱| 国产乱码一区二区三区四区在线| 久久成人网站| 怡红院男人天堂| 中文字幕无码在线视频| 青春草在线观看| 日韩码线观看视频| 成人黄色网址| 美女裸体网站国产| 精品国产精品三级精品AV网址| 97资源在线视频| 午夜乱伦福利| 亚洲成人视频在线免费观看| 91网在线| 久久午夜视频| 香蕉成人A片视频| 中文字幕日韩精品人妻| 日本a一级片| 120分钟婬片免费看| 久久久久亚洲AV无码专区成人| 久久午夜无码人妻精品蜜桃冫| 激情综合视频| 操逼视频网址| 久久精品国产99精品国产亚洲性色| 大色网小色网| 91日韩| 国产高清AV| а√在线中文网新版地址在线| 国产精品黄视频| 少妇厨房愉情理伦BD在线观| 久久熟女| 日韩黄片免费看| 国产色在线| 电影91久久久| 午夜艹| 国产理论视频在线观看| 老熟女搡BBBB搡BBBB视频| 午夜免费无码| 3d动漫精品H区XXXXX区| 黄色小视频在线免费观看| 韩日在线| 黑人AV七| 先锋资源男人站| 日本国产在线视频| A黄色视频| 青娱乐自拍偷拍| 2025国产精品| 亚洲中文字幕av| 成人h网站在线观看| 黄色免费视频网站| 一区二区三区电影网| 草久网| 国产精品6| 性爱免费视频| 樱桃码一区二区三区| 精品成人网| a久久| AV网站免费看| 黄色成人网站在线免费观看| 亚洲国产高清在线观看视频 | 51午夜| 久操综合| 无码国产传媒精品一区| A级视频免费观看| 五月天综合视频| 91露脸熟女四川熟女在线观看| 一本道高清无码视频| 亚洲免费观看| 91宗合| 学生妹内射| 麻豆亚洲AV成人无码久久精品 | 国产成人秘在线观看免费网站| 不卡无线在一区| 国产最新视频| 黄色一区二区三区| 免费+无码+精品| 特级西西人体444www高清| 国产成人精品av| 五月伊人网| 亚卅毛片| 日韩精品视频免费| 五月丁香婷婷激情| www.yw尤物| 免费高清无码| 午夜成人无码视频| a免费在线观看| 无码AV一区二区| 日韩无码中文字幕| 中文色片| 天天日天天摸| 日逼综合网| 大香蕉av一区二区三区在线观看 | 99色在线视频| 91久操| 人人操人人色| 一级a黄色片| www.人人摸| 久久嫩草精品久久久久| adn日韩av| 欧美老女人的逼| 91大香蕉视频| 水果派解说在线观看| 亚洲高清无码久久| 99在线观看免费| 熟睡侵犯の奶水授乳在线| 亚洲69| 欧美操逼免费视频| 啊啊啊啊啊在线观看| 青春草在线观看国产| 久久人体| 一级乱伦网站| 91av免费在线观看| 国产精品秘久久久久久99| 狠狠狠久久久| 老太老熟女城中层露脸60| 97精品在线视频| 强开小嫩苞一区二区三区视频| 91av在线免费播放| 激情人妻av| 五月综合激情| 成人蜜臀AV| 69视频在线播放| 嫩草在线视频| 日韩成人无| 欧美熟妇高潮流白浆| 日本三级中文字幕| 成人视频在线观看18| 深爱五月天| 天天操网址| 操逼网站视频| 成人视频毛片| 日韩精品一区二区三区黄冈站长| 激情五月天网站| 夜夜嗨AV一区二区三区啊| 牛牛精品一区| 高清国产av| 国产成人毛片18女人18精品| 久久久精品欧美| 学生妹一级J人片内射视频| 69午夜| 亚洲精品国产成人AV在线| 亚洲综合一区二区| 国产精品啪啪啪| 7799精品视频天天看| 日韩五码| 这里视频很精彩免费观看电视剧最新 | 国产在线欧美| 特级A级毛片| 亚洲黄色电影在线观看| 五月天无码免费视频| 欧美午夜精品成人片在线播放 | 日韩无码影视| 日韩Av无码一区二区三区不卡| 日韩熟妇人妻中文字幕| 精品成人一区二区三区| 日韩中文字幕| 亚洲制服中文字幕| 好吊看视频| 中文无码熟妇一区二区| 欧美亚洲成人视频| GOGO人体做爰大胆视频| 制服丝袜一区| 日韩性爱视频在线观看| 久久99精品国产麻豆婷婷洗澡| 老师搡BBBB搡BBB| 日本AV在线播放| 成人日韩精品| 国产精品粉嫩福利在线| 国产又爽又黄免费视频免费观看| 人人干人人操人人| 日逼综合网| 强开小嫩苞毛片一二三区| 在线观看的av网站| 91亚洲视频| 久久精品苍井空免费一区| 成人爽a毛片一区二区免费 | 乱伦内射视频| 精品A片| 水果派解说AV无码一区| 麻豆亚洲AV成人无码久久精品| 国产午夜男女性爱| 少妇av| 亚洲高清视频在线| 日韩一区二区视频在线观看| 亚洲中文娱乐| 三上悠亚一区二区| 国产97在线观看| 欧美乱伦视频| 国产酒店自拍| www.91爱爱,com| 亚洲区在线播放| 91精品导航| 国产三级片视频在线观看| 韩日AV| 亚洲美眉综合网| 九九视频网| 久久久网站| 精品人妻一区二区三区蜜桃| AA片免费网站| 一级乱伦网站| 国产精品成人无码a无码| 日韩AV性爱| 国产经典午夜福利视频合集| 操逼片| 中文字幕日韩亚洲| 久久婷婷视频| 久久久成人精品| 久久久9999| 天天干天天干天天操| 最新无码视频| 亚洲中文AV在线| 蜜桃传媒一区二区亚洲| 9l视频自拍蝌蚪9l视频成人| 日老女人的逼| 亚洲精品一区二区三区四区高清| 九九碰九九爱97超碰| 国产在线成人视频| 午夜九九九| 日韩无码人妻一区二区三区 | 少妇精品久久久久久久久久| 黄色视频网站在线| 精品国产区一区二| 黄色视频网站在线| jizz免费在线观看| 国产av福利| 大鸡巴久久久久久| 亚洲免费无码视频| 天天日人人| 国产黄色免费| 久久精品久| 亚洲欧美中文字幕| 久久综合久| 91青青草| 国产区一区| 精品人妻一区二区三区四区不卡在| 人妻AV无码| 国精产品一区一区三区四区| 青青操久久| 黄色电影免费网站| www.日韩无码| 亚洲欧美精品AAAAAA片| 亚洲AV无码成人精品区大猫| 性欧美V| 国产乱子伦视频国产印度| 国产精品久久免费视频| 亚洲人妻无码在线| 成人一级黄色电影| 加勒比色综合| 免费一区视频| 777在线视频| 亚洲最新无码| 搡BBB搡BBBB搡BBBB-百度| 成人在线毛片| 91无码国产| AV色片| 炮友五月天| 无码视频观看| 日本成人一区二区三区| 欧美一级日韩一级| 夜夜撸日日| 久久国产黄色一级片| 日本91| 欧美男人天堂网| 国产成人AV在线播放| 怡红院成人在线| 中文字幕1区| 毛片日韩| 91视频网站| 香蕉AV777XXX色综合一区| 国产欧美欧洲| 黑人人妻黑人ThePorn| 精品国产999久久久免费| 国产激情精品| 性爱免费视频网站| 少妇在线观看| 国产不卡在线观看| 中文字幕在线欧美| 三级精品| 激情无码在线观看| 亚洲激情在线| 欧美日韩精品一区| 青青操人人操| 国产成人AV网站| 日本黄色A片免费看| 91香蕉视频在线| 高清无码二区| 中字幕视频在线永久在线观看免费 | 欧美AAAAAAAA| 欧美伊人网| 天码人妻一区二区三区在线看| WWW.豆花视频精品| 大鸡巴操骚逼视频| 91理伦| 九色PORNY国产成人蝌蚪| 亚洲40p| 久草a视频| 国产女人18毛片水真多18精品| 大香蕉综合网站| 亚洲口味重一级黄片| 国产无码中文字幕| 九九九九九九精品视频| 日本在线| 91视频网站在线| 天天搞搞| 久久久久久久国产精品| 国产一级a毛一级a毛视频在线网站? | 久久精品一区二区三区蜜芽的特点| 亚洲色a| 精品视频在线播放| 九九久久99| 9久精品| 51成人网站| 欧美a区| 久久久久国产精品视频| 毛片一区二区三区| 欧美三级网站在线观看| 精品色片| jizz在线观看视频| 一区在线免费观看| 国产久久精品视频| 嫩草亚洲小泬久久夂| 特黄AAAAAAAA片免费直播 | 国产成人电影免费在线观看| 国产亚洲Av| 一边做一边说国语对白| 蜜挑视频一区二区三区| 免费无人区一码二码乱码怎么办 | 久草成人| 欧美性爱xxxx| 少妇搡BBBB搡BBB搡18禁| 久热大香蕉| 国产真实露脸乱子伦对白高清视频| 国产无码午夜| 无码乱伦| 中文无码日韩欧美久久| 在线国产激情| 午夜精品18视频国产17c| 免费在线看a| 婷婷五月天影视| 欧美插插插| 四虎精品影院| 国产精品AV在线观看| 精品国产免费无码久久噜噜噜AV| 亚洲在线免费| 亚洲秘无码一区二区三区蜜桃中文| aV一区二区三区| 骚白虎一区| 五月婷婷丁香综合| 成人亚洲欧美| 午夜成人免费视频| 少妇激情av| 成人av影院| 日韩一级a片| 中文字幕精品人妻| 色婷婷综合视频| 成人在线乱码视频| 人人妻人人爽人人澡人人精品 | 操逼综合网| 国精产品一品二品国精| 国产视频高清无码| 欧美高清久久| 免费无码国产在线53| 影音先锋成人片| 精品丰满人妻一区二区三区免费观| 91操美女视频| 亚洲免费性爱视频| 天堂AV在线免费观看| 激情视频在线播放| 天天搞天天曰在线观看| 亚洲三级片在线视频| 91AV在线电影| 操B国产| 亚洲精品一区无码A片丁香花| 国产精品片| 免费国产A片| 国产欧美综合三级伦| 欧美日韩视频一区二区三区| 国产无码激情| 天堂AV在线免费观看| 中文字幕精品一级A片| 日韩欧美日本| 四虎在线观看| 欧美图片小说| 韩国三级HD久久精品| 黄片网址在线观看| 日本三级网站| 日本黄网站| 午夜啊啊啊| 性爱视频99| 337P大胆粉嫩噜噜噜| 女毛片| 国产一级a毛一级a毛观看视频网站| 99精品国自产在线| 成人三级视频在线| 不迷路福利视频| 成人电影91| 一道本无码一区| 日韩欧美国产综合| 亚洲性爱大全| 女同二人91| 三级网站免费| 操操网| 久久久久极品| 久久A级片| 丁香五月激情中文字幕| 天天综合91| A视频在线免费观看| 亚洲AV永久无码成人| 亚洲一二三四区| 亚洲人妻免费视频| 91人人澡| 亚洲区视频| 欧美一区二区三区免费| 97精品人妻一区二区三区香蕉| 国产无码久久久| 成人免费毛片视频| 9I成人免费版| 大香蕉手机在线视频| 97人妻精品一区二区三区图片 | 一区二区三区免费在线| 日批动态图| 日本高清免费视频| 败火老熟女ThePorn视频| 成人无码在线播放| 中文字幕在线不卡| 久操成人| 中文字幕高清无码在线| 你懂的在线免费观看| www黄片视频| 日欧美美女逼| 欧美黄色一级视频| 四川少妇BBBB槡BBBB槡| 你操综合| A片国产| 天堂国产一区二区三区| 国产免看一级a一片成人aⅴ| 2019中文字幕在线免费观看| 亚洲最大黄色| 国产区av| A在线| 色婷婷五月天在线观看| 九色PORNY国产成人| 天堂网资源| 国产热视频| 欧美footjob高跟脚交| 国产精品无码在线观看| 天天爽视频| 中国黄色大片| 国产操逼电影| 97AV在线| 国产真实乱婬A片久久久老牛| 理论毛片| 麻豆91精品91久久久停运原因| 三级免费无限AV| 免费a在线| av无码网站| www.91n| 色婷婷AV一区二区三区之e本道| 小明看台湾成人永久免费视频网站 | 久久久久一区| 99精品国自产在线| 国产精品1区2区3区| 国产波霸爆乳一区二区| 日韩不卡免费| 狠狠爱av| 一纹A片免费观看| 大香蕉国产精品| 首页-91n| 久久综合五月| 黑人一级| 欧美亚洲中文| 波多野结衣无码高清视频| 俺也去网站| 成人婷婷五月天| 中文字幕av网| 欧美第一视频| 五月丁香成人电影| 欧美一级无码| 成人国产| 婷婷爱要操| 免费18蜜桃久久19| 日韩三级电影| 亚洲一区二区无码| 黄色片网站在线观看| 乌克兰毛片| 老熟女-ThePorn| 蜜桃av秘无码一区二区三欧| A片视频免费观看| 国产传媒_色哟哟| www.豆花视频成人版| 日本一本草久p| 亚洲五区| 免费伊人大香蕉| 青青草在线观看视频| 中文资源在线a| jzzijzzij亚洲成熟少妇在线观看| 91人人妻人人做人人爽| 天天干天天色天天射| 青娱乐亚洲精品视频| 国产精品久久久久久久久久二区三区 | 波多野结衣一级婬片A片免费下载 囯产精品久久久久久久久免费无码 | 婷婷毛片| 中文无码在线观看中文字幕av中文| 无码砖区| 97人妻精品一区二区三区免| 国产精品人妻无码久久久郑州天气网 | 大香蕉天天操| 国产老骚逼| 性爱小说视频| 91亚洲免费视频| 欧美精品乱码99久久蜜桃| 亚洲理论| 日韩免费成人视频| 亚洲日韩一级| 中文字幕成人影片| 五月丁香六月激情综合| 无码国产精品一区二区视频| 免费成人视频在线观看| WWW.99热| 日韩在线第—页| 爆操欧美| 大炕上公让我高潮了六次| 韩国一区二区三区| 黄色视频免费国产| 日韩人妻精品中文字幕专区不卡| 二区不卡| 懂色AV一区二区三区国产中文在线 | 三级片在线观看网站| 欧美专区一区| 丁香婷婷久久久综合精品国产| 99久久婷婷国产综合精品青牛牛| 国产综合色婷婷精品久久| 人妻av一区二区三区| 成人蜜臀AV| 久草中文在线视频| 国内精品人妻无码久久久影院蜜桃| 日韩干网| 四虎亚洲无码| 九久久| 黄色A片免费| 一级片黄片| 四虎日韩| AV2014天堂网| 国产一级A| 中文无码一区二区三区| 午夜成人网站| 国产在线中文| 日韩欧美亚洲| 日韩成人无码视频| 操操操操操| 日韩a| 一级A片免费黄色视频| 久久久久久97电影院电影院无码 | 日韩久久电影| 99热都是精品| 人妻骚逼| 天天插天天干| 99久久九九| 成人视频18| 老妇性BBWBBWBBWBBW | 国产高清秘成人久久| 韩国日本久久| 人人妻人人操人人爱| 久久久久少妇| 国产成人久久777777| 亚洲黄色视频在线观看网站| xxxxxbbbbb| 日本有码在线| 国产色呦呦| 免费无码婬片AAAA片直播| 亚洲欧美性爱视频| 三级网站免费| 欧美爱爱网| 免费一级无码婬片A片AAA毛片| 11孩岁女精品A片BBB| 444444在线观看免费高清电视剧木瓜一 | 91熟女乱伦| 99Re66精品免费视频| 午夜激情五月天| 日韩一级免费毛片| 日本一区二区在线| 人人妻人人爱| 一级A片视频免费看| 国产精品系列视频| 日韩熟妇人妻中文字幕| 国产乱╳╳AⅤ毛片| 日日搔av一区二区三区| 婷婷深爱五月| 人妻久久久| 成人无码一区二区| 99欧美| 狼人伊人综合| 西西4444www大胆无吗| 91豆花在线| 国产综合区| 人妻丝袜无码视频专区| 亚洲中文字幕一| 欧美丰满少妇人妻精品| 欧美一级爱爱| 人人操人人干97| 西西444WWW无码大胆在线观看| 在线播放一区二区三区| 日韩色情在线| 日韩性做爰免费A片AA片| 91av在线免费观看| 亚洲第一福利视频| 专业操美女视频网站| 99AV| 免费观看亚洲视频| 九九A片| 99这里有精品视频| 婷婷av在线| 成人网站在线| 亚洲色婷婷久久精品AV蜜桃| 欧美日韩肏屄视频| 内射老熟女| 成年人免费视频网站| 色色视频网站| 国产亚洲AV| 91天天综合在线| 久久AV无码| 91AV电影网| 国产精品欧美精品| 超碰成人免费| 蜜桃av.38| 日韩黄色视频在线观看| 狼友视频免费在线观看| 国产操逼的视频| 色婷婷色五月| 操操操操操| 五月无码视频| 成年人激情网| 日韩美女免费视频| 九色PORNY蝌蚪视频| 嫩BBB搡BBB搡BBB搡| 亚州毛多色色精品| 无码男女| 亚洲精品一区二区三区无码电影 | 夜夜嗨AV一区二区三区啊| 久久久黄色电影| 欧美日韩激情视频| 亚洲无码视频免费在线观看| 国产免费一区二区三区| 国产精品无码激情视频| 红桃91人妻爽人妻爽| 噜噜噜色| 正在播放国产精品| 午夜操一操| 天天操夜夜操视频免费高清| 伊人久久精品| 国产无遮挡又黄又爽| 亚洲天堂2017| 一欧美日韩免费/看| 欧美日韩免费在线视频| 在线视频你懂| 四lll少妇BBBB槡BBBB| 老熟女视频| 亚洲东方在线| yjizz视频网| 激情五月天视频| 91精品视频在线播放| 亚洲日韩在线播放| 亚洲色综合网| 日韩专区在线观看| 爱搞搞就要搞搞| 亚洲无线观看| 国产卡一卡二在线观看| 黄片网址大全| 欧美日韩国产精品成人| 久久av一区二区三区| 五月丁香六月久久| 高清无码在线免费视频| 人人爱天天做| 人妻视频在线| 99re视频精品| 新BBWBBWBBWBBW| 色网站在线观看| 天天爽天天干| 成人国产AV网站| 日韩四区| 中文字幕2018第一页| 亚洲成人黄色| 炮友五月天| 国产av网站大全| 欧一美一婬一伦一区二区三区黑人| 亚洲免费在线视频| 亚洲国产精品成人综合色在线婷婷 | 国产a片免费观看| 国产三级三级三级| 777777视频| 久久久久久久三级片| 国产avwww| 中文字幕观看在线| 亚洲精品成人无码| 婷婷V亚洲V丁香月天V日韩V| 可以在线观看的AV| 99久久精品国产一区色| 无码伦理电影| 91天天看| 亚洲第一免费视频| 蜜桃在线视频| 黄色视频在线观看| 国产小视频在线播放| caobi视频| 欧美色图亚洲另类| 水果派解说av| 高清无码免费观看| 亚洲日韩免费在线观看| 夜夜嗨Av禁果Av粉嫩AV懂色Av| 久久久成人免费电影| 亚洲色吧| 无码一区二区区| 国产AV日韩AV| 成人久久久| 草比网站| 欧美黄片一区| 亚洲在线免费| 韩国成人免费无码免费视频| 午夜福利视频91| 天天干视频| 国产精品2025| 黄色在线免费观看网站| 亚洲国产一区二区三区| 免费无遮挡视频网站视频| 西西人体44www大胆无码| 深爱五月婷婷| 日韩欧美中文在线观看| 久久久精品欧美| 成人免费视频18| 人人干人| 97亚洲综合| 91工厂露脸熟女| 亚洲无码你懂的| 国产视频一区二区在线观看| 激情五月婷婷| 亚洲操屄| 久久不射| 欧美黄片免费看| 黑人在线视频| www.亚洲精品| 中文字幕免费久久| 欧美操逼在线观看| 国产精品综合激情| 欧美一级夜夜爽| 影音先锋国产在线| 久久99精品视频| 日韩v欧美v日本v亚洲v国产v| 肏屄一区| 国产在线观看免费视频| 日本少妇BBw| 一区视频在线| 日韩经典视频在线播放| 亚洲第一成人网址| 操逼网站免费观看| 亚洲AV综合色区无码国产播放 | 久操网在线| 免费看A| 国产精品久久免费视频|