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

攜程中轉交通方案拼接性能優化

人工智能 新聞
本文將結合實例,介紹在中轉交通拼接性能優化過程中所遵循的原則、分析和優化方法,旨在為讀者提供有價值的參考和啟示。

作者簡介

簡言,攜程后端開發經理 ,關注技術架構、性能優化、交通規劃等領域。

一、背景介紹

由于交通規劃和運力資源的限制,用戶查詢的兩地之間可能沒有直達交通,或者在重大節假日時,直達交通都已售罄。不過,通過火車、飛機、汽車、船舶等兩程或多程中轉的方式,用戶仍然可以到達目的地。此外,中轉交通有時在價格和耗時方面更具有優勢。例如,對于從上海到運城,通過火車中轉可能比直達火車更加快捷和便宜。

圖片

圖1 攜程火車中轉交通列表

在提供中轉交通方案時,很重要的一個環節是將兩程或多程的火車、飛機、汽車、船舶等拼接起來組成可行的中轉方案。而中轉交通拼接的第一個難點是拼接空間極大,僅考慮上海做中轉城市,就可以產生近億種組合;另一個難點在于對實時性有要求,因為產線數據隨時變化,需要不斷地查詢火車、飛機、汽車、船舶的數據。中轉交通拼接需要大量的計算資源和IO開銷,因此,對其性能進行優化顯得尤為重要。

本文將結合實例,介紹在中轉交通拼接性能優化過程中所遵循的原則、分析和優化方法,旨在為讀者提供有價值的參考和啟示。

二、優化原則

性能優化需要在滿足業務需求的前提下,在各種資源和約束條件下去平衡和取舍,遵循一些大的原則有助于消除不確定性,去逼近解決問題的最優解。具體來說,中轉交通拼接優化過程中主要遵循以下三個原則:

2.1 性能優化是手段而不是目的

雖然本文是關于性能優化的,但仍需要在最開始強調:不要為了優化而優化。滿足業務需求的方式有很多,性能優化只是其中一種。有時候問題非常復雜,限制也很多,在不顯著影響用戶體驗的前提下,通過放寬限制或采用其他流程來減少對用戶的影響,這也是解決性能問題的好方法。在軟件開發中,存在許多通過犧牲少量性能來實現大幅降低成本的事例。例如,在Redis中用于基數統計(去重)的HyperLogLog算法,它在標準誤差為0.81%的前提下,只需要12K空間就能夠統計264的數據。

回到問題本身,由于需要頻繁地查詢產線數據,并且進行海量的拼接操作,那么如果要求每個用戶查詢時都立刻返回最新鮮的中轉方案,成本將會非常高。為了降低成本,需要在響應時間和數據新鮮度之間進行平衡。經過仔細考慮選擇可以接受分鐘級的數據不一致,對于一些冷門線路和日期,可能在首次查詢時沒有好的中轉方案,此時引導用戶重新刷新頁面即可。

2.2 不正確的優化是萬惡之源

Donald Knuth在《Structured Programming With Go To Statements》中提到:“程序員們浪費大量的時間去思考、擔憂非關鍵路徑的性能,而嘗試優化這部分性能,對整體代碼的調試和維護都有非常嚴重的負面影響,因此97%的情況,我們應該忘記小的優化點”。簡而言之,在沒有發現真正的性能問題之前,在代碼層面過度炫技式的優化,不僅不會提高性能,反而可能會導致更多的錯誤。然而作者同樣也強調:“對于剩下關鍵的3%,我們也不要錯過優化的機會”。因此,需要時刻關注性能問題,不做會影響性能的決策,并在必要的時候做正確的優化。

2.3 量化分析性能,明確優化方向

正如前一節所述,在進行優化之前,首先要量化性能并找出瓶頸,這樣優化的才更有針對性。量化分析性能可以借助耗時監控、Profiler性能分析工具、Benchmark基準測試工具等,重點關注耗時特別長或者執行頻率特別高的地方。正如阿姆達爾定律所述:“系統中對某一部件采用更快執行方式所能獲得的系統性能改進程度,取決于這種執行方式被使用的頻率,或所占總執行時間的比例”。

此外,還需要注意到性能優化是一場持久戰。隨著業務的不斷發展,架構和代碼也不停地變化,因此更需要持續量化性能,不斷分析瓶頸和評估優化效果。

三、性能分析之路

3.1 梳理業務流程

在性能分析之前,首先要梳理業務流程。中轉交通方案拼接主要包含以下四個步驟:

a.  加載線路圖,如北京經南京中轉到上海,只考慮線路本身的信息,與具體的班次無關;

b.  查火車、飛機、汽車、船舶的產線數據,包括出發時間、到達時間、出發站、到達站、價格和余票信息等;

c.  拼接出所有可行的中轉交通方案,主要是考慮換乘時間不能過短,以免無法完成換乘;同時也不宜過長,以免等待太久。拼接出可行的方案后,還需要完善業務字段,例如總價格、總耗時和換乘信息等;

d.  根據一定的規則,從拼接出的所有可行中轉方案中篩選出一些用戶可能感興趣的方案。

3.2 量化分析性能

(1)增加耗時監控?

耗時監控是一種最直觀的從宏觀角度觀察各個階段耗時情況的手段。它不僅可以查看業務流程各階段的耗時值與耗時占比,還可以長期觀察耗時變化趨勢。

耗時監控可以借助公司內部的指標監控告警系統,在中轉交通方案拼接的主要流程中增加耗時打點。這些流程包括加載線路圖、查詢班次數據并進行拼接、篩選和保存拼接方案等。各個階段的耗時情況如圖2所示,可以看到,拼接(含查產線數據)的耗時占比最高,因此成為未來重點優化的目標。

圖片

圖2 中轉交通拼接耗時監控

(2)Profiler性能分析?

耗時打點可能會侵入業務代碼,并對性能產生影響,因此不宜過多,更適合監控主要流程。與之對應的Profiler性能分析工具(例如Async-profiler),可以生成更具體的調用樹以及各函數的CPU占用比例,從而幫助關鍵路徑和性能瓶頸的分析與定位。

圖片

圖3 拼接調用樹與CPU占比

如圖3所示,拼接方案(combineTransferLines)占53.80%,查產線數據(querySegmentCacheable,已使用緩存)占21.45%。在拼接方案中, 計算方案評分(computeTripScore,占48.22%)、創建方案實體(buildTripBO,占4.61%)和檢查拼接可行性(checkCombineMatchCondition,占0.91%)是占比最大的三個環節。

圖片

圖4 方案打分調用樹和CPU占比

繼續分析占比最高的計算方案評分(computeTripScore)時,發現主要與自定義的字符串格式化函數(StringUtils.format)有關,包括直接調用(用于展示方案評分細節),以及通過getTripId間接調用(用于生成方案的ID)。自定義的StringUtils.format中占比最高的是java/lang/String.replace,Java 8原生的字符串替換是通過正則實現的,效率比較低(這一問題在Java9之后已經改進了)。

// 計算方案評分(computeTripScore) 中調用的StringUtils.format代碼示例
StringUtils.format("AAAA-{0},BBBB-{1},CCCC-{2},DDDD-{3},EEEE-{4},FFFF-{5},GGGG-{6},HHHH-{7},IIII-{8},JJJJ-{9}",
aaaa, bbbb, cccc, dddd, eeee, ffff, gggg, hhhh, iiii, jjjj)


// getTripId 中調用StringUtils.format代碼示例
StringUtils.format("{0}_{1}_{2}_{3}_{4}_{5}_{6}", aaaa, bbbb, cccc, dddd, eeee, ffff)


// 通過Java replace實現的自定義format函數
public static String format(String template, Object... parameters) {
for (int i = 0; i < parameters.length; i++) {
template = template.replace("{" + i + "}", parameters[i] + "");
}
return template;
}

(3)Benchmark基準測試?

借助Benchmark基準測試工具可以更準確地測量代碼的執行時間。在表1中,我們通過JMH(Java Microbenchmark Harness)對三種字符串格式化方法和一種字符串拼接方法進行耗時測試。測試結果表明,使用Java8的replace方法實現的字符串格式化性能最差,而使用Apache的字符串拼接函數性能最佳。

表1 字符串格式化與拼接性能對比

實現

執行1000次平均耗時(us)

使用Java8的replace實現的StringUtils.format

1988.982

使用Apache replace實現的StringUtils.format

656.537

Java8自帶String.format

1417.474

Apache的StringUtils.join

116.812

四、性能優化之路

通過以上的性能分析,我們發現拼接和查詢產線數據是性能瓶頸,字符串格式化影響尤其大。因此,我們將致力于優化這些部分,以提高性能表現。

4.1 優化代碼邏輯

優化代碼邏輯是最簡單且性價比最高的方法,可以是修正有問題的代碼或替換為更好的實現。不同的實現,哪怕減上幾納秒,累加起來也是很可觀的。借助一些經典算法或數據結構(如快速排序、紅黑樹等)可以在時間和空間復雜度方面帶來顯著優勢。回到中轉交通方案拼接性能優化本身,優化的代碼邏輯主要包括:

(1)優化字符串拼接性能?

如前面的JMH的結果所示,自定義的字符串格式化函數性能最差,因此作為重點優化目標。優化前后的對比如下所示:

// 優化前,通過Java replace實現的format函數
public static String format(String template, Object... parameters) {
for (int i = 0; i < parameters.length; i++) {
template = template.replace("{" + i + "}", parameters[i] + "");
}
return template;
}
// 優化后,通過Apache replace實現的format函數
public static String format(String template, Object... parameters) {
for (int i = 0; i < parameters.length; i++) {
String temp = new StringBuilder().append('{').append(i).append('}').toString();
template = org.apache.commons.lang3.StringUtils.replace(template, temp, String.valueOf(parameters[i]));
}
return template;
}

根據JMH的測試結果,即使是優化后的格式化函數,其性能也不是最優的。在不顯著影響可讀性的前提下,應盡量使用性能更優的StringUtils.join函數。

// 優化前
StringUtils.format("{0}_{1}_{2}_{3}_{4}_{5}_{6}", aaaa, bbbb, cccc, dddd, eeee, ffff)


// 優化后
StringUtils.join("_", aaaa, bbbb, cccc, dddd, eeee, ffff)

為進一步提升性能,可以在computeTripScore 函數中添加一個開關,僅在調試模式下才展示評分細節,這將確保該字符串格式化函數僅在需要時才被調用。

if (Config.getBoolean("enable.score.detail", false)) {
scoreDetail = StringUtils.format("AAAA-{0},BBBB-{1},CCCC-{2},DDDD-{3},EEEE-{4},FFFF-{5},GGGG-{6},HHHH-{7},IIII-{8},JJJJ-{9}",
aaaa, bbbb, cccc, dddd, eeee, ffff, gggg, hhhh, iiii, jjjj);
}

優化后的CPU占比如圖5所示,此時字符串格式化已經不再是性能瓶頸。

圖片

圖5 優化后的拼接調用樹和CPU占比

(2)增加索引降低拼接時間復雜度?

圖片

圖6 增加索引降低拼接時間復雜度

在中轉拼接過程中,我們需要將第一程每個班次的到達時間與第二程每個班次的出發時間進行比較,以判斷中轉時間是否過短或過長。為簡化說明,假設換乘時間間隔需要滿足大于30分鐘且小于6小時。以北京到上海經南京中轉的兩程火車為例,3月9日北京到南京有66個班次,南京到上海有275個班次,考慮到隔夜車,還需要算上3月10日南京到上海的275個班次,那么最多需要比較36300(66*275*2)次。

為避免頻繁比較,參考了MySQL B+樹索引的思想,將第二程南京到上海的所有火車班次數據構建成紅黑樹。其中,樹的鍵為秒級時間戳,例如2023-03-09 11:29出發的G367鍵為1677247680,值為G367的班次數據。有了索引樹,最多只需要10次比較,就可以找到最近的滿足最小換乘時間要求的班次。同理,最多需要10次比較,就能找到滿足最大換乘時間要求的最晚班次。兩者之間的所有班次都滿足耗時要求,直接進行拼接即可。改進后最多需要比較1320(66*(10+10))次,約為原來的1/27.5。

(3)使用多路歸并求Top-K算法?

在篩選方案時,會存在以下場景:有多個中轉點,每個中轉點都有數百個得分較高的方案(內部已按得分由高到低排序,通過小根堆實現)。最終需要將這些方案合并,并從中篩選出得分最高的K個方案。

最簡單的方法是使用快速排序將所有的方案排序,然后選取前K個,時間復雜度約為O(nlog2n)。然而,這并沒有利用到每個隊列自身有序的特點。通過多路歸并算法時間復雜度可降為O(nlog2k),具體步驟為:

a.  從每個隊列中拿出第一個元素(得分最高的方案),放入大根堆中;

b.  從大根堆堆頂拿出最大的元素,放到結果集中;

c.  如果該元素所在的隊列還有剩余元素,則將下一個元素加入堆中;

d.  重復步驟2和3,直到結果集中包含K個元素或所有的隊列都為空。

圖片

圖7 多路歸并求Top-K算法

4.2 構建多級緩存

緩存是一種典型的以空間換時間策略,可以緩存數據和計算結果,緩存數據可以提高訪問效率,緩存結果避免了重復計算。緩存在帶來性能提升的同時,又會引入新的問題:

  • 緩存容量有限,需要仔細斟酌數據的加載、更新、失效和替換策略;
  • 緩存架構的設計:通常來說內存緩存(如HashMap、Caffeine等)性能最高,而Redis等分布式緩存次之,RocksDB相對較慢,容量上限則正好相反,需要仔細選型并搭配使用;
  • 緩存不一致問題如何解決,能接受多久的不一致。

在中轉交通方案拼接過程中,需要使用大量的基礎數據(如車站、行政區域等),以及海量的動態數據(例如班次數據)。綜合以上因素并結合中轉交通拼接的業務特點,緩存架構做如下設計:

  • 基礎數據(如車站、行政區域等),因數據量小,變化頻率低,全量保存到HashMap中,周期全量更新;
  • 部分火車、飛機、汽車、船舶的班次數據緩存到Redis中,以提高訪問效率和穩定性。不同產線采取的緩存策略稍有不同,但總的來說是定時更新與搜索觸發更新相結合的方式;
  • 一次拼接過程中可能查詢數百次產線數據,Redis毫秒級的延遲累加起來也是非常大的。因此,希望在Redis之上再構建一層內存緩存以提高性能。通過分析發現拼接過程中存在非常明顯的熱點數據,熱門日期和線路的查詢占比非常高且數量相對有限。因此可以將這部分熱點數據保存到內存緩存中,使用LFU(Least Frequently Used)替換,最終產線數據內存緩存命中率達到45%以上,相當于降低近一半的IO開銷。
  • 因為可以接受分鐘級的數據不一致,所以將拼接結果緩存起來,在有效期內,如果下一個用戶查詢同一出發日期的相同線路,直接使用緩存數據即可。因為拼接的中轉方案數據相對較大,所以將拼接結果保存到RocksDB中,雖然性能不如Redis,但是對于單次查詢影響還可以接受。

圖片

圖8 多級緩存結構

4.3 預處理

盡管理論上可以選擇任意城市作為兩地的中轉點,但實際上大部分中轉城市都無法拼接出優質的方案。因此,先通過離線預處理篩選出部分高質量的中轉點,從而將求解空間從幾千降至數十。相對于動態變化的班次,線路數據是相對固定的,每天計算一次即可。此外離線預處理可以借助大數據技術,處理海量數據,相對對耗時不敏感。

4.4 多線程處理

在一次拼接過程中,需要處理數十條不同中轉點的線路。每個線路的拼接是相互獨立的,因此可以采用多線程處理,這樣可以最大程度地降低處理時間。但受線路班次數量和緩存命中率的影響,不同線路的拼接耗時很難一致。很多時候,分配相同任務數量的兩個線程,即使一個線程很快執行完,也要等待另外一個線程執行完才能進行下一步操作。為避免這種情況,這里借助ForkJoinPool的work-stealing機制。這個機制可以確保每個線程在完自己的任務后,還會分擔其他線程未完成的工作,提高并發效率,減少空閑時間。

但是多線程也不是萬能的,使用時需要注意:

  • 子任務的執行需要相互獨立、互不影響。如果存在依賴關系,則需要等待前一個任務執行完才能開始下一個任務,這樣會使多線程失去意義;
  • CPU核數決定了并發能力的上限,過多的線程會因頻繁切換上下文而降低性能,需要特別關注線程數、CPU使用率、CPU Throttled time等指標。

4.5 延遲計算

通過將計算推遲到必要的時刻,可能避免很多多余的開銷。例如,在拼接完中轉方案后,需要構建方案實體并完善業務字段,這部分也比較消耗資源。而且并非所有拼接的方案都會被篩選出來,這意味著這部分未被篩選的方案仍然需要耗費計算資源。因此延遲完整方案實體對象的構建,先將拼接過程中的數以萬計的方案保存為輕量的中間對象,只對篩選之后的數百個中間對象構建完整的方案實體。

4.6 JVM優化

中轉交通拼接項目是基于Java 8的,并使用G1(Garbage-First)垃圾收集器,部署在8C8G機器上。G1在實現高吞吐量的同時盡可能滿足停頓時間的要求,系統架構部門設置的默認參數已經能夠適用于大多數場景,通常不需要專門的優化。

但有些線路中轉方案過多,導致報文太大,超過Region大小的一半(8G 默認Region大小是2M),導致很多應該進入年輕代的大對象直接進入了老年代,為了避免這種情況,將Region大小改為16M。

五、總結

通過以上的分析和優化,拼接耗時變化如圖9所示:

圖片

圖9 中轉交通方案拼接性能優化效果

雖然每個業務和場景都有各自的特點,性能優化時也需要具體分析。但原理是相通的,依然可以參考本文所述的分析和優化方法。本文所有的分析和優化方法總結如圖10所示。

圖片

圖10 中轉交通方案拼接優化總結

責任編輯:張燕妮 來源: 攜程技術
相關推薦

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2022-07-15 09:20:17

性能優化方案

2016-09-01 09:39:20

攜程無線

2021-09-17 12:54:05

AI 數據人工智能

2023-06-09 09:54:36

攜程工具

2014-12-25 17:51:07

2013-12-02 15:37:18

華為浙大中控智慧交通

2023-07-07 14:18:57

攜程實踐

2022-03-30 18:39:51

TiDBHTAPCDP

2022-09-09 15:49:03

攜程火車票組件化管理優化

2022-04-07 17:30:31

Flutter攜程火車票渲染

2022-10-27 09:42:22

數據庫SQL

2016-10-11 14:57:33

攜程APP性能優化

2019-03-01 11:03:22

Lustre高性能計算

2022-08-12 08:38:08

攜程小程序Taro跨端解決方案

2022-07-15 12:58:02

鴻蒙攜程華為

2022-05-13 09:27:55

Widget機票業務App

2014-12-24 10:45:05

攜程

2013-10-15 14:43:01

2023-07-07 14:12:52

攜程開發
點贊
收藏

51CTO技術棧公眾號

日韩成人av毛片| www.偷拍.com| 香蕉视频免费在线播放| 激情都市一区二区| 欧美激情乱人伦| 三级精品视频久久久久| 久久全国免费视频| japanese中文字幕| 国产精品成人**免费视频| 亚洲成人av资源| 丝袜足脚交91精品| 高潮一区二区三区乱码| 美腿丝袜亚洲一区| 久久久视频精品| 最新日韩免费视频| 秋霞在线一区| 日韩精品一区二区三区在线观看| 国产精品免费成人| 精品自拍一区| 欧美国产精品一区二区三区| 国产一区二区高清不卡| 一二三四区视频| 久久久精品午夜少妇| 九色精品免费永久在线| 国产三级黄色片| 亚洲精品合集| 精品国产不卡一区二区三区| 污污的视频免费观看| 欧美特黄aaaaaaaa大片| 亚洲高清久久久| 欧美一级黄色录像片| 丁香在线视频| 久久久电影一区二区三区| 国产91免费视频| 国产乱码精品一区二区| 日本系列欧美系列| 91po在线观看91精品国产性色 | 2021国产精品久久精品| 7777精品久久久大香线蕉小说| 伊人亚洲综合网| 日韩av一区二| 国产精品人成电影在线观看| 日韩在线 中文字幕| 亚洲精品女人| 久久全球大尺度高清视频| 青娱乐91视频| 欧美日韩国产免费观看| 久久99久久99精品中文字幕 | 日本成人在线免费观看| 亚洲精品一区av| 欧美日韩大陆在线| 岛国av在线免费| 欧美日韩va| 91黄色免费看| 91香蕉视频导航| www.久久| 欧美日本国产视频| 免费精品99久久国产综合精品应用| 国产福利亚洲| 欧美美女黄视频| 男女视频在线观看网站| 国产专区精品| 精品日韩一区二区| 国产一级伦理片| 里番精品3d一二三区| 精品无人区太爽高潮在线播放| 免费a在线观看播放| 日韩mv欧美mv国产网站| 亚洲三级黄色在线观看| 日韩女同一区二区三区| 久久免费精品视频在这里| 日韩中文视频免费在线观看| 国产美女久久久久久| 欧美日韩国产高清| 欧美一级电影在线| 看黄色一级大片| 精一区二区三区| 18成人在线| 日韩欧美亚洲系列| 中文字幕精品三区| 欧美日韩dvd| 国产ktv在线视频| 欧美性色aⅴ视频一区日韩精品| av在线网址导航| 国产劲爆久久| 国产亚洲成av人片在线观看桃| 三上悠亚在线观看视频| 亚洲午夜极品| 国产精品xxx视频| 国产不卡精品视频| 91女厕偷拍女厕偷拍高清| 亚洲精品在线观看免费| 色婷婷av在线| 在线观看日韩国产| 美女被艹视频网站| 国内精品伊人久久久| 操人视频在线观看欧美| 青青国产在线观看| 久久av老司机精品网站导航| 国产日韩欧美亚洲一区| 午夜视频在线观看免费视频| 亚洲第一久久影院| 超碰在线公开97| 欧美成人基地| 久久中文字幕在线视频| 香蕉影院在线观看| 国产伦精品一区二区三区免费迷| 免费h精品视频在线播放| gogo在线高清视频| 在线视频中文字幕一区二区| 蜜桃视频无码区在线观看| 精品欧美久久| 午夜精品久久久久久99热软件| 亚洲字幕av一区二区三区四区| 国v精品久久久网| 一区二区三区四区欧美| 在线观看网站免费入口在线观看国内 | 精品在线观看免费| 欧美一二三区| wwww亚洲| 日韩欧美在线观看一区二区三区| 蜜臀久久99精品久久久久久| 99精品国产一区二区青青牛奶| 91美女片黄在线观看游戏| 国产黄在线看| 日韩欧美在线播放| 天天躁日日躁狠狠躁av麻豆男男| 亚洲激情中文| 国产色视频一区| 北岛玲一区二区三区| 一本一道久久a久久精品综合蜜臀| 潘金莲一级淫片aaaaaaa| 日韩在线观看| 国产精品欧美日韩一区二区| www视频在线观看免费| 色综合色狠狠天天综合色| youjizz.com国产| 欧美午夜久久| 亚洲一区国产精品| 国产乱色在线观看| 6080yy午夜一二三区久久| 刘亦菲国产毛片bd| 日日夜夜精品视频天天综合网| 久久综合一区二区三区| 玖玖在线播放| 日韩精品小视频| 中文字幕第28页| 不卡一区中文字幕| 国产素人在线观看| 色婷婷综合久久久久久| 欧美亚洲伦理www| 青青青草原在线| 色噜噜夜夜夜综合网| 这里只有久久精品| 日本v片在线高清不卡在线观看| 日韩电影天堂视频一区二区| 亚洲不卡系列| 最好看的2019年中文视频| 一本久道久久综合无码中文| 最新欧美精品一区二区三区| 自拍一级黄色片| 国产精品啊v在线| 国产一级二级三级精品| 欧美人体一区二区三区| 中文字幕精品—区二区| 国产又粗又猛又爽又黄的视频一| 综合激情成人伊人| 人妻av一区二区三区| 亚洲少妇诱惑| 天堂社区 天堂综合网 天堂资源最新版| 性欧美gay| 久久精品视频免费播放| 亚洲精品一级片| 偷拍亚洲欧洲综合| 五月婷六月丁香| 国产高清一区日本| 国产亚洲天堂网| 一级黄色片大全| 日本成人7777| 国产精品久久久久久久久久99 | 国产美女免费看| 亚洲福利一区二区| av女人的天堂| 国产一区二区福利| 黄色影院一级片| 久久免费精品视频在这里| 国产精品美女诱惑| 日韩毛片一区| 久久男人av资源网站| 电影在线一区| 亚洲精品一区二区三区福利| 男人的天堂av网站| 一个色妞综合视频在线观看| 精品人妻少妇嫩草av无码| 久久se精品一区二区| 国产玉足脚交久久欧美| 欧美一二区在线观看| 99国产视频在线| 成人免费网站www网站高清| 萌白酱国产一区二区| 九色蝌蚪在线| 精品福利二区三区| 艳妇乳肉豪妇荡乳av无码福利 | 国产日韩一区二区在线| 性xxxx欧美老肥妇牲乱| 久久综合色一本| 日韩成人在线看| 国产成人av一区| 日韩精品欧美一区二区三区| 一区二区三区亚洲变态调教大结局| 欧美中文字幕精品| 午夜小视频福利在线观看| 在线观看国产成人av片| 性感美女福利视频| 日韩三级在线观看| 夜夜嗨av禁果av粉嫩avhd| 富二代精品短视频| 久久久久久国产精品视频| 国产精品美女久久久久久久久久久 | 电影亚洲精品噜噜在线观看| 欧美国产日韩视频| 蜜桃视频在线观看www社区| 日韩hd视频在线观看| www.香蕉视频| 欧美久久久一区| 男人天堂视频网| 欧美性猛交xxxx乱大交3| 五月天婷婷丁香| 一区二区三区中文字幕电影| 精品在线观看一区| 国产欧美一区二区精品性色| 激情综合丁香五月| 成人激情黄色小说| 亚洲欧美高清在线| 成人精品小蝌蚪| 亚洲在线观看网站| 国产一区二区三区av电影| 亚洲这里只有精品| 久久精品国产免费| 欧美成人三级在线播放| 欧美a级一区二区| 午夜dv内射一区二区| 日韩综合小视频| 视频午夜在线| 日韩欧美一区二区视频| 91美女精品网站| 欧美日韩综合在线免费观看| 久久影视中文字幕| 欧美最新大片在线看| 蜜臀尤物一区二区三区直播| 91黄色免费观看| 中文字幕+乱码+中文乱码91| 亚洲一区二区免费在线观看| 最近日韩中文字幕中文| 邻居大乳一区二区三区| 国产亚洲精品高潮| av在线1区2区| 日韩网站在线观看| 国产激情在线视频| 欧美黑人巨大精品一区二区| 大桥未久在线播放| 91超碰caoporn97人人| 不卡一二三区| 国产精品爽黄69| 国产精品一区二区精品视频观看| 99精品国产一区二区| 久久久伦理片| 日本视频一区二区在线观看| 日韩激情图片| 免费日韩在线观看| 亚洲精品系列| 亚洲精品高清无码视频| 韩国女主播成人在线| wwwww在线观看| 久久色.com| 日本免费网站视频| 亚洲影视资源网| 亚洲欧美另类在线视频| 欧美男人的天堂一二区| 亚洲免费一级片| 亚洲精品中文字幕av| 日本在线www| 欧美精品一二区| 精品国产第一福利网站| 国产欧美日韩综合精品| 91精品国产乱码久久久竹菊| 久久久水蜜桃| 一级毛片免费高清中文字幕久久网| 免费一级特黄特色毛片久久看| 日韩不卡一区二区| 又黄又爽又色的视频| 久久亚洲一级片| a在线视频播放观看免费观看| 天天综合日日夜夜精品| 一女二男一黄一片| 亚洲精品97久久| 免费黄色在线观看| 国产91精品不卡视频| 久久亚洲人体| 久久综合色一本| 很黄很黄激情成人| 手机视频在线观看| 成人av一区二区三区| 日本黄区免费视频观看| 婷婷成人综合网| 国产又黄又粗又长| 亚洲人成电影网站色www| 日本理论片午伦夜理片在线观看| 国产精品久久久久久网站| 高清精品视频| 裸体大乳女做爰69| 日日夜夜免费精品视频| 超碰caoprom| 亚洲欧美视频在线观看| 久久久久亚洲视频| 亚洲黄色有码视频| 肉体视频在线| 成人有码在线播放| 欧美一区二区麻豆红桃视频| 日本欧美黄色片| 成人免费毛片嘿嘿连载视频| 182在线观看视频| 在线精品视频小说1| 色视频精品视频在线观看| 欧美精品久久久久| 日韩精品成人| 国产日韩视频在线播放| 琪琪一区二区三区| mm131美女视频| 午夜精品福利一区二区三区蜜桃| aa视频在线免费观看| www国产91| 日本成人一区二区| 亚洲精品一区二区三区樱花 | 欧美韩国一区二区| 亚洲图片在线视频| 国产偷国产偷亚洲清高网站 | 国产欧美日韩中文字幕在线| 色综合中文网| 日韩中文字幕免费在线| eeuss鲁片一区二区三区在线观看 eeuss影院一区二区三区 | 777久久精品| 国产va亚洲va在线va| 成人av在线看| 欧美精品二区三区| 亚洲网站在线播放| 视频在线日韩| 亚洲国产综合自拍| 久久成人羞羞网站| 天天色影综合网| 日韩欧美激情四射| 免费影视亚洲| 久久av二区| 日韩在线一区二区| 亚洲不卡的av| 91麻豆精品国产91久久久资源速度 | 国产精华7777777| 中文字幕日韩欧美在线| 婷婷激情成人| 久久久久久av无码免费网站下载| 久久精品国产**网站演员| www日韩在线| 欧美videos中文字幕| 岛国av在线播放| 日韩av高清在线播放| 免费成人在线影院| 91麻豆免费视频网站| 精品成a人在线观看| 中文在线8资源库| 亚洲精品第一区二区三区| 国产在线播放一区三区四| 麻豆chinese极品少妇| 亚洲第一网站免费视频| 日韩精品99| 一区二区三区不卡在线| 国产高清亚洲一区| 五月天激情国产综合婷婷婷| 日韩中文字幕视频在线观看| 亚洲国产视频二区| 可以免费观看av毛片| 国产精品第一页第二页第三页| 亚洲第一成人av| 日韩av免费网站| 亚洲色图国产| 日本黄色特级片| 欧美精品日韩综合在线| 狂野欧美性猛交xxxxx视频| 欧美午夜精品久久久久免费视 | 国产日韩欧美高清免费| 欧美另类69xxxx| 亚洲第一av网站| 欧美日韩伦理一区二区| 男女高潮又爽又黄又无遮挡| 亚洲欧洲精品一区二区三区| 亚洲 欧美 激情 小说 另类| 成人欧美一区二区三区黑人孕妇 | 久久精品国产99久久99久久久| 狠狠躁夜夜躁人人爽天天天天97| 麻豆tv免费在线观看| 欧美午夜精品理论片a级大开眼界|