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

電商庫存系統的防超賣和高并發扣減方案

安全 應用安全
首先 MCube 會依據模板緩存狀態判斷是否需要網絡獲取最新模板,當獲取到模板后進行模板加載,加載階段會將產物轉換為視圖樹的結構,轉換完成后將通過表達式引擎解析表達式并取得正確的值,通過事件解析引擎解析用戶自定義事件并完成事件的綁定,完成解析賦值以及事件綁定后進行視圖的渲染,最終將目標頁面展示到屏幕。

如果你要開發一個電商庫存系統,最擔心的是什么?閉上眼睛想下,當然是高并發和防超賣了!本文給出一個統籌考慮如何高并發和防超賣數據準確性的方案。讀者可以直接借鑒本設計,或在此基礎上做出更切合使用場景的設計。

背景

在今年的敏捷團隊建設中,我通過Suite執行器實現了一鍵自動化單元測試。Juint除了Suite執行器還有哪些執行器呢?由此我的Runner探索之旅開始了!

下面用電商庫存為示例,來說明如何高并發扣減庫存,原理同樣適用于其他需要并發寫和數據一致性的場景。

1.1 庫存數量模型示例

為了描述方便,下面使用簡化的庫存數量模型,真實場景中庫存數據項會比以下示例多很多,但已經夠說明原理。如下表,庫存數量表(stockNum)包含商品標識和庫存數量兩個字段,庫存數量代表有多少貨可以賣。

7a3b7364562f43959581fc5148915cc7.png

傳統通過數據庫保證不超賣

庫存管理的傳統方案為了保證不超賣,都是使用數據庫的事務來保證的:通過Sql判斷剩余的庫存數夠用,多個并發執行update語句只有一個能執行成功;為了保證扣減不重復,會配合一個防重表來防止重復的提交,做到冪等性,防重表示例(antiRe)設計如下:

95da90e550b94fa4b36733384a33e834.png

比如一個下單過程的扣減過程示例如下:

事務開始
Insert into antiRe(code) value (‘訂單號+Sku’)
Update stockNum set num=num-下單數量 where skuId=商品ID and num-下單數量>0
事務結束

面臨系統流量越來越大,數據庫的性能瓶頸就會暴露出來:就算分庫分表也是沒用的,促銷的時候高并發都是針對少量商品的,最終并發流量會打向少數表,只能去提升單分片的抗量能力,所以接下來設計一種使用Redis緩存做庫存扣減的方案。

Redis緩存做庫存扣減的方案

理解,首先 MCube 會依據模板緩存狀態判斷是否需要網絡獲取最新模板,當獲取到模板后進行模板加載,加載階段會將產物轉換為視圖樹的結構,轉換完成后將通過表達式引擎解析表達式并取得正確的值,通過事件解析引擎解析用戶自定義事件并完成事件的綁定,完成解析賦值以及事件綁定后進行視圖的渲染,最終將目標頁面展示到屏幕。

2.1 綜合使用數據庫和Redis滿足高并發扣減的原理

扣減庫存其實包含兩個過程:第一步是超賣校驗,第二步是扣減數據的持久化;在傳統數據庫扣減中,兩步是一起完成的。抗寫的實現原理其實是巧妙的利用了分離的思想,分離開防超賣和數據持久化;首先防超賣是由Redis來完成的;通過Redis防超賣后,只要落庫就可以;落庫通過任務引擎,業務數據庫使用商品分庫分表,任務引擎任務通過單據號分庫分表,熱點商品的落庫會被狀態機分散開,消除熱點。

整體架構如下:

c2badfdee15c42729328fa4f49b60de5.png

第一關解決超賣檢驗:可以把數據放入Redis中,每次扣減庫存,都對Redis中的數據進行incryby 扣減,如果返回的數量大于0,說明庫存夠,因為Redis是單線程,可以信任返回結果。第一關是Redis,可以抗高并發,性能Ok。超賣校驗通過后,進入第二關。

第二關解決庫存扣減:經過第一關后,第二關不需要再判斷數量是否足夠,只需要傻瓜扣減庫存就行,對數據庫執行如下語句,當然還是需要處理防重冪等的,不需要判斷數量是否大于0了,扣減SQL只要如下寫就可以。

事務開始
Insert into antiRe(code) value (‘訂單號+Sku’)
Update stockNum set num=num-下單數量 where skuId=商品ID
事務結束

要點:最終還是要使用數據庫,熱點怎么解決的呢?任務庫使用訂單號進行分庫分表,這樣針對同一個商品的不同訂單會散列在任務庫的不同庫存,雖然還是數據庫抗量,但已經消除了數據庫熱點。

整體交互序列圖如下:

520ad6910a8e49078016bf3de3b6c92e.png

2.2 熱點防刷

但Redis也是有瓶頸的,如果出現過熱SKU就會打向Redis單片,會造成單片性能抖動。庫存防刷有個前提是不能卡單的。可以定制設計JVM內毫秒級時間窗的限流,限流的目的是保護Redis,盡可能的不限流。限流的極端情況就是商品本來應該在一秒內賣完,但實際花了兩秒,正常并不會發生延遲銷售,之所以選擇JVM是因為如果采用遠端集中緩存限流,還未來得及收集數據就已經把Redis打死。

實現方案可以通過guava之類的框架,每10ms一個時間窗,每個時間窗進行計數,單臺服務器超過計數進行限流。比如10ms超過2個就限流,那么一秒一臺服務器就是200個,50臺服務器一秒就可以賣出1萬個貨,自己根據實際情況調整閾值就可以。

34ed1c84ea36442ba93388fa2bd51ecd.png

2.3 Redis扣減原理

Redis的incrby 命令可以用做庫存扣減,扣減項可能多個,使用Hash結構的hincrby命令,先用Reids原生命令模擬整個過程,為了簡化模型下面將演示一個數據項的操作,多個數據項原理完全等同。

127.0.0.1:6379> hset iphone inStock 1 #設置蘋果手機有一個可售庫存
(integer) 1
127.0.0.1:6379> hget iphone inStock #查看蘋果手機可售庫存為1
"1"
127.0.0.1:6379> hincrby iphone inStock -1 #賣出扣減一個,返回剩余0,下單成功
(integer) 0
127.0.0.1:6379> hget iphone inStock #驗證剩余0
"0"
127.0.0.1:6379> hincrby iphone inStock -1 #應用并發超賣但Redis單線程返回剩余-1,下單失敗
(integer) -1
127.0.0.1:6379> hincrby iphone inStock 1 #識別-1,回滾庫存加一,剩余0
(integer) 0
127.0.0.1:6379> hget iphone inStock #庫存恢復正常
"0"

2.3.1 扣減的冪等性保證

如果應用調用Redis扣減后,不知道是否成功,可以針對批量扣減命令增加一個防重碼,對防重碼執行setnx命令,當發生異常的時候,可以根據防重碼是否存在來決定是否扣減成功,針對批量命名可以使用pipeline提高成功率。

// 初始化庫存
127.0.0.1:6379> hset iphone inStock 1 #設置蘋果手機有一個可售庫存
(integer) 1
127.0.0.1:6379> hget iphone inStock #查看蘋果手機可售庫存為1
"1"
// 應用線程一扣減庫存,訂單號a100,jedis開啟pipeline
127.0.0.1:6379> set a100_iphone
"1"
NX EX 10 #通過訂單號和商品防重碼
OK
127.0.0.1:6379> hincrby iphone inStock -1 #賣出扣減一個,返回剩余0,下單成功
(integer) 0
//結束pipeline,執行結果OK和0會一起返回

防止并發扣減后校驗:為了防止并發扣減,需要對Redis的hincrby命令返回值是否為負數,來判斷是否發生高并發超賣,如果扣減后的結果為負數,需要反向執行hincrby,把數據進行加回。

如果調用中發生網絡抖動,調用Redis超時,應用不知道操作結果,可以通過get命令來查看防重碼是否存在來判斷是否扣減成功。

127.0.0.1:6379> get a100_iphone   #扣減成功
"1"
127.0.0.1:6379> get a100_iphone #扣減失敗
(nil)

2.3.2 單向保證

在很多場景中,因為沒有使用事務,你很難做到不超賣,并且不少賣,所以在極端情況下,可以選擇不超賣,但有可能少賣。當然還是應該盡量保證數據準確,不超賣,也不少賣;不能完全保證的前提下,選擇不超賣單向保證,也要通過手段來盡可能減少少賣的概率。

比如如果扣減Redis過程中,命令編排是先設置防重碼,再執行扣減命令失敗;如果執行過程網絡抖動可能放重碼成功,而扣減失敗,重試的時候就會認為已經成功,造成超賣,所以上面的命令順序是錯誤的,正確寫法應該是:

如果是扣減庫存,順序為:1.扣減庫存 2.寫入放重碼。

如果是回滾庫存,順序為:1.寫入放重碼 2.扣減庫存。

2.4 為什么使用Pipeline

在上面命令中,使用了Redis的Pipeline,來看下Pipeline的原理。

非pipeline模式

request-->執行-->responserequest-->執行-->response

pipeline模式

request-->執行 server將響應結果隊列化request-->執行 server將響應結果隊列化-->response-->response

使用Pipeline,能盡量保證多條命令返回結果的完整性,讀者可以考慮使用Redis事務來代替Pipeline,實際項目中,個人有過Pipeline的成功抗量經驗,并沒有使用Redis事務,正常情況下事務比pipeline慢一些,所以沒有采用。

Redis事務

1)mutil:開啟事務,此后的所有操作將被添加到當前鏈接事務的“操作隊列”中

2)exec:提交事務

3)discard:取消隊列執行

4)watch:如果watch的key被修改,觸發dicard。

2.5 通過任務引擎實現數據庫的最終一致性

前面通過任務引擎來保證數據一定持久化數據庫,「任務引擎」的設計如下,把任務調度抽象為業務無關的框架。「任務引擎」可以支持簡單的流程編排,并保證至少成功一次。「任務引擎」也可以作為狀態機的引擎出現,支持狀態機的調度,所以「任務引擎」也可以稱為「狀態機引擎」,在此文是同一個概念。

任務引擎設計核心原理:先把任務落庫,通過數據庫事務保證子任務拆分和父任務完成的事務一致性。

任務庫分庫分表:任務庫使用分庫分表,可以支撐水平擴展,通過設計分庫字段和業務庫字段不同,無數據熱點。

2.5.1 任務引擎的核心處理流程

c6b6f0a9606c421e9a38954a3046f979.png

第一步:同步調用提交任務,先把任務持久化到數據庫,狀態為「鎖定處理」,保證這件事一定得到處理。

注:原來的最初版本,任務落庫是待處理,然后由掃描Worker進行掃描,為了防止并發重復處理,掃描后進行單個任務鎖定,鎖定成功再進行處理。后來優化為落庫任務直接標識狀態為「鎖定處理」,是為了性能考慮,省去重新掃描再搶占任務,在進程內直接通過線程異步處理。

鎖定Sql參考:

UPDATE 任務表_分表號 SET 狀態 = 100,modifyTime = now() WHERE id = #{id} AND 狀態 = 0

第二步:異步線程調用外部處理過程,調用外部處理完成后,接收返回子任務列表。通過數據庫事務把父任務狀態設置為已經完成,子任務落庫。并把子任務加入線程池。

要點:保證子任務生成和父任務完成的事務性

第三步:子任務調度執行,并重新把新子任務落庫,如果沒有子任務返回,則整個流程結束。

異常處理Worker

異常解鎖Worker來把長時間未處理完成的任務解鎖,防止因為服務器重啟,或線程池滿造成的任務一直鎖定無服務器執行。

補漏Worker防止服務器重啟造成的線程池任務未執行完成,補漏程序重新鎖定,觸發執行。

任務狀態轉換過程

8fe29b6356b54237ae9c6334e15b1327.png

2.5.2 任務引擎數據庫設計

任務表數據庫結構設計示例(僅做示例使用,真實使用需要完善)

6bd8c5ab7a0d40f780b76b8045a6ac70.png

任務引擎數據庫容災

任務庫使用分庫分表,當一個庫宕機,可以把路由到宕機庫的流量重新散列到其他存活庫中,可以手工配置,或通過系統監控來自動化容災。如下圖,當任務庫2宕機后,可以通過修改配置,把任務庫2流量路由到任務庫1和3。補漏引擎繼續掃描任務庫2是因為當任務庫2通過主從容災恢復后,任務庫2宕機時未來的及處理的任務可以得到補充處理。

1d011519a7f64db494206a470c917c3c.jpeg

任務引擎調度舉例

比如用戶購買了兩個手機和一個電腦,手機和電腦分散在兩個數據庫,通過任務引擎先持久化任務,然后驅動拆分為兩個子任務,并最終保證兩個子任務一定成功,實現數據的最終一致性。整個執行過程的任務編排如下:

47a4827efa46423fac2cf60db56e3675.jpeg

圖7 任務引擎調度舉例

任務引擎交互流程

4bf94db94b5f4be6a09c6399a35e8ab0.png

圖8 任務引擎交互流程

總結

理解,首先 MCube 會依據模板緩存狀態判斷是否需要網絡獲取最新模板,當獲取到模板后進行模板加載,加載階段會將產物轉換為視圖樹的結構,轉換完成后將通過表達式引擎解析表達式并取得正確的值,通過事件解析引擎解析用戶自定義事件并完成事件的綁定,完成解析賦值以及事件綁定后進行視圖的渲染,最終將目標頁面展示到屏幕。

差異對比-異構數據的終極解決方案

只要有異構,一定會有差異的,為了保證差異的影響可控,終極方案還是要靠差異對比來解決。本文篇幅所限,不再展開,后續再單獨成文。DB和Redis差異對比的大概過程為:接收庫存變化消息,不斷跟進對比Redis和DB的數據是否一致,如果連續穩定不一致,則進行數據修復,用DB數據來修改Redis的數據。

常見問題答疑

問:第一步超賣校驗Redis內存扣減,第二步扣減數據的持久化,中間斷了怎么辦?(例:服務重啟)

答:如果是服務重啟,會在服務器重啟之前停止這臺服務器的服務;但此方案并不能保證數據的絕對一致,比如扣減redis后,應用服務器故障直接死機,這種情況下的處理就需要更復雜的方案才能保證實時一致(目前沒有采取更復雜方案),可以通過另一個方案使用庫存數據和用戶的訂單數據進行數據比對修復,達到最終一致性。

責任編輯:武曉燕 來源: FreeBuf.COM
相關推薦

2024-09-10 10:42:27

2025-08-14 09:47:44

2024-07-12 11:28:44

2025-03-11 08:36:52

高并發場景性能

2021-08-26 08:24:33

高并發秒殺系統

2025-08-29 16:24:37

2025-02-26 08:10:40

2021-06-09 18:52:05

方案設計庫存數

2024-03-11 15:13:22

數據庫高并發

2025-07-08 02:25:00

2017-06-16 16:16:36

庫存扣減查詢

2025-06-27 02:00:00

Spring高并發庫存

2025-10-28 03:00:00

并發場景數據庫

2024-07-25 09:05:35

2025-04-14 00:00:00

數據庫分布式架構分布式鎖?

2024-06-20 07:59:49

2025-03-10 09:20:00

庫存異常Redis架構
點贊
收藏

51CTO技術棧公眾號

久久噜噜色综合一区二区| wwwjizzjizzcom| 中文字幕一区二区人妻| 91成人免费| 亚洲第一中文字幕在线观看| 精品久久久久av| 成人三级网址| 国产色婷婷亚洲99精品小说| 3d动漫啪啪精品一区二区免费| 国产性xxxx高清| 天堂美国久久| 亚洲精品在线91| 欧美污在线观看| 伊人久久国产| 一区二区三区在线视频免费观看| 欧美一区二区在线视频观看| 性欧美18一19性猛交| 日韩不卡手机在线v区| 久久琪琪电影院| www.黄色com| 免费一区二区| 欧美精品一区二| 91亚洲一区二区| 国产第一亚洲| 91福利国产成人精品照片| xxxx18hd亚洲hd捆绑| bt在线麻豆视频| 中文字幕成人av| 蜜桃久久影院| 头脑特工队2免费完整版在线观看 头脑特工队2在线播放 | 性久久久久久| 国内精品一区二区三区| 亚洲精品电影院| 欧美日韩中字| 亚洲视频在线视频| aa片在线观看视频在线播放| 国产乱人伦丫前精品视频| 日韩一区二区麻豆国产| 999在线精品视频| 日韩成人综合网| 精品视频一区三区九区| 午夜激情福利在线| 欧美亚洲大片| 欧美在线观看视频在线| 日韩 欧美 高清| 日韩三区免费| 欧美色网一区二区| 五月天激情视频在线观看| 深夜视频一区二区| 欧美日韩一级大片网址| 香港日本韩国三级网站| jizz久久久久久| 欧美日韩国产中文| 国产一级免费大片| 精品国产一区二区三区2021| 日韩一区二区视频| 伊人av在线播放| 日韩视频一区二区三区四区| 欧美成人艳星乳罩| 无码av免费精品一区二区三区| 一区二区在线免费播放| 亚洲第一男人av| 五十路六十路七十路熟婆| 欧亚精品一区| 欧美精品一区二区高清在线观看| 好吊色视频一区二区三区| 精品精品国产毛片在线看| 亚洲精品成人久久| 欧美性猛交xxxx乱| 亚洲成av人电影| 午夜精品久久久久久久久久久久久 | 一级片视频免费观看| 国产日本亚洲| 精品99一区二区三区| 人体私拍套图hdxxxx| 免费视频亚洲| 久久天天躁狠狠躁夜夜av| 九九热精彩视频| 国产一区二区三区久久久久久久久| 77777亚洲午夜久久多人| 免费黄色片视频| 国产一区中文字幕| 国产亚洲情侣一区二区无| 韩国三级在线观看久| 亚洲视频每日更新| 午夜免费福利小电影| 成人全视频在线观看在线播放高清| 在线播放欧美女士性生活| yjizz视频| 欧美gvvideo网站| 久久久久久久久久久91| 欧美亚洲另类小说| 国产高清成人在线| 人禽交欧美网站免费| www国产在线观看| 日韩欧美aaa| 少妇愉情理伦片bd| 首页亚洲中字| 欧美成在线观看| 欧美特级黄色片| 国产·精品毛片| 午夜精品一区二区三区四区| 国内小视频在线看| 欧美另类一区二区三区| 亚洲调教欧美在线| 中文字幕日韩欧美精品高清在线| 日韩av不卡在线| www.天堂av.com| 国产精品国产自产拍高清av王其| 国产成人在线免费看| 日本免费成人| 亚洲午夜色婷婷在线| 欧美日韩大片在线观看| 麻豆精品久久精品色综合| 精品视频一区二区| 国产视频一区二区| 欧美性大战久久久久久久| 一本色道久久hezyo无码| 天天做天天爱天天综合网2021| 欧洲亚洲在线视频| 国产精品精品一区二区三区午夜版| 丰满少妇被猛烈进入一区二区| 丝袜诱惑制服诱惑色一区在线观看| 91在线精品观看| 黄色免费在线网站| 欧美日韩电影一区| 欧洲一区二区在线| 日韩av一二三区| 精品午夜久久福利影院| 久久亚洲高清| 国产高潮在线| 欧美xxxxxxxxx| 天海翼在线视频| 亚洲动漫在线观看| 国产喷水福利在线视频| 999亚洲国产精| 亚洲jizzjizz日本少妇| 第三区美女视频在线| 精品福利一区二区| 蜜臀av粉嫩av懂色av| 欧美精品三级| 91视频99| 亚洲www色| 欧美高清一级片在线| 国产极品一区二区| 午夜性色一区二区三区免费视频 | 欧美三根一起进三p| 日本不卡高清视频| 欧美日韩综合精品| 丝袜美腿一区| 国产小视频国产精品| 无码视频一区二区三区| 国产色综合一区| 色国产在线视频| 久久免费av| 国产精品久久久久久久久借妻 | 欧美一区 二区| 国产91|九色| 国内精品在线视频| 欧美欧美欧美欧美首页| 很污很黄的网站| 国产成人免费视| 日韩av在线第一页| 狠狠色狠狠色综合婷婷tag| 国产精品久久久久秋霞鲁丝 | 国产免费中文字幕| 中文字幕免费精品| 久久国产精品 国产精品| 美女搞黄视频在线观看| 欧美精品一区二区久久婷婷| 国产性猛交╳xxx乱大交| 久久毛片高清国产| 中文字幕国产免费| 狠狠入ady亚洲精品经典电影| 亚洲专区国产精品| 国产直播在线| 中文字幕日韩综合av| 国产剧情精品在线| 天天色图综合网| 亚洲欧美卡通动漫| 不卡的看片网站| 性chinese极品按摩| 欧美区一区二| 日本一区二区在线| 亚洲乱码一区| 国产精品无av码在线观看| 污影院在线观看| 亚洲色在线视频| 午夜精品久久久久久久99热黄桃| 欧美性猛交xxxx免费看久久久| 欧美日韩国产一二三区| 风流少妇一区二区| 一区二区三区入口| 国产精品地址| 亚洲午夜精品久久久久久浪潮| aiai久久| 国产日韩欧美成人| 婷婷电影在线观看| 麻豆国产精品va在线观看不卡| 久久久久久久无码| 色婷婷成人网| 91高清视频在线免费观看| 成人av毛片| 亚洲第一福利在线观看| 这里只有精品9| 偷拍与自拍一区| 老熟妇高潮一区二区三区| 91免费在线视频观看| 交换做爰国语对白| 日韩av不卡一区二区| 国产成人高潮免费观看精品| 米奇777四色精品人人爽| 日韩高清a**址| 国产福利视频导航| 在线观看欧美日本| 97免费在线观看视频| 亚洲精品国产第一综合99久久 | 欧美xxxx×黑人性爽| 精品一区二区免费在线观看| 欧美久久一区二区| 波多野结衣不卡视频| 亚洲国产激情av| 插吧插吧综合网| 成人精品视频网站| 91精品国产高清91久久久久久 | 亚洲福利专区| 日韩精品福利片午夜免费观看| 日产精品一区二区| 日日骚一区二区网站| 亚洲图片久久| 在线观看亚洲专区| 欧美变态另类刺激| 亚洲精品视频啊美女在线直播| 亚洲成人动漫在线| 亚洲深深色噜噜狠狠爱网站| 一级做a爰片久久| 日韩aaaa| 中文一区一区三区免费| 欧美a级片视频| 自拍另类欧美| 中文视频一区| 男人天堂手机在线视频| 亚洲片区在线| 日日鲁鲁鲁夜夜爽爽狠狠视频97| 亚洲永久在线| 久久久久久久久久久久久国产精品| 国产精品毛片| www.日日操| 日本人妖一区二区| 日本中文字幕精品—区二区| 极品少妇xxxx偷拍精品少妇| 欧美成人乱码一二三四区免费| 久久99精品久久久久久| 久久精品无码一区二区三区毛片| 国产成人av一区| 精品一区二区视频在线观看| 91在线小视频| 欧美极品jizzhd欧美18| 亚洲婷婷综合色高清在线| 波多野结衣家庭教师| 一区二区日韩av| 日韩精品一卡二卡| 色婷婷国产精品综合在线观看| 亚洲无码精品一区二区三区| 欧美视频一区二区三区四区 | 日本在线天堂| 日韩中文字幕视频| 永久免费网站在线| 91sa在线看| 99久久久国产精品免费调教网站| 国产日产久久高清欧美一区| 日本99精品| 麻豆成人在线播放| 日韩精品一区二区三区免费观影 | 蜜桃视频网站在线观看| 久久久久久久久网站| 老司机2019福利精品视频导航| 国产精品国产三级国产aⅴ浪潮| 99久久精品一区二区成人| 91九色对白| 台湾佬综合网| 一区国产精品| 999亚洲国产精| 国产无遮挡猛进猛出免费软件 | 欧美群妇大交群中文字幕| 亚洲精品字幕在线观看| 亚洲欧美在线x视频| 久久99精品久久| 欧美在线视频免费| 国产欧美88| 欧美在线激情| 国产一区视频在线观看免费| caopor在线视频| 国产一区二区在线观看视频| 三级电影在线看| 一区二区三区四区在线| 国产一区免费看| 精品国产乱码久久久久久蜜臀| 九色在线观看| 欧美激情欧美狂野欧美精品| 欧美日韩在线精品一区二区三区激情综合| av日韩免费电影| 久久神马影院| 国产日韩一区二区在线| 91av久久| 国产精品99久久久久久久久| av日韩精品| 中国成人亚色综合网站| 久久人人超碰| 国产麻豆剧传媒精品国产| 国产精品麻豆久久久| 久久精品国产成人av| 日韩欧美高清dvd碟片| 99青草视频在线播放视| 国产91对白在线播放| 欧洲大片精品免费永久看nba| 日韩性感在线| 久久婷婷影院| 欧美大片免费播放器| 亚洲一区二区三区四区不卡| 一区二区三区精彩视频| 亚洲色图13p| 综合另类专区| 久久久久久九九| 亚洲国产免费看| 亚洲麻豆一区二区三区| 一区二区高清视频在线观看| 国产精品高潮呻吟久久久| 最近2019中文免费高清视频观看www99 | 国产日韩中文字幕| 成人午夜av| av在线无限看| 国产日产亚洲精品系列| 4438国产精品一区二区| 亚洲精品电影网站| 98色花堂精品视频在线观看| yellow视频在线观看一区二区| 亚洲人成免费网站| 中文字幕av一区二区三区人妻少妇| 中文字幕在线观看不卡视频| 欧美激情一区二区三区免费观看| 亚洲天堂免费观看| 在线一区视频观看| 亚洲精品国产一区| 捆绑变态av一区二区三区| 欧美另类z0zx974| 欧美午夜精品伦理| 亚州精品国产精品乱码不99按摩| 欧美性受xxx| 国产伦精品一区二区三区千人斩 | 日韩中文字幕无砖| 精品久久久无码人妻字幂| 国产传媒欧美日韩成人| 久久久久久久久久久网 | 99精彩视频| 午夜精品亚洲| 亚洲激情 欧美| 日韩欧美aⅴ综合网站发布| 国产三级在线看| 国产日韩欧美日韩大片| 高h放荡受浪受bl| 在线观看国产欧美| 色婷婷成人网| www.avtt| 国产亚洲制服色| 国产一区二区在线视频观看| 久久艹在线视频| 加勒比色综合久久久久久久久| 无码人妻丰满熟妇区毛片| 国产欧美va欧美不卡在线 | 精品国产欧美一区二区| 亚洲色图官网| 中国人体摄影一区二区三区| 国产成人免费视频一区| 国产免费av一区| 麻豆成人在线看| 一个色免费成人影院| 国产无色aaa| 亚洲国产日韩在线一区模特 | 好吊妞国产欧美日韩免费观看网站| 波多野结衣家庭教师在线播放| 国产精品入口麻豆原神| 亚洲欧美高清视频| 国产成人亚洲综合91精品| 亚洲精品a级片| 爱爱的免费视频| 日韩一区二区视频在线观看| 天堂8中文在线最新版在线| a级黄色片网站| 久久综合丝袜日本网| 国产视频手机在线观看| 日韩av不卡电影| 激情综合中文娱乐网| 精品日韩在线视频| 亚洲成人免费在线视频| 久久女人天堂| 凹凸国产熟女精品视频| 亚洲天堂网中文字| 国产在线91| 国产一区福利视频|