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

電商真實對賬系統(tǒng)是如何設(shè)計并優(yōu)化的

開發(fā) 前端
查詢未對賬訂單 getPOrders()? 和查詢派送單 getDOrders() 是否能夠并行處理呢?很顯然,這兩個操作之間并沒有依賴關(guān)系。將這兩個耗時操作并行化后,與單線程執(zhí)行相比,您會發(fā)現(xiàn)在相同時間段內(nèi),并行執(zhí)行的吞吐量接近單線程的兩倍,優(yōu)化效果頗為明顯。

前言

往期文章在熱點數(shù)據(jù)如何更新的一篇文章中有提到對賬系統(tǒng)。其實我在實際業(yè)務(wù)場景中是有遇到過類似對賬的優(yōu)化問題的。說優(yōu)化之前要掌握一點就是一定要掌握J(rèn)ava并發(fā)包的相關(guān)特性。本章節(jié)對此有很大依賴。

  • 熱點數(shù)據(jù)高效更新文章:

inventory hint,解決熱點數(shù)據(jù)如何高效更新

Java并發(fā)包簡說

CountDownLatch和CyclicBarrier

區(qū)別

CountDownLatch:

  • 不可以重復(fù)使用,計數(shù)器無法被重置

經(jīng)典案例比如門衛(wèi)休息休要等所有人下班才可以關(guān)門休息 CyclicBarrier:

  • 可以重復(fù)使用,是一個同步輔助類,允許一組線程相互等待,直到到達某個公共屏障點(common barrier point)。假設(shè)設(shè)計一組固定大小的線程的程序中,這些線程必須不是的互相等待,此時就可以使用CyclicBarrier。因為該barrier在釋放等待線程后可以重用,從而稱之為循環(huán)的barrier。

經(jīng)典案例:比如運動員跑步,需要所有人準(zhǔn)備好之后裁判才可以發(fā)令讓大家在同一時刻去跑。有依賴關(guān)系

案例

有一天,老大匆忙趕來,提到對賬系統(tǒng)最近變得越來越緩慢,希望能迅速進行優(yōu)化。經(jīng)過了解對賬系統(tǒng)的業(yè)務(wù)流程,發(fā)現(xiàn)其實相當(dāng)簡單:用戶通過在線商城下單會生成電子訂單并存儲在訂單數(shù)據(jù)庫中;隨后物流會生成派送單用于發(fā)貨,派送單則保存在派送單庫中。為了避免漏發(fā)或重復(fù)派送,對賬系統(tǒng)每天會核查是否存在異常訂單。

目前對賬系統(tǒng)的處理邏輯很簡單:首先查詢訂單,然后查詢派送單,接著比對訂單和派送單,將差異記錄寫入差異庫。對賬系統(tǒng)的核心代碼經(jīng)過抽象后,也并不復(fù)雜,主要是在單線程中循環(huán)執(zhí)行訂單和派送單的查詢,進行對賬操作,最后將結(jié)果寫入差異庫。

偽代碼

while(存在未對賬訂單){
  // 查詢未對賬訂單
  pos = getPOrders();
  // 查詢派送單
  dos = getDOrders();
  // 執(zhí)行對賬操作
  diff = check(pos, dos);
  // 差異寫入差異庫
  save(diff);
}

利用Java并行優(yōu)化對賬系統(tǒng)

首先要找出對賬系統(tǒng)的瓶頸所在。目前,由于訂單量和派送單量龐大,導(dǎo)致查詢未對賬訂單 getPOrders() 和查詢派送單 getDOrders() 的速度較慢。是否有一種快速優(yōu)化的方法呢?目前對賬系統(tǒng)是單線程執(zhí)行的。對于這樣的串行系統(tǒng),優(yōu)化性能的第一個想法是能否利用多線程并行處理。

因此,我們可以看出對賬系統(tǒng)的瓶頸在哪里:查詢未對賬訂單 getPOrders() 和查詢派送單 getDOrders() 是否能夠并行處理呢?很顯然,這兩個操作之間并沒有依賴關(guān)系。將這兩個耗時操作并行化后,與單線程執(zhí)行相比,您會發(fā)現(xiàn)在相同時間段內(nèi),并行執(zhí)行的吞吐量接近單線程的兩倍,優(yōu)化效果頗為明顯。

有了這個思路,接下來我們看看如何用代碼實現(xiàn)。在下面的代碼中,我們創(chuàng)建了兩個線程 T1 和 T2,分別并行執(zhí)行查詢未對賬訂單 getPOrders() 和查詢派送單 getDOrders() 的操作。主線程則負(fù)責(zé)執(zhí)行對賬操作 check()和將差異寫入 save() 的操作。值得注意的是:主線程需要等待線程 T1 和 T2 執(zhí)行完畢后才能執(zhí)行 check() 和 save() 這兩個操作。為此,我們通過調(diào)用 T1.join() 和 T2.join() 實現(xiàn)等待,當(dāng)線程 T1 和 T2 結(jié)束時,調(diào)用了 T1.join() 和 T2.join() 的主線程將從阻塞狀態(tài)中解除,隨后執(zhí)行后續(xù)的 check() 和 save() 操作。

偽代碼

while(存在未對賬訂單){
  // 查詢未對賬訂單
  Thread T1 = new Thread(()->{
    pos = getPOrders();
  });
  T1.start();
  // 查詢派送單
  Thread T2 = new Thread(()->{
    dos = getDOrders();
  });
  T2.start();
  // 等待 T1、T2 結(jié)束
  T1.join();
  T2.join();
  // 執(zhí)行對賬操作
  diff = check(pos, dos);
  // 差異寫入差異庫
  save(diff);
}

用 CountDownLatch 實現(xiàn)線程等待

經(jīng)過上述優(yōu)化,基本上可以向老板報告工作完成了,但仍有一些遺憾之處。我相信您也已經(jīng)注意到了,在 while 循環(huán)中每次都會創(chuàng)建新的線程,而創(chuàng)建線程是一個耗時的操作。因此,最好能夠重復(fù)利用已創(chuàng)建的線程。您想到了線程池,確實,線程池能夠解決這個問題。

通過線程池進行優(yōu)化后:我們首先創(chuàng)建了一個固定大小為2的線程池,并在 while 循環(huán)中重復(fù)利用這些線程。一切看起來都進行得很順利,但似乎有一個問題無法解決,即主線程如何知道 getPOrders() 和 getDOrders() 這兩個操作何時執(zhí)行完成。在前面的方案中,主線程通過調(diào)用線程 T1 和 T2 的 join() 方法來等待它們退出,但是在線程池方案中,線程根本就不會退出,因此 join() 方法失效了。

那么,如何解決這個問題呢?您可以想出許多方法,其中最直接的方法是使用一個計數(shù)器。將其初始值設(shè)為2,執(zhí)行完 pos = getPOrders(); 后減 1,執(zhí)行完 dos = getDOrders(); 后也減 1。主線程在這之后等待計數(shù)器等于0;當(dāng)計數(shù)器等于0時,說明這兩個查詢操作已執(zhí)行完畢。等待計數(shù)器為0實際上是一種條件變量,使用管程實現(xiàn)起來也并不復(fù)雜。

然而,我并不建議在實際項目中實施上述方案,因為Java并發(fā)包中已經(jīng)提供了類似功能的工具類:CountDownLatch,我們直接使用即可。在下面的代碼示例中,我們在 while 循環(huán)中首先創(chuàng)建了一個CountDownLatch,計數(shù)器的初始值為2。在 pos = getPOrders(); 和 dos = getDOrders(); 兩個語句后,通過調(diào)用 latch.countDown(); 實現(xiàn)對計數(shù)器的減1操作。在主線程中,通過調(diào)用 latch.await(); 實現(xiàn)對計數(shù)器等于0的等待。

偽代碼

// 創(chuàng)建 2 個線程的線程池
Executor executor = 
  Executors.newFixedThreadPool(2);
while(存在未對賬訂單){
  // 計數(shù)器初始化為 2
  CountDownLatch latch = 
    new CountDownLatch(2);
  // 查詢未對賬訂單
  executor.execute(()-> {
    pos = getPOrders();
    latch.countDown();
  });
  // 查詢派送單
  executor.execute(()-> {
    dos = getDOrders();
    latch.countDown();
  });
  
  // 等待兩個查詢操作結(jié)束
  latch.await();
  
  // 執(zhí)行對賬操作
  diff = check(pos, dos);
  // 差異寫入差異庫
  save(diff);
}

進一步優(yōu)化性能

經(jīng)過以上一系列的優(yōu)化,終于可以松一口氣,準(zhǔn)備交付項目。然而,在交付之前,再次審視一番是值得的,或許還存在優(yōu)化的空間。

前面我們已經(jīng)實現(xiàn)了將 getPOrders() 和 getDOrders() 這兩個查詢操作并行化,但是這兩個查詢操作與對賬操作 check() 和 save() 之間仍然是串行執(zhí)行的。很顯然,這兩個查詢操作與對賬操作也可以并行執(zhí)行,即在執(zhí)行對賬操作的同時可以進行下一輪的查詢操作。

接下來,我們再思考如何實現(xiàn)這一優(yōu)化。兩次查詢操作能夠與對賬操作并行執(zhí)行,而對賬操作又依賴于查詢操作的結(jié)果,這明顯具有生產(chǎn)者-消費者模型的特征。兩次查詢操作充當(dāng)生產(chǎn)者,對賬操作為消費者。為了實現(xiàn)這種模型,我們需要一個隊列來存儲生產(chǎn)者產(chǎn)生的數(shù)據(jù),消費者則從隊列中取出數(shù)據(jù)執(zhí)行相應(yīng)操作。

針對這個對賬項目,我設(shè)計了兩個隊列,其元素之間存在對應(yīng)關(guān)系。具體來說,訂單查詢操作將訂單查詢結(jié)果插入訂單隊列,派送單查詢操作將派送單插入派送單隊列,這兩個隊列的元素之間是一一對應(yīng)的。使用兩個隊列的好處在于,對賬操作可以每次從訂單隊列取出一個元素和派送單隊列中取出一個元素,然后執(zhí)行對賬操作,確保數(shù)據(jù)的一致性。

接下來,讓我們看看如何通過雙隊列實現(xiàn)完全并行化。一個直接的思路是:一個線程 T1 執(zhí)行訂單查詢工作,另一個線程 T2 執(zhí)行派送單查詢工作。當(dāng)線程 T1 和 T2 都各自生產(chǎn)完一條數(shù)據(jù)時,通知線程 T3 執(zhí)行對賬操作。這一想法看似簡單,實際上仍然存在一個條件:T1 和 T2 的工作節(jié)奏必須一致,保持同步,否則一個快一個慢將影響各自生產(chǎn)數(shù)據(jù)并通知 T3 的過程。

只有在T1和T2各自生產(chǎn)完一條數(shù)據(jù)時才能繼續(xù)執(zhí)行,也就是說,T1和T2需要相互等待,保持步調(diào)一致。同時,當(dāng)T1和T2都生產(chǎn)完一條數(shù)據(jù)時,還需能夠通知T3執(zhí)行對賬操作。

用 CyclicBarrier 實現(xiàn)線程同步

接下來我們將實現(xiàn)上述方案中提到的方法。該方案的難點在于兩個方面:一是確保線程 T1 和 T2 的步調(diào)一致,二是能夠有效通知線程 T3。

在解決這兩個難點的過程中,仍然可以利用一個計數(shù)器。將計數(shù)器初始化為2,每當(dāng)線程 T1 和 T2 生產(chǎn)完一條數(shù)據(jù)時,都將計數(shù)器減1。若計數(shù)器大于0,則線程 T1 或 T2需要等待。當(dāng)計數(shù)器等于0時,通知線程 T3,喚醒等待的線程 T1 或 T2,并將計數(shù)器重置為2。如此,線程 T1 和 T2 在生產(chǎn)下一條數(shù)據(jù)時,可以繼續(xù)使用這個計數(shù)器。

建議不要在實際項目中直接實現(xiàn)這一邏輯,因為Java并發(fā)包中已經(jīng)提供了相關(guān)的工具類:CyclicBarrier。在下面的代碼中,我們首先創(chuàng)建了一個初始值為2的CyclicBarrier計數(shù)器。需要注意的是,在創(chuàng)建CyclicBarrier時,傳入了一個回調(diào)函數(shù)。當(dāng)計數(shù)器減至0時,該回調(diào)函數(shù)會被調(diào)用。

線程 T1 負(fù)責(zé)查詢訂單,每查到一條數(shù)據(jù),調(diào)用barrier.await()將計數(shù)器減1,并等待計數(shù)器變?yōu)?。線程 T2  負(fù)責(zé)查詢派送單,處理方式與線程 T1 類似。當(dāng) T1 和 T2 都調(diào)用barrier.await()時,計數(shù)器會減至0,此時 T1 和 T2可以繼續(xù)執(zhí)行下一步操作,并調(diào)用barrier的回調(diào)函數(shù)執(zhí)行對賬操作。

值得一提的是,CyclicBarrier的計數(shù)器具有自動重置功能。當(dāng)計數(shù)器減至0時,會自動重新設(shè)定為您設(shè)置的初始值。這一特性確實方便實用。

偽代碼

// 訂單隊列
Vector<P> pos;
// 派送單隊列
Vector<D> dos;
// 執(zhí)行回調(diào)的線程池 
Executor executor = 
  Executors.newFixedThreadPool(1);
final CyclicBarrier barrier =
  new CyclicBarrier(2, ()->{
    executor.execute(()->check());
  });
  
void check(){
  P p = pos.remove(0);
  D d = dos.remove(0);
  // 執(zhí)行對賬操作
  diff = check(p, d);
  // 差異寫入差異庫
  save(diff);
}
  
void checkAll(){
  // 循環(huán)查詢訂單庫
  Thread T1 = new Thread(()->{
    while(存在未對賬訂單){
      // 查詢訂單庫
      pos.add(getPOrders());
      // 等待
      barrier.await();
    }
  });
  T1.start();  
  // 循環(huán)查詢運單庫
  Thread T2 = new Thread(()->{
    while(存在未對賬訂單){
      // 查詢運單庫
      dos.add(getDOrders());
      // 等待
      barrier.await();
    }
  });
  T2.start();
}

CountDownLatch 和 CyclicBarrier 是Java并發(fā)包提供的兩個非常便捷的線程同步工具類。在這里,有必要再次強調(diào)它們之間的區(qū)別:CountDownLatch 主要用于解決一個線程等待多個線程的情況,可以類比于旅游團團長必須等待所有游客齊集后才能繼續(xù)前行;而CyclicBarrier 則是一組線程相互等待,有點像幾個驢友之間的互助合作。此外,CountDownLatch 的計數(shù)器不支持重復(fù)利用,即一旦計數(shù)器降至0,后續(xù)調(diào)用await()的線程將直接通過。相比之下,CyclicBarrier 的計數(shù)器可以循環(huán)利用,同時具有自動重置功能,一旦計數(shù)器減至0,將會自動重置為設(shè)定的初始值。此外,CyclicBarrier 還支持設(shè)置回調(diào)函數(shù),功能更加豐富。

責(zé)任編輯:武曉燕 來源: 碼上遇見你
相關(guān)推薦

2017-02-17 13:54:01

支付系統(tǒng)處理設(shè)計

2019-12-05 16:13:25

雙十一互聯(lián)網(wǎng)消費電商

2015-11-10 18:37:59

Taste?Analy

2011-11-21 10:45:08

亞馬遜

2016-02-19 10:16:48

母嬰個推電商

2014-03-19 13:35:22

電商app設(shè)計

2013-10-31 11:19:19

戴爾服務(wù)電子商務(wù)轉(zhuǎn)型

2012-10-18 10:27:19

網(wǎng)站優(yōu)化

2025-08-14 09:47:44

2024-07-12 11:28:44

2016-08-18 23:37:24

2019-11-22 16:48:09

網(wǎng)絡(luò)安全電子商務(wù)腳本語言

2014-03-11 10:12:10

2017-06-30 15:18:24

對賬系統(tǒng)互聯(lián)網(wǎng)

2013-11-18 10:44:51

雙11電商 CDN

2013-06-17 14:24:09

阿里

2014-12-08 10:32:45

2015-09-15 15:36:18

錦尚志

2016-12-19 08:31:49

科技新聞早報
點贊
收藏

51CTO技術(shù)棧公眾號

国产视频在线观看一区| 亚洲欧美国内爽妇网| 特色特色大片在线| 亚洲国产精品一| 国产亚洲欧洲| 亚洲视频自拍偷拍| 午夜精品免费看| av电影院在线看| 成人激情综合网站| 国产精品久久久久av免费| 国产成人免费在线观看视频| 亚洲一区二区免费在线观看| 欧美性猛交xxxxx水多| 亚洲一区三区视频在线观看| 亚洲高清视频在线播放| 丝袜美腿亚洲综合| 欧美片一区二区三区| 男人天堂av电影| 四虎影视国产精品| 欧美视频一区二区三区…| 亚洲一区二区三区加勒比| 成人免费一级视频| 蜜桃视频在线一区| 性欧美在线看片a免费观看| 美国黄色特级片| 成人性生交大片免费看96| 欧美性色黄大片手机版| 国产不卡一区二区视频| 久久久久久久久免费视频| 91久色porny| 亚洲影院污污.| 午夜精品久久久久久久蜜桃| 1024日韩| 久久九九国产精品怡红院| 91精品人妻一区二区| 亚洲精品国产九九九| 欧美天堂一区二区三区| 精品中文字幕av| 好久没做在线观看| 亚洲欧美日韩成人高清在线一区| 青青影院一区二区三区四区| 天堂网在线资源| 国产精品主播直播| 成人国内精品久久久久一区| 美女黄页在线观看| 免费亚洲一区| 91极品视频在线| 国产在线视频在线观看| 91精品91| 播播国产欧美激情| 国产在视频线精品视频| 国产va免费精品观看精品视频| 亚洲成avwww人| 久久久久无码精品| 久久wwww| 日韩欧美中文字幕一区| 无套内谢丰满少妇中文字幕| 欧美黄页在线免费观看| 欧美日韩在线直播| 国产日韩成人内射视频| 亚洲美女炮图| 偷拍与自拍一区| 国产一区二区三区在线免费观看| 国产精品高潮在线| 欧美黑人一级片| 欧美福利电影在线观看| 欧美美最猛性xxxxxx| 一区二区国产精品精华液| 亚洲91视频| 欧美成人h版在线观看| 欧美成欧美va| 欧美精品黄色| 91精品国产高清久久久久久91| 国产无遮挡又黄又爽在线观看| 亚洲电影在线| 57pao精品| 日韩黄色片网站| 精品影视av免费| 亚洲综合社区网| 亚洲国产av一区二区| 99麻豆久久久国产精品免费| 久久婷婷开心| 国产黄在线观看| 中文字幕一区二区不卡 | 亚洲不卡视频在线观看| 老司机午夜精品视频| 国产精品老女人精品视频| 国产又粗又黄又爽视频| 狠狠狠色丁香婷婷综合激情 | 风间由美一区二区av101| 亚洲成人在线视频播放| aaaaa一级片| 99久久久国产精品美女| 欧美国产视频一区二区| 日韩手机在线视频| 精品亚洲免费视频| 国产精品视频免费一区二区三区| 男人的天堂av高清在线| 国产精品美女久久久久久久网站| 日韩视频 中文字幕| 欧美巨大丰满猛性社交| 欧美日韩成人综合| 亚洲激情 欧美| 久久麻豆精品| 91精品国产777在线观看| 中文字幕人妻一区二区三区视频 | 亚洲乱码精品久久久久..| 久久亚洲捆绑美女| 只有这里有精品| 蜜桃视频在线观看播放| 91精品国产综合久久香蕉麻豆| 在线精品视频播放| 久久密一区二区三区| 国产69精品久久久久99| 一区二区自拍偷拍| 99re6这里只有精品视频在线观看| 亚洲一区三区视频在线观看| 阿v视频在线| 欧美精品乱人伦久久久久久| 亚洲av无码一区二区三区网址 | 国产精品亚洲一区二区三区妖精| 久久精品日韩| av片哪里在线观看| 在线免费观看成人短视频| 极品白嫩少妇无套内谢| 久久理论电影| 国产精品99久久久久久久久| 欧美一区二区三区成人片在线| 国产精品毛片a∨一区二区三区| 欧美大片在线播放| 日本超碰一区二区| 神马久久桃色视频| 天堂网一区二区| a天堂视频在线| 中文字幕一区二区三区乱码图片 | 欧美成人精品欧美一| 日韩av一区二区三区四区| 黄色99视频| 日韩另类在线| 欧美一区二区三区小说| 男人天堂资源网| 久久欧美肥婆一二区| 国产综合18久久久久久| 少妇视频在线| 日韩一区二区电影| xxxx日本少妇| 精品系列免费在线观看| 亚洲 国产 欧美一区| 日本在线精品| 亚洲欧美日韩高清| 中文字幕亚洲乱码熟女1区2区| av在线一区二区| 成人性生活视频免费看| 成人精品毛片| 国语自产偷拍精品视频偷| www.四虎在线观看| 亚洲在线视频免费观看| 精品少妇人妻av一区二区三区| 国产精品av久久久久久麻豆网| 亚洲最大av在线| 国产黄大片在线观看画质优化| 56国语精品自产拍在线观看| 国产精品成人69xxx免费视频| 久久成人久久鬼色| 裸体裸乳免费看| 日本一区影院| 欧美激情在线观看视频| 欧美一级片免费| 激情久久av一区av二区av三区 | 精品人妻一区二区三区潮喷在线 | 欧美日韩国产一级| 免费看特级毛片| 国产精品一二三在| 国产a级片网站| 蜜桃精品wwwmitaows| 国产97色在线| 9色在线观看| 欧美一区日韩一区| 日韩网红少妇无码视频香港| 久久久久国产精品麻豆ai换脸| 亚洲色图38p| 国产精品传媒精东影业在线| 99久久伊人精品影院| √天堂8资源中文在线| 亚洲图片欧美午夜| 国产精品女人久久久| 亚洲成精国产精品女| 国产手机在线观看| 国产精品亚洲综合一区在线观看| 人妻久久久一区二区三区| 国产成人精品999在线观看| 成人免费直播live| 美女的胸无遮挡在线观看| 中文日韩在线视频| 亚洲精品久久久狠狠狠爱| 色综合天天做天天爱| 天天操夜夜操av| 成人黄色网址在线观看| 亚洲精品资源在线| 亚洲精品中文字幕在线播放| 久久九九99| 午夜在线视频免费观看| 成人在线视频你懂的| 国产999在线| 18视频在线观看网站| 亚洲免费伊人电影在线观看av| 自拍偷拍第八页| 午夜欧美一区二区三区在线播放| 国产免费无遮挡吸奶头视频| 国产成人av电影| 亚洲色精品三区二区一区| 欧美在线黄色| 日本在线观看一区二区| 少妇精品在线| 国产免费观看久久黄| 极品视频在线| 久久综合九色九九| 黄色的视频在线免费观看| 日韩欧美一区中文| 中文字幕一区二区人妻| 午夜精品视频一区| 亚洲av无一区二区三区| 久久久久99精品一区| 制服丝袜av在线| 国内精品久久久久影院薰衣草| 日韩中文字幕在线视频观看| 欧美激情aⅴ一区二区三区| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 国产精品91久久久久久| 岛国毛片av在线| 久久综合久中文字幕青草| h视频网站在线观看| 日韩福利在线播放| 国产成人自拍一区| 日韩一区二区三区观看| 亚洲天堂视频网| 在线影视一区二区三区| 九九热在线免费观看| 亚洲电影一区二区| 妺妺窝人体色www聚色窝仙踪| 成人欧美一区二区三区黑人麻豆 | 正在播放欧美一区| 免费在线超碰| 亚洲男人天堂久| 日韩电影免费| 日韩精品在线观看视频| 手机av免费在线观看| 亚洲国产小视频在线观看| 亚洲av综合色区无码一二三区 | 亚洲乱码精品久久久久..| 日韩写真欧美这视频| av网站免费大全| 欧美一区二区高清| 国产免费视频一区二区三区| 欧美丰满美乳xxx高潮www| 亚洲av综合一区| 欧美色图片你懂的| 又骚又黄的视频| 欧美疯狂性受xxxxx喷水图片| 97精品人妻一区二区三区香蕉| 欧美日韩高清一区二区不卡 | 欧美一区二区视频在线观看2020| 国产精品九九九九| 欧美一区日本一区韩国一区| 精品久久久久成人码免费动漫| 日韩一区二区电影| 好吊色视频一区二区| 亚洲精品国产欧美| 国产精品一区二区婷婷| 中文字幕精品在线| 成年人网站在线| 欧美激情18p| 欧亚av在线| 国产精品久久久久7777婷婷| 色8久久久久| av免费精品一区二区三区| 国产精品2023| 欧美自拍资源在线| 91精品一区国产高清在线gif | 欧美性猛交xxxx乱大交极品| 中文字幕免费观看| 欧美剧情片在线观看| 国产成人自拍一区| 国产亚洲欧美日韩美女| a毛片在线播放| 91精品国产99| 日本一区二区三区中文字幕| 99久久久精品免费观看国产 | 亚洲成人精品视频| 国产精品一区二区三区四区色| 久久国产精品久久国产精品| 久久青草伊人| 国产精品一区二区三区成人| 日本免费一区二区视频| 欧美日韩中文国产一区发布| 午夜精品一区二区三区国产 | 欧美精品入口| 草草草在线视频| 国产高清亚洲一区| 影音先锋制服丝袜| 亚洲自拍与偷拍| 五月天中文字幕| 日韩视频在线直播| 国产91精品黑色丝袜高跟鞋 | 成人网在线观看| 日韩欧美影院| 中文字幕一区二区三区四区五区人| 亚洲精品色图| 激情在线观看视频| 久久久久久久性| 欧美日韩国产精品一区二区三区| 在线免费观看视频一区| 天天操天天爱天天干| 久久精品一区中文字幕| 色尼玛亚洲综合影院| 成人在线免费观看一区| 日韩精品一区二区三区免费观影| 性一交一乱一伧国产女士spa| 麻豆精品一区二区综合av| 久久精品国产亚洲av麻豆| 亚洲视频在线一区| 无码任你躁久久久久久久| 亚洲国产成人一区| 国产原创视频在线观看| 国产精品嫩草影院久久久| 秋霞影视一区二区三区| 毛片av在线播放| 国产资源精品在线观看| 久久婷婷五月综合| 狠狠久久五月精品中文字幕| 国产视频在线观看免费| 色偷偷亚洲男人天堂| 网友自拍亚洲| 精品欧美一区二区在线观看视频| 欧美三级在线| 超碰中文字幕在线观看| 1024国产精品| 一级特黄aaa大片在线观看| 国产一区二区三区久久精品| 亚洲一区资源| 精品无码久久久久国产| 激情亚洲网站| 日本人添下边视频免费| 亚洲一本大道在线| 国产综合在线播放| 久久久亚洲精品视频| 成人av资源网址| 欧美激情亚洲天堂| 风间由美性色一区二区三区| 青青草原在线免费观看| 日韩一级免费观看| 在线观看a级片| julia一区二区中文久久94| 我不卡影院28| 天天av天天操| 一区二区三区中文字幕精品精品| 99热这里只有精品99| 欧美猛少妇色xxxxx| 一区二区三区国产好| 欧美国产日韩激情| 99久久精品国产精品久久| 久久青青草视频| 亚洲欧美日韩国产中文| 日韩色淫视频| 少妇高潮流白浆| 国产成人午夜电影网| 日本少妇在线观看| 亚洲美女性生活视频| 日韩欧美精品一区二区综合视频| 亚洲欧美国产不卡| 国产精品一区在线观看你懂的| 久久中文字幕在线观看| 日韩高清免费在线| 成人在线免费电影网站| 强伦女教师2:伦理在线观看| 国产高清成人在线| 男人的天堂一区| 国产一区二区三区在线播放免费观看| 日韩久久一区| 黄网站色视频免费观看 | 国产精品无码久久久久一区二区| 91成人国产精品| 免费不卡视频| 国产欧美日韩视频一区二区三区| 亚洲欧美日韩国产综合精品二区 | 亚洲人和日本人hd| 男人添女人下面免费视频| 一区二区三区精品视频在线| 少妇激情av一区二区| 国产精品自拍网| 黄色精品一区| 一级片久久久久| 日韩精品在线看片z| 欧美黄色网页| 蜜臀在线免费观看| 久久久99免费| 亚洲av无码一区二区三区dv| 国产成人+综合亚洲+天堂| 欧美一区不卡| 久久久久久久久久久久久久久|