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

供應(yīng)鏈時(shí)效域接口性能進(jìn)階之路

開發(fā) 架構(gòu)
如果Redis和服務(wù)機(jī)器不在同一個(gè)區(qū)域會(huì)增加幾ms的跨區(qū)傳輸耗時(shí),所以對(duì)RT敏感的場(chǎng)景,如果機(jī)器不同于Redis區(qū)域,可以讓運(yùn)維幫忙重建機(jī)器。

一、前言

供應(yīng)鏈時(shí)效域歷經(jīng)近一年的發(fā)展,在預(yù)估時(shí)效方面沉淀出了一套理論和兩把利器(預(yù)估模型和路由系統(tǒng))。以現(xiàn)貨為例,通過持續(xù)的技術(shù)方案升級(jí),預(yù)估模型的準(zhǔn)確率最高接近了90%,具備了透出給用戶的條件。但在接入前臺(tái)場(chǎng)景的過程中,前臺(tái)對(duì)我們提出接口性能的要求。

以接入的商詳浮層場(chǎng)景為例,接口調(diào)用鏈路經(jīng)過商詳、出價(jià)、交易,給到我們供應(yīng)鏈只有15ms的時(shí)間,在15ms內(nèi)完成所有的業(yè)務(wù)邏輯處理是一個(gè)不小的挑戰(zhàn)。

圖片

圖片

二、初始狀態(tài) - 春風(fēng)得意馬蹄疾

拋開業(yè)務(wù)場(chǎng)景聊接口性能就是耍流氓。時(shí)效預(yù)估接口依賴于很多數(shù)據(jù)源:模型基礎(chǔ)數(shù)據(jù)、模型兜底數(shù)據(jù)、倉(cāng)庫(kù)數(shù)據(jù)、SPU類目數(shù)據(jù)、賣家信息數(shù)據(jù)等,如何快速批量獲取到內(nèi)存中進(jìn)行邏輯運(yùn)算,是性能提升的關(guān)鍵。

最先接入時(shí)效表達(dá)的是現(xiàn)貨業(yè)務(wù),最初的查詢單個(gè)現(xiàn)貨SKU時(shí)效的接口調(diào)用鏈路如下:

圖片

根據(jù)trace分析,接口性能的瓶頸在于數(shù)據(jù)查詢,而不在于邏輯處理,數(shù)據(jù)查詢后的邏輯處理耗時(shí)只占0.6%。

數(shù)據(jù)查詢又分為外部查詢和內(nèi)部查詢。外部查詢?yōu)?次RPC調(diào)用(耗時(shí)占比27%),內(nèi)部查詢?yōu)?1次DB查詢(耗時(shí)占比73%)。

為什么會(huì)有這么多次內(nèi)部查詢?因?yàn)轭A(yù)估模型是分段的,每段又根據(jù)不同的影響因子有不同的兜底策略,無(wú)法聚合成一次查詢。

單個(gè)SKU時(shí)效查詢都達(dá)到了76.5ms,以商詳浮層頁(yè)30個(gè)現(xiàn)貨SKU時(shí)效批量查詢估算,一次請(qǐng)求需要76.5*30=2295ms,這是不可接受的,性能提升刻不容緩。

三、優(yōu)化Round

1 - 昨夜西風(fēng)凋碧樹

3.1 內(nèi)部查詢優(yōu)化

由于內(nèi)部查詢需要的預(yù)估模型數(shù)據(jù)都是離線清洗,按天級(jí)別同步的,對(duì)實(shí)時(shí)性要求不高,有多種方案可以選擇:

序號(hào)

方案描述

優(yōu)點(diǎn)

缺點(diǎn)

結(jié)論

1

離線處理好后刷MySQL

現(xiàn)有方案,無(wú)開發(fā)成本

查詢性能一般

查詢性能不滿足要求,不采用

2

離線處理好后刷到Redis

查詢性能好

數(shù)據(jù)量過大時(shí)成本較高

采用

3

離線處理好后刷到本地內(nèi)存

查詢性能很好

對(duì)數(shù)據(jù)量有限制

模型數(shù)據(jù)量約為15G,方案不可行

最終選擇方案二,離線數(shù)據(jù)同步到Redis中。由于模型數(shù)據(jù)量增幅不大,每天的同步更多的是覆蓋,故采用32G實(shí)例完全能滿足要求。

圖片

3.2 外部查詢優(yōu)化

將三個(gè)RPC查詢接口逐個(gè)分析,找到優(yōu)化方案:

序號(hào)

查詢描述

外部域

優(yōu)化方案

原因

1

城市名稱轉(zhuǎn)code

TMS

本地緩存

由于城市名稱和code 的映射關(guān)系數(shù)據(jù)僅約20K左右,可以在應(yīng)用啟動(dòng)時(shí)請(qǐng)求一次后放入本地緩存。另外城市名稱和code發(fā)生變化的頻率很低,通過jetcache的@CacheRefresh每隔8小時(shí)自動(dòng)刷新完全滿足要求

2

獲取賣家信息

商家

Redis緩存

由于得物全量賣家數(shù)據(jù)量較大,不適合放在本地緩存,且賣家信息是低頻變化數(shù)據(jù),可以采用T+1同步到Redis

3

獲取商品類目

商品

Redis緩存

同樣商品類目數(shù)據(jù)也是低頻變化數(shù)據(jù),采用T+1同步到Redis

3.3優(yōu)化后效果

圖片

優(yōu)化后的效果很明顯,單個(gè)SKU時(shí)效查詢RT已從76.5ms降低至27ms,同時(shí)減少了對(duì)外部域的直接依賴,一定程度上提升了穩(wěn)定性。

27ms仍然沒法滿足要求。當(dāng)前的瓶頸在查詢Redis上(耗時(shí)占比96%),是否可以再進(jìn)一步優(yōu)化?

四、優(yōu)化Round

2 - 衣帶漸寬終不悔

通過上述分析,可以看到目前的耗時(shí)集中在一次次的Redis I/O操作中,如果將一組Redis命令進(jìn)行組裝,通過一次傳輸給Redis并返回結(jié)果,可以大大地減少耗時(shí)。

4.1 pipeline原理

Redis客戶端執(zhí)行一條命令分為如下四個(gè)過程:

1)發(fā)送命令

2)命令排隊(duì)

3)執(zhí)行命令

4)返回結(jié)果

其中1-4稱為Round Trip Time(RTT,往返時(shí)間)。pipeline通過一次性將多Redis命令發(fā)往Redis服務(wù)端,大大減少了RTT。

圖片

4.2優(yōu)化和效果

雖然Redis提供了像mget、mset這種批量接口,但Redis不支持hget批量操作,且不支持mget、hget混合批量查詢,只能采用pipeline。另外我們的場(chǎng)景是多key讀場(chǎng)景,并且允許一定比例(少概率事件)讀失敗,且pipeline中的其中一條讀失敗(pipeline是非原子性的),也不會(huì)影響時(shí)效預(yù)估,因?yàn)橛卸档撞呗裕史浅_m合。

圖片

由于Redis查詢之間存在相互依賴,上次查詢的結(jié)果需要作為下次查詢的入?yún)ⅲ薀o(wú)法將所有redis查詢合并成一個(gè)Redis pipeline。雖然最終仍然存在3次Redis I/O,但7ms的RT滿足了要求。

4.3 代碼

// pipeline查詢類public class RedisBasePipelineRegister {    // 存放查到的數(shù)據(jù)    private ThreadLocal<Map<String, Object>> context = ThreadLocal.withInitial(HashMap::new);
// 查詢 public void fetch(final RedisConsumers redisConsumers){ if (redisConsumers.isNotEmpty()){ List<Object> ret = redisClient.executePipelined((RedisCallback<Object>) connection -> { connection.openPipeline(); redisConsumers.get().forEach(t -> t.accept(connection)); return null; }); addValueToContext(ret,redisConsumers.getKeyList()); } }
/** * 將pipeline查到的數(shù)據(jù)存入threadlocal中 * 注意,redis讀取的數(shù)據(jù)可能是空的,如果是空,會(huì)填充一個(gè)null obj,這樣可以防止后面用的時(shí)候,發(fā)現(xiàn)thread local里面沒有數(shù)據(jù),重新查redis */ private void addValueToContext(List<Object> val, List<String> keys) { Map<String, Object> t = context.get(); IntStream.range(0, keys.size()) .forEach(i -> t.put(keys.get(i), val.get(i) == null ? NULL_OBJ : val.get(i))); }
public Object get(String key) { return context.get().get(key); }}

// redis查詢類public class RedisClient {
// threadlocal沒查到,再查redis(兜底) public Object get(String key) { Object value = Optional.ofNullable(redisBatchPipelineRegister.get(key)).orElseGet(()-> redisTemplate.opsForValue().get(key) ); return value; }}

即使pipeline部分失敗后,可用Redis單指令查詢作為兜底。

五、優(yōu)化Round

3 - 眾里尋他千百度

5.1 背景

隨著時(shí)效預(yù)估的準(zhǔn)確率在寄售、品牌直發(fā)、保稅等業(yè)務(wù)場(chǎng)景中滿足要求后,越來(lái)越多的業(yè)務(wù)類型需要接入時(shí)效表達(dá)接口。最初為了快速上線,交易在內(nèi)部根據(jù)出價(jià)類型串行多次調(diào)時(shí)效預(yù)估接口,導(dǎo)致RT壓力越來(lái)越大。出于領(lǐng)域內(nèi)聚考慮,與交易開發(fā)討論后,由時(shí)效域提供不同出價(jià)類型的聚合接口,同時(shí)保證聚合接口的RT性能。

圖片

自此,進(jìn)入并發(fā)區(qū)域。

5.2 ForkJoinPool vs ThreadPoolExecutor

Java7 提供了ForkJoinPool來(lái)支持將一個(gè)任務(wù)拆分成多個(gè)“小任務(wù)”并行計(jì)算,再把多個(gè)“小任務(wù)的結(jié)果合并成總的計(jì)算結(jié)果。ForkJoinPool的工作竊取是指在每個(gè)線程中會(huì)維護(hù)一個(gè)隊(duì)列來(lái)存放需要被執(zhí)行的任務(wù)。當(dāng)線程自身隊(duì)列中的任務(wù)都執(zhí)行完畢后,它會(huì)從別的線程中拿到未被執(zhí)行的任務(wù)并幫助它執(zhí)行,充分利用多核CPU的優(yōu)勢(shì)。下圖為ForkJoinPool執(zhí)行示意:

圖片

而Java8的并行流采用共享線程池(默認(rèn)也為ForkJoinPool線程池),性能不可控,故不考慮。


優(yōu)勢(shì)區(qū)域

實(shí)際分析

結(jié)論

ForkJoinPool

ForkJoinPool能用使用數(shù)據(jù)有限的線程來(lái)完成非常多的父子關(guān)系任務(wù)。由于工作竊取機(jī)制,在多任務(wù)且任務(wù)分配不均情況具有優(yōu)勢(shì)。

1.不存在父子關(guān)系任務(wù)。

2.獲取不同出價(jià)類型的時(shí)效RT相近,不存在任務(wù)分配不均勻情況。

不采用

ThreadPoolExecutor

ThreadPoolExecutor不會(huì)像ForkJoinPool一樣創(chuàng)建大量子任務(wù),不會(huì)進(jìn)行大量GC,因此單線程或任務(wù)分配均勻情況下具有優(yōu)勢(shì)。

采用

選定ThreadPoolExecutor后,需要考慮如何設(shè)計(jì)參數(shù)。根據(jù)實(shí)際情況分析,交易請(qǐng)求時(shí)效QPS峰值為1000左右,而我們一個(gè)請(qǐng)求一般會(huì)拆分3~5個(gè)線程任務(wù),不考慮機(jī)器數(shù)的情況下,每秒任務(wù)數(shù)量:taskNum = 3000~5000。單個(gè)任務(wù)耗時(shí)taskCost = 0.01s 。上游容忍最大響應(yīng)時(shí)間 responseTime = 0.015s。

1)核心線程數(shù) = 每秒任務(wù)數(shù) * 單個(gè)任務(wù)耗時(shí)

corePoolSize = taskNum * taskCost = (3000 ~ 5000) * 0.01 = 30 ~ 50,取40

2)任務(wù)隊(duì)列容量 = 核心線程數(shù) / 單個(gè)任務(wù)耗時(shí) * 容忍最大響應(yīng)時(shí)間

queueCapacity = corePoolSize / taskCost * responseTime = 40 / 0.01 * 0.015 = 60

3)最大線程數(shù) = (每秒最大任務(wù)數(shù) - 任務(wù)隊(duì)列容量)* 每個(gè)任務(wù)耗時(shí)

maxPoolSize = (5000 - 60) * 0.01 ≈  50

當(dāng)然上述計(jì)算都是理論值,實(shí)際有可能會(huì)出現(xiàn)未達(dá)最大線程數(shù),cpu load就打滿的情況,需要根據(jù)壓測(cè)數(shù)據(jù)來(lái)最終確定ThreadPoolExecutor的參數(shù)。

5.3優(yōu)化和壓測(cè)

經(jīng)優(yōu)化和壓測(cè)后聚合接口平均RT從22.8ms(串行)降低為8.52ms(并行),99線為13.22ms,滿足要求。

圖片

圖片

按單機(jī)300QPS(高于預(yù)估峰值QPS兩倍左右)進(jìn)行壓測(cè),接口性能和線程池運(yùn)行狀態(tài)均滿足。

圖片

圖片

圖片

最終優(yōu)化后應(yīng)用內(nèi)調(diào)用鏈路示意圖如下:

圖片

5.4 代碼

// 并行時(shí)效預(yù)估類public class ConcurrentEstimateCaller {    // 自定義線程池    private Executor executor;    // 時(shí)效預(yù)估策略工廠    private EstimateStrategyFactory estimateStrategyFactory;
//存放異步返回的結(jié)果,KEY為出價(jià)類型,VALUE為對(duì)應(yīng)的時(shí)效結(jié)果 private ConcurrentHashMap<String, CompletableFuture<List<PromiseEstimateRes>>> futures = new ConcurrentHashMap<>();
// 提交并行任務(wù)public ConcurrentEstimateCaller submit(PromiseEstimateAggreRequest request) for (String scene : request.getMap().keySet()) { futures.put(scene, CompletableFuture.supplyAsync(() -> {
EstimateStrategy estimateStrategy = estimateStrategyFactory.getStrategy(scene);
if (estimateStrategy != null) { Result<PromiseEstimateBatchResponse> tmp = estimateStrategy.promiseEstimateBatch(EstimateAggreConvertor.INSTANCE.convertBatchRequest(request, scene)); if (Result.SUCCESS_CODE.equals(tmp.getCode())) { return tmp.getData().getEstimateRes(); } } return null;
}, executor)); } }
// 指定時(shí)間內(nèi)等待和獲取所有子任務(wù)返回結(jié)果 public Map<String, List<PromiseEstimateRes>> join(long timeout, TimeUnit unit) throws Exception { // 等待所有的子任務(wù)執(zhí)行完成 CompletableFuture.allOf(futures.values().toArray(new CompletableFuture[]{})).get(timeout, unit);
Map<String, List<PromiseEstimateRes>> res = new HashMap<>();
for (Map.Entry<String, CompletableFuture<List<PromiseEstimateRes>>> entry : futures.entrySet()) {
if (entry.getValue().get() != null) { res.put(entry.getKey(), entry.getValue().get()); } }
return res; }}

六、總結(jié)

接口性能進(jìn)階之路隨著業(yè)務(wù)的變化和技術(shù)的升級(jí)永無(wú)止境。

分享一些建設(shè)過程中的Tips:

如果Redis和服務(wù)機(jī)器不在同一個(gè)區(qū)域會(huì)增加幾ms的跨區(qū)傳輸耗時(shí),所以對(duì)RT敏感的場(chǎng)景,如果機(jī)器不同于Redis區(qū)域,可以讓運(yùn)維幫忙重建機(jī)器。

阻塞隊(duì)列可以采用SynchronousQueue來(lái)提高響應(yīng)時(shí)間,但需要保證有足夠多的消費(fèi)者(線程池里的消費(fèi)者),并且總是有一個(gè)消費(fèi)者準(zhǔn)備好獲取交付的工作,才適合使用。

后續(xù)建設(shè)的一些思路:隨著業(yè)務(wù)和流量的增長(zhǎng),線程池參數(shù)如何在不重啟機(jī)器的情況下自動(dòng)調(diào)整,可以參考美團(tuán)開源的DynamicTp項(xiàng)目對(duì)線程池動(dòng)態(tài)化管理,同時(shí)添加監(jiān)控、告警等功能。

責(zé)任編輯:武曉燕 來(lái)源: 得物技術(shù)
相關(guān)推薦

2023-02-23 07:52:20

2022-04-26 10:47:15

智能供應(yīng)鏈供應(yīng)鏈

2023-09-18 10:37:36

數(shù)字化供應(yīng)鏈數(shù)字化轉(zhuǎn)型

2022-11-14 10:32:56

供應(yīng)鏈技術(shù)

2017-01-23 11:18:16

戴爾

2022-06-02 14:11:42

區(qū)塊鏈藥品供應(yīng)鏈數(shù)據(jù)

2022-03-04 14:24:21

區(qū)塊鏈技術(shù)供應(yīng)鏈

2020-12-07 13:53:01

區(qū)塊鏈疫苗

2022-03-26 22:51:06

區(qū)塊鏈供應(yīng)鏈技術(shù)

2022-01-20 11:12:00

區(qū)塊鏈金融應(yīng)用

2022-02-21 13:32:02

區(qū)塊鏈供應(yīng)鏈技術(shù)

2018-07-23 07:21:39

2022-06-06 13:58:35

區(qū)塊鏈供應(yīng)鏈去中心化

2020-05-14 20:42:09

區(qū)塊鏈區(qū)塊鏈技術(shù)供應(yīng)鏈

2023-02-23 10:59:20

亞馬遜云科技順豐供應(yīng)鏈物流

2021-01-25 12:49:14

區(qū)塊鏈物流運(yùn)輸

2017-11-08 09:39:11

供應(yīng)鏈消費(fèi)升級(jí)CIO

2024-03-26 11:01:10

人工智能機(jī)器學(xué)習(xí)
點(diǎn)贊
收藏

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

国产福利一区视频| av色综合网| jizzjizzjizz国产| 国产精品一区二区三区www| 亚洲免费资源在线播放| 国产精品久久一区二区三区| 美女又爽又黄免费视频| 日韩精品一区二区三区免费观影 | 韩国av一区二区三区| 九色精品免费永久在线| 狠狠人妻久久久久久综合蜜桃| 日韩一区二区三区在线免费观看| 亚洲免费观看视频| 欧美国产综合视频| 国产黄色小视频在线观看| 国产婷婷精品| 久久综合电影一区| 欧美亚一区二区三区| 伊人久久精品| 色综合咪咪久久| 中文字幕av资源一区| 亚洲成年人影院在线| 成人中文字幕av| 青草视频在线免费直播| 国产欧美日本一区视频| 国产另类自拍| 一卡二卡三卡在线| 久久国产精品99国产| 欧美成人一二三| 日韩免费成人av| 牛牛影视久久网| 在线不卡免费av| 国产又黄又猛视频| 国内精彩免费自拍视频在线观看网址| 国产精品―色哟哟| 欧美一二三四五区| 日本人妻丰满熟妇久久久久久| 麻豆精品一区二区av白丝在线| 国内精品一区二区三区| 国产少妇在线观看| 日韩精品免费一区二区三区| 国产午夜精品理论片a级探花| 免费高清视频在线观看| 欧美成人一二区| 色综合久久66| a级黄色一级片| 欧美高清另类hdvideosexjaⅴ| 国产精品久久免费看| 六月婷婷久久| 亚洲 精品 综合 精品 自拍| 国产精品一级二级三级| 成人美女免费网站视频| 中文字幕在线观看精品| 青青草精品视频| 国产成人精品视频在线观看| 无码视频一区二区三区| 久久亚洲国产精品一区二区| 青青在线视频一区二区三区| wwwxxx亚洲| 国产精品普通话对白| 97精品一区二区三区| 日本亚洲欧美在线| 国产精品婷婷| 欧美做受高潮1| 秋霞精品一区二区三区| 一本色道久久综合精品婷婷| 色先锋久久影院av| 精品小视频在线| 黄色短视频在线观看| 亚洲深夜福利在线观看| 亚洲欧美国产日韩天堂区| 三级网站在线免费观看| 国产亚洲一区二区三区不卡| 亚洲一区999| 婷婷综合在线视频| 亚洲91中文字幕无线码三区| 欧美乱妇高清无乱码| 久久久久久久黄色| 在线亚洲精品| 国产精品99免视看9| 中文天堂在线视频| 国产精品影音先锋| 国产一区二区三区四区hd| 色视频在线观看福利| 国产偷国产偷精品高清尤物| 亚洲午夜在线观看| 亚洲无线看天堂av| 精品久久久国产| 久久婷婷国产91天堂综合精品| 久久影视精品| 精品国产一区二区三区久久影院 | 亚洲午夜剧场| 欧美一级二级三级乱码| 日韩aaaaa| 成人同人动漫免费观看| 久久99久国产精品黄毛片入口| 日韩黄色三级视频| 日韩精品色哟哟| 91久久中文字幕| 手机看片一区二区| 国产精品私房写真福利视频| 日韩a级黄色片| 欧美人与性动交xxⅹxx| 欧美福利视频导航| 国产人妻人伦精品1国产丝袜| 久久高清免费| 91精品国产乱码久久久久久蜜臀 | 日韩三区在线观看| 粉嫩av蜜桃av蜜臀av| 亚洲高清影视| 国产一区日韩二区欧美三区| 日本高清不卡的在线| 国产又大又粗又长| 91在线视频免费观看| 亚洲高清在线播放| а√在线天堂官网| 555夜色666亚洲国产免| 白丝女仆被免费网站| 亚洲精品国产首次亮相| 日本视频久久久| 午夜久久久久久噜噜噜噜| 欧美国产丝袜视频| 男人日女人逼逼| 成人激情久久| 亚洲最新av网址| 日本三级午夜理伦三级三| 精品伊人久久久久7777人| 久久99精品久久久久久秒播放器| 成人在线观看亚洲| 欧美在线免费播放| 午夜视频在线观看国产| 午夜日本精品| 91精品免费视频| 不卡在线视频| 色婷婷精品久久二区二区蜜臂av| 中文字幕a在线观看| **女人18毛片一区二区| 国产精品女主播| 精品亚洲综合| 日韩欧亚中文在线| 国产精品无码在线| 一区福利视频| 国产成人免费电影| 黄色高清无遮挡| 午夜精品久久久久久久99| 欧美—级在线免费片| 日韩毛片在线免费看| 精品国产一区二区三区成人影院| 欧美刺激性大交免费视频| 在线免费观看视频网站| 国产精品入口麻豆九色| 老头吃奶性行交视频| 国产在视频线精品视频www666| 5566日本婷婷色中文字幕97| 天天射天天色天天干| 精品久久久久久久久久ntr影视| 日韩少妇一区二区| 亚洲欧洲日本一区二区三区| 国产精品传媒毛片三区| av小次郎在线| 日韩美女天天操| 黄网站免费在线| 成人av在线资源网| 久久亚洲中文字幕无码| 窝窝社区一区二区| 国产精品成人aaaaa网站| 电影av一区| 欧美丝袜丝交足nylons| 182在线观看视频| 国产精品综合一区二区| 亚洲精品少妇一区二区| 福利电影一区| 日韩美女视频中文字幕| 高清美女视频一区| 欧美老女人第四色| 免费在线一区二区三区| 97久久精品人人做人人爽| 色欲av无码一区二区人妻| 精品视频免费| 国产中文欧美精品| 欧美黑人xx片| 亚洲欧美日韩天堂| 国产又粗又猛视频| 亚洲成人一区二区| 免费看黄色的视频| 国产综合久久久久久鬼色| 亚洲国产精品影视| 精品精品精品| 国产精品美女视频网站| 91网在线看| 国产视频久久久久| 国产精品福利电影| 欧美精品久久久久久久久久丰满| 中文字幕五月欧美| 国产原创剧情av| 天堂精品中文字幕在线| 天堂av免费看| 亚洲区小说区图片区qvod按摩| 国产精品视频免费观看www| 香蕉久久aⅴ一区二区三区| 亚洲激情久久久| 中文字幕永久在线视频| 亚洲自拍偷拍图区| 亚洲国产天堂av| 国产不卡视频在线观看| 日韩欧美在线播放视频| 68国产成人综合久久精品| 好看的日韩精品| 少妇高潮一区二区三区99| 久久久久久成人| 欧美黄色激情| 国产丝袜精品视频| 中文永久免费观看| 欧美日韩国产精品一区| 精品人妻伦九区久久aaa片| 91麻豆国产精品久久| 波多野结衣在线免费观看| 久久黄色影院| 精品久久久久久无码中文野结衣| 日韩aaaa| 久久亚洲高清| 欧美色视频一区二区三区在线观看| 亚洲午夜伦理| 亚洲综合av一区| 香蕉久久夜色精品国产更新时间| 成人av资源| 国产精选久久| 国产精品视频色| 亚洲wwww| 日本成熟性欧美| 美女露胸视频在线观看| 欧美俄罗斯性视频| 久久综合网导航| 色偷偷偷亚洲综合网另类| 日本高清中文字幕二区在线| 精品国产乱码久久久久久牛牛| 亚洲天天综合网| 欧美性受xxxx黑人xyx性爽| 中文字字幕在线中文| 亚洲午夜在线电影| 欧美三级小视频| 亚洲久本草在线中文字幕| 国产精品一区二区亚洲| 国产日韩欧美精品电影三级在线| 国产吞精囗交久久久| 91小视频免费看| 欲求不满的岳中文字幕| 成人黄色av电影| 精品一区二区三区四区五区六区| 国产精品99久久久久久有的能看| 亚洲图色中文字幕| 紧缚捆绑精品一区二区| www.com操| 久久超碰97中文字幕| 四季av一区二区| 美腿丝袜一区二区三区| 污版视频在线观看| 麻豆精品在线观看| 亚洲综合123| 国产精品一区二区男女羞羞无遮挡| 夜夜爽久久精品91| 国产乱码精品一区二区三区av| 日本亚洲一区二区三区| 国产成人综合在线观看| 精品人妻伦一二三区久| 99精品视频免费在线观看| 亚洲精品理论片| 午夜精品久久久久久久99热黄桃| 在线免费观看日本欧美| 中文精品久久久久人妻不卡| 欧美性感一类影片在线播放| 中文字幕一区二区免费| 91麻豆精品国产91久久久更新时间| 99精品国产99久久久久久97| 日韩精品一区二区三区四区 | 欧美福利一区二区三区| 国产精品入口久久| 亚洲福利av在线| 欧美99在线视频观看| 日韩亚洲欧美视频| 视频一区视频二区在线观看| 日韩va在线观看| 不卡区在线中文字幕| 香蕉视频久久久| 亚洲欧美一区二区三区国产精品| 精品无码免费视频| 色丁香久综合在线久综合在线观看| 91麻豆精品在线| 日韩视频免费观看高清完整版| 午夜在线视频观看| 日韩中文字幕在线精品| 欧美videossex| 青青青国产精品一区二区| 日韩一级特黄| 国产精品手机在线| 欧洲杯什么时候开赛| 奇米777四色影视在线看| 久久国产日本精品| 俄罗斯女人裸体性做爰| 国产亚洲欧洲一区高清在线观看| 欧美性x x x| 欧美香蕉大胸在线视频观看 | 美女欧美视频在线观看免费 | 欧美78videosex性欧美| 欧美亚洲成人精品| 99re8精品视频在线观看| 久久99精品久久久久子伦 | 成人激情午夜影院| 天堂网av2018| 偷拍一区二区三区| 97免费观看视频| 亚洲另类图片色| 中文字幕中文字幕在线十八区| 人妖精品videosex性欧美| 日韩一二三区在线观看| 视频一区亚洲 | 中文无字幕一区二区三区| 国产第100页| 在线播放91灌醉迷j高跟美女| 免费人成黄页在线观看忧物| 美日韩精品视频免费看| 51一区二区三区| 久久综合伊人77777麻豆| 中文字幕日韩一区二区不卡| 最新中文字幕2018| 久久久一区二区三区捆绑**| 国产一卡二卡在线播放| 欧美二区三区91| 97电影在线看视频| 欧洲美女7788成人免费视频| 日韩在线观看一区二区三区| 一区二区不卡视频| 秋霞影院一区二区| 免费a级黄色片| 精品毛片网大全| 日本国产在线观看| 欧美国产日韩一区二区在线观看 | 日韩精品无码一区二区三区久久久| 亚洲综合成人在线| 亚洲成人精品女人久久久| 久久综合网hezyo| 日日夜夜亚洲| 一区二区精品视频| 麻豆精品一区二区综合av| 亚洲色图 激情小说| 欧亚洲嫩模精品一区三区| 日韩精品视频无播放器在线看| 国语对白做受69| 久久久久久毛片免费看| 久草视频国产在线| 不卡av免费在线观看| 国产精品suv一区二区69| 精品国产免费人成电影在线观看四季 | 亚洲精品一区二区三区蜜桃久| 另类av一区二区| 亚洲精品色午夜无码专区日韩| 色视频一区二区| 国内在线精品| 国产精品亚洲第一区| 久久国产成人精品| 国产美女视频免费看| 亚洲欧美另类小说视频| 国产99久一区二区三区a片| 美女国内精品自产拍在线播放| 欧美黄视频在线观看| 男人添女荫道口喷水视频| 成人一区二区三区视频| 国产精品成人免费一区二区视频| 亚洲国产高清高潮精品美女| 涩涩涩在线视频| 日韩电影在线播放| 久久 天天综合| 九九视频在线观看| 亚洲精品国产免费| av日韩亚洲| 中文字幕av日韩精品| 成人丝袜18视频在线观看| 日本va欧美va国产激情| 亚洲性69xxxbbb| 亚洲欧美专区| 丁香六月激情网| 久久久综合网站| 亚洲永久精品视频| 久久久免费av| 国产伦一区二区三区| 热久久久久久久久| www在线免费观看视频| 欧美一级淫片aaaaaaa视频| 国内精品视频在线观看| 日韩va在线观看| 天天综合天天综合色| lutube成人福利在线观看| **亚洲第一综合导航网站| 中文亚洲欧美| 国产在线免费av| 精品久久久久久久久久久久久久久| 免费电影日韩网站| 亚洲综合激情五月| 久久影视一区二区| a天堂在线视频|