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

5秒到1秒,記一次效果“非常”顯著的性能優(yōu)化

開發(fā) 前端
性能優(yōu)化,有時候看起來是一個比較虛的技術(shù)需求。除非代碼慢的已經(jīng)讓人無法忍受,否則,很少有公司會有覺悟投入資源去做這些工作。即使你有了性能指標數(shù)據(jù),也很難說服領(lǐng)導(dǎo)做一個由耗時300ms降低到150ms的改進,因為它沒有業(yè)務(wù)價值。

[[419784]]

性能優(yōu)化,有時候看起來是一個比較虛的技術(shù)需求。除非代碼慢的已經(jīng)讓人無法忍受,否則,很少有公司會有覺悟投入資源去做這些工作。即使你有了性能指標數(shù)據(jù),也很難說服領(lǐng)導(dǎo)做一個由耗時300ms降低到150ms的改進,因為它沒有業(yè)務(wù)價值。

這很讓人傷心,但這是悲催的現(xiàn)實。

性能優(yōu)化,通常由有技術(shù)追求的人發(fā)起,根據(jù)觀測指標進行的正向優(yōu)化。他們通常具有工匠精神,對每一毫秒的耗時都吹毛求疵,力求完美。當然,前提是你得有時間。

1. 優(yōu)化背景和目標

我們本次的性能優(yōu)化,就是由于達到了無法忍受的程度,才進行的優(yōu)化工作,屬于事后補救,問題驅(qū)動的方式。這通常沒什么問題,畢竟業(yè)務(wù)第一嘛,迭代在填坑中進行。

先說背景。本次要優(yōu)化的服務(wù),請求響應(yīng)時間十分的不穩(wěn)定。隨著數(shù)據(jù)量的增加,大部分請求,要耗時5-6秒左右!超出了常人能忍受的范圍。

當然需要優(yōu)化。

為了說明要優(yōu)化的目標,我大體畫了一下它的拓撲結(jié)構(gòu)。如圖所示,這是一套微服務(wù)架構(gòu)的服務(wù)。

其中,我們優(yōu)化的目標,就處于一個比較靠上游的服務(wù)。它需要通過Feign接口,調(diào)用下游非常多的服務(wù)提供者,獲取數(shù)據(jù)后進行聚合拼接,最終通過zuul網(wǎng)關(guān)和nginx,來發(fā)送到瀏覽器客戶端。

為了觀測服務(wù)之間的調(diào)用關(guān)系和監(jiān)控數(shù)據(jù),我們接入了Skywalking調(diào)用鏈平臺和Prometheus監(jiān)控平臺,收集重要的數(shù)據(jù)以便能夠進行優(yōu)化決策。要進行優(yōu)化之前,我們需要首先看一下優(yōu)化需要參考的兩個技術(shù)指標。

  • 吞吐量:單位時間內(nèi)發(fā)生的次數(shù)。比如QPS、TPS、HPS等。
  • 平均響應(yīng)時間:每個請求的平均耗時。

平均響應(yīng)時間自然是越小越好,它越小,吞吐量越高。吞吐量的增加還可以合理利用多核,通過并行度增加單位時間內(nèi)的發(fā)生次數(shù)。

我們本次優(yōu)化的目標,就是減少某些接口的平均響應(yīng)時間,降低到1秒以內(nèi);增加吞吐量,也就是提高QPS,讓單實例系統(tǒng)能夠承接更多的并發(fā)請求。

2. 通過壓縮讓耗時急劇減少

我想要先介紹讓系統(tǒng)飛起來最重要的一個優(yōu)化手段:壓縮。

通過在chrome的inspect中查看請求的數(shù)據(jù),我們發(fā)現(xiàn)一個關(guān)鍵的請求接口,每次要傳輸大約10MB的數(shù)據(jù)。這得塞了多少東西。

這么大的數(shù)據(jù),光下載就需要耗費大量時間。如下圖所示,是我請求juejin主頁的某一個請求,其中的content download,就代表了數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸時間。如果用戶的帶寬非常慢,那么這個請求的耗時,將會是非常長的。

為了減少數(shù)據(jù)在網(wǎng)絡(luò)上的傳輸時間,可以啟用gzip壓縮。gzip壓縮是屬于時間換空間的做法。對于大多數(shù)服務(wù)來說,最后一環(huán)是nginx,大多數(shù)人都會在nginx這一層去做壓縮。它的主要配置如下:

  1. gzip on
  2. gzip_vary on
  3. gzip_min_length 10240; 
  4. gzip_proxied expired no-cache no-store private auth; 
  5. gzip_types text/plain text/css text/xml text/javascript application/x-javascript application/xml; 
  6. gzip_disable "MSIE [1-6]\."

壓縮率有多驚人呢?我們可以看一下這張截圖。可以看到,數(shù)據(jù)壓縮后,由8.95MB縮減到了368KB!瞬間就能夠被瀏覽器下載下來。

但是等等,nginx只是最外面的一環(huán),還沒完,我們還可以讓請求更快一些。

請看下面的請求路徑,由于采用了微服務(wù),請求的流轉(zhuǎn)就變得復(fù)雜起來:nginx并不是直接調(diào)用了相關(guān)得服務(wù),它調(diào)用的是zuul網(wǎng)關(guān),zuul網(wǎng)關(guān)才真正調(diào)用的目標服務(wù),目標服務(wù)又另外調(diào)用了其他服務(wù)。內(nèi)網(wǎng)帶寬也是帶寬,網(wǎng)絡(luò)延遲也會影響調(diào)用速度,同樣也要壓縮起來。

  1. nginx->zuul->服務(wù)A->服務(wù)E 

要想Feign之間的調(diào)用全部都走壓縮通道,還需要額外的配置。我們是springboot服務(wù),可以通過okhttp的透明壓縮進行處理。

加入它的依賴:

  1. <dependency> 
  2.  <groupId>io.github.openfeign</groupId> 
  3.  <artifactId>feign-okhttp</artifactId> 
  4. </dependency> 

開啟服務(wù)端配置:

  1. server: 
  2.   port:8888 
  3.   compression: 
  4.     enabled:true 
  5.     min-response-size:1024 
  6.     mime-types:["text/html","text/xml","application/xml","application/json","application/octet-stream"

開啟客戶端配置:

  1. feign: 
  2.   httpclient: 
  3.     enabled:false 
  4.   okhttp: 
  5.     enabled:true 

經(jīng)過這些壓縮之后,我們的接口平均響應(yīng)時間,直接從5-6秒降低到了2-3秒,優(yōu)化效果非常顯著。

當然,我們也在結(jié)果集上做了文章,在返回給前端的數(shù)據(jù)中,不被使用的對象和字段,都進行了精簡。但一般情況下,這些改動都是傷筋動骨的,需要調(diào)整大量代碼,所以我們在這上面用的精力有限,效果自然也有限。

3. 并行獲取數(shù)據(jù),響應(yīng)飛快

接下來,就要深入到代碼邏輯內(nèi)部進行分析了。上面我們提到,面向用戶的接口,其實是一個數(shù)據(jù)聚合接口。它的每次請求,通過Feign,調(diào)用了幾十個其他服務(wù)的接口,進行數(shù)據(jù)獲取,然后拼接結(jié)果集合。

為什么慢?因為這些請求全部是串行的!Feign調(diào)用屬于遠程調(diào)用,也就是網(wǎng)絡(luò)I/O密集型調(diào)用,多數(shù)時間都在等待,如果數(shù)據(jù)滿足的話,是非常適合并行調(diào)用的。

首先,我們需要分析這幾十個子接口的依賴關(guān)系,看一下它們是否具有嚴格的順序性要求。如果大多數(shù)沒有,那就再好不過了。

分析結(jié)果喜憂參半,這堆接口,按照調(diào)用邏輯,大體上可以分為A,B類。首先,需要請求A類接口,拼接數(shù)據(jù)后,這些數(shù)據(jù)再供B類使用。但在A,B類內(nèi)部,是沒有順序性要求的。

也就是說,我們可以把這個接口,拆分成順序執(zhí)行的兩部分,在某個部分都可以并行的獲取數(shù)據(jù)。

那就按照這種分析結(jié)果改造試試吧,使用concurrent包里的CountDownLatch,很容易的就實現(xiàn)了并取功能。

  1. CountDownLatch latch = new CountDownLatch(jobSize); 
  2. //submit job 
  3. executor.execute(() -> {  
  4.     //job code 
  5.  latch.countDown();  
  6. });  
  7. executor.execute(() -> {  
  8.  latch.countDown();  
  9. });  
  10. ... 
  11. //end submit 
  12. latch.await(timeout, TimeUnit.MILLISECONDS);  

結(jié)果非常讓人滿意,我們的接口耗時,又減少了接近一半!此時,接口耗時已經(jīng)降低到2秒以下。

你可能會問,為什么不用Java的并行流呢?關(guān)于并行流的坑,可以參考這篇文章。非常不建議你使用它。

并發(fā)編程一定要小心,尤其是在業(yè)務(wù)代碼中的并發(fā)編程。我們構(gòu)造了專用的線程池,來支撐這個并發(fā)獲取的功能。

  1. final ThreadPoolExecutor executor = new ThreadPoolExecutor(100, 200, 1,  
  2.             TimeUnit.HOURS, new ArrayBlockingQueue<>(100));  

壓縮和并行化,是我們本次優(yōu)化中,最有效的手段。它們直接砍掉了請求大半部分的耗時,非常的有效。但我們還是不滿足,因為每次請求,依然有1秒鐘以上呢。

4. 緩存分類,進一步加速

我們發(fā)現(xiàn),有些數(shù)據(jù)的獲取,是放在循環(huán)中的,有很多無效請求,這不能忍。

  1. for(List){ 
  2.     client.getData(); 

如果將這些常用的結(jié)果緩存起來,那么就可以大大減少網(wǎng)絡(luò)IO請求的次數(shù),增加程序的運行效率。

緩存在大多數(shù)應(yīng)用程序的優(yōu)化中,作用非常大。但由于壓縮和并行效果的對比,緩存在我們這個場景中,效果不是非常的明顯,但依然減少了大約三四十毫秒的請求時間。

我們是這么做的。

首先,我們將一部分代碼邏輯簡單,適合Cache Aside Pattern模式的數(shù)據(jù),放在了分布式緩存Redis中。具體來說,就是讀取的時候,先讀緩存,緩存讀不到的時候,再讀數(shù)據(jù)庫;更新的時候,先更新數(shù)據(jù)庫,再刪除緩存(延時雙刪)。使用這種方式,能夠解決大部分業(yè)務(wù)邏輯簡單的緩存場景,并能解決數(shù)據(jù)的一致性問題。

但是,僅僅這么做是不夠的,因為有些業(yè)務(wù)邏輯非常的復(fù)雜,更新的代碼發(fā)非常的分散,不適合使用Cache Aside Pattern進行改造。我們了解到,有部分數(shù)據(jù),具有以下特點:

  • 這些數(shù)據(jù),通過耗時的獲取之后,在極端的時間內(nèi),會被再次用到
  • 業(yè)務(wù)數(shù)據(jù)對它們的一致性要求,可以控制在秒級別以內(nèi)
  • 對于這些數(shù)據(jù)的使用,跨代碼、跨線程,使用方式多樣

針對于這種情況,我們設(shè)計了存在時間極短的堆內(nèi)內(nèi)存緩存,數(shù)據(jù)在1秒之后,就會失效,然后重新從數(shù)據(jù)庫中讀取。加入某個節(jié)點調(diào)用服務(wù)端接口是1秒鐘1k次,我們直接給降低到了1次。

在這里,使用了Guava的LoadingCache,減少的Feign接口調(diào)用,是數(shù)量級的。

  1. LoadingCache<String, String> lc = CacheBuilder 
  2.       .newBuilder() 
  3.       .expireAfterWrite(1,TimeUnit.SECONDS) 
  4.       .build(new CacheLoader<String, String>() { 
  5.       @Override 
  6.       public String load(String key) throws Exception { 
  7.             return slowMethod(key); 
  8. }}); 

5. MySQL索引的優(yōu)化

我們的業(yè)務(wù)系統(tǒng),使用的是MySQL數(shù)據(jù)庫,由于沒有專業(yè)DBA介入,而且數(shù)據(jù)表是使用JPA生成的。在優(yōu)化的時候,發(fā)現(xiàn)了大量不合理的索引,當然是要優(yōu)化掉。

由于SQL具有很強的敏感性,我這里只談一些在優(yōu)化過程中碰到的索引優(yōu)化規(guī)則問題,相信你一樣能夠在自己的業(yè)務(wù)系統(tǒng)中進行類比。

索引非常有用,但是要注意,如果你對字段做了函數(shù)運算,那索引就用不上了。常見的索引失效,還有下面兩種情況:

  • 查詢的索引字段類型,與用戶傳遞的數(shù)據(jù)類型不同,要做一層隱式轉(zhuǎn)換。比如varchar類型的字段上,傳入了int參數(shù)
  • 查詢的兩張表之間,使用的字符集不同,也就無法使用關(guān)聯(lián)字段作為索引

MySQL的索引優(yōu)化,最基本的是遵循最左前綴原則,當有a、b、c三個字段的時候,如果查詢條件用到了a,或者a、b,或者a、b、c,那么我們就可以創(chuàng)建(a,b,c)一個索引即可,它包含了a和ab。當然,字符串也是可以加前綴索引的,但在平常應(yīng)用中較少。

有時候,MySQL的優(yōu)化器,會選擇了錯誤的索引,我們需要使用force index指定所使用的索引。在JPA中,就要使用nativeQuery,來書寫綁定到MySQL數(shù)據(jù)庫的SQL語句,我們盡量的去避免這種情況。

另外一個優(yōu)化是減少回表。由于InnoDB采用了B+樹,但是如果不使用非主鍵索引,會通過二級索引(secondary index)先查到聚簇索引(clustered index),然后再定位到數(shù)據(jù)。多了一步,產(chǎn)生回表。使用覆蓋索引,可以一定程度上避免回表,是常用的優(yōu)化手段。具體做法,就是把要查詢的字段,與索引放在一起做聯(lián)合索引,是一種空間換時間的做法。

6. JVM優(yōu)化

我通常將JVM的優(yōu)化放在最后一環(huán)。而且,除非系統(tǒng)發(fā)生了嚴重的卡頓,或者OOM問題,都不會主動對其進行過度優(yōu)化。

很不幸的是,我們的應(yīng)用,由于開啟了大內(nèi)存(8GB+),在JDK1.8默認的并行收集器下,經(jīng)常發(fā)生卡頓。雖然不是很頻繁,但動輒幾秒鐘,已經(jīng)嚴重影響到部分請求的平滑性。

程序剛開始,是光禿禿跑在JVM下的,GC信息,還有OOM,什么都沒留下。為了記錄GC信息,我們做了如下的改造。

第一步,加入GC問題排查的各種參數(shù)。

  1. -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/opt/xxx.hprof  -DlogPath=/ 

這樣,我們就可以拿著生成的GC文件,上傳到gceasy等平臺進行分析。可以查看JVM的吞吐量和每個階段的延時等。

第二步,開啟SpringBoot的GC信息,接入Promethus監(jiān)控。

在pom中加入依賴。

  1. <dependency> 
  2.   <groupId>org.springframework.boot</groupId> 
  3.   <artifactId>spring-boot-starter-actuator</artifactId> 
  4. </dependency> 

然后配置暴露點就可以了。這樣,我們就擁有了實時的分析數(shù)據(jù),有了優(yōu)化的依據(jù)。

  1. management.endpoints.web.exposure.include=health,info,prometheus 

在觀測了JVM的表現(xiàn)之后,我們切換成了G1垃圾回收器。G1有最大停頓目標,可以讓我們的GC時間更加的平滑。它主要有以下幾個調(diào)優(yōu)參數(shù):

  • -XX:MaxGCPauseMillis 設(shè)置目標停頓時間,G1會盡力達成。
  • -XX:G1HeapRegionSize 設(shè)置小堆區(qū)大小。這個值為2的次冪,不要太大,也不要太小。如果是在不知道如何設(shè)置,保持默認。
  • -XX:InitiatingHeapOccupancyPercent 當整個堆內(nèi)存使用達到一定比例(默認是45%),并發(fā)標記階段就會被啟動。
  • -XX:ConcGCThreads 并發(fā)垃圾收集器使用的線程數(shù)量。默認值隨JVM運行的平臺不同而不同。不建議修改。

切換成G1之后,這種不間斷的停頓,竟然神奇的消失了!期間,還發(fā)生過很多次內(nèi)存溢出的問題,不過有MAT這種神器的加持,最終都很easy的被解決了。

7. 其他優(yōu)化

在工程結(jié)構(gòu)和架構(gòu)方面,如果有硬傷的話,那么代碼優(yōu)化方面,起到的作用其實是有限的,就比如我們這種情況。

但主要代碼還是要整一下容得。有些處于高耗時邏輯中的關(guān)鍵的代碼,我們對其進行了格外的關(guān)照。按照開發(fā)規(guī)范,對代碼進行了一次統(tǒng)一的清理。其中,有幾個印象比較深深刻的點。

有同學為了能夠復(fù)用map集合,每次用完之后,都使用clear方法進行清理。

  1. map1.clear(); 
  2. map2.clear(); 
  3. map3.clear(); 
  4. map4.clear(); 

這些map中的數(shù)據(jù),特別的多,而clear方法有點特殊,它的時間復(fù)雜度事O(n)的,造成了較高的耗時。

  1. public void clear() { 
  2.     Node<K,V>[] tab; 
  3.     modCount++; 
  4.     if ((tab = table) != null && size > 0) { 
  5.         size = 0; 
  6.         for (int i = 0; i < tab.length; ++i) 
  7.             tab[i] = null
  8.     } 

同樣的線程安全的隊列,有ConcurrentLinkedQueue,它的size()方法,時間復(fù)雜度非常高,不知怎么就被同事給用上了,這都是些性能殺手。

  1. public int size() { 
  2.         restartFromHead: for (;;) { 
  3.             int count = 0; 
  4.             for (Node<E> p = first(); p != null;) { 
  5.                 if (p.item != null
  6.                     if (++count == Integer.MAX_VALUE) 
  7.                         break;  // @see Collection.size() 
  8.                 if (p == (p = p.next)) 
  9.                     continue restartFromHead; 
  10.             } 
  11.             return count
  12.         } 

另外,有些服務(wù)的web頁面,本身響應(yīng)就非常的慢,這是由于業(yè)務(wù)邏輯復(fù)雜,前端JavaScript本身就執(zhí)行緩慢。這部分代碼優(yōu)化,就需要前端的同事去處理了,如圖,使用chrome或者firefox的performance選項卡,可以很容易發(fā)現(xiàn)耗時的前端 代碼。

8. 總結(jié)

性能優(yōu)化,其實也是有套路的,但一般團隊都是等發(fā)生了問題才去優(yōu)化,鮮有未雨綢繆的。但有了監(jiān)控和APM就不一樣,我們能夠隨時拿到數(shù)據(jù),反向推動優(yōu)化過程。

有些性能問題,能夠在業(yè)務(wù)需求層面,或者架構(gòu)層面去解決。凡是已經(jīng)帶到代碼層,需要程序員介入的優(yōu)化,都已經(jīng)到了需求方和架構(gòu)方不能再亂動,或者不想再動的境地。

性能優(yōu)化首先要收集信息,找出瓶頸點,權(quán)衡CPU、內(nèi)存、網(wǎng)絡(luò)、、IO等資源,然后盡量的減少平均響應(yīng)時間,提高吞吐量。

緩存、緩沖、池化、減少鎖沖突、異步、并行、壓縮,都是常見的優(yōu)化方式。在我們的這個場景中,起到最大作用的,就是數(shù)據(jù)壓縮和并行請求。當然,加上其他優(yōu)化方法的協(xié)助,我們的業(yè)務(wù)接口,由5-6秒的耗時,直接降低到了1秒之內(nèi),這個優(yōu)化效果還是非常可觀的。估計在未來很長一段時間內(nèi),都不會再對它進行優(yōu)化了。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎(chǔ)架構(gòu)和Linux。十年架構(gòu),日百億流量,與你探討高并發(fā)世界,給你不一樣的味道。

 

責任編輯:武曉燕 來源: 小姐姐味道
相關(guān)推薦

2019-09-27 17:24:26

數(shù)據(jù)庫優(yōu)化sql

2019-08-21 14:35:18

壓縮文件優(yōu)化過程Java

2020-11-12 18:51:43

Java編程語言

2011-02-22 09:29:23

jQueryJavaScript

2020-06-05 08:53:31

接口性能實踐

2020-08-10 11:00:02

Python優(yōu)化代碼

2015-07-17 10:04:33

MKMapView優(yōu)化

2023-11-29 08:10:52

類型sql語句

2011-09-27 10:35:44

2019-01-30 09:34:56

ElasticSearLogstashKibana

2021-01-08 13:52:15

Consul微服務(wù)服務(wù)注冊中心

2013-11-11 11:17:45

AngularJS性能優(yōu)化

2018-07-11 10:24:33

數(shù)據(jù)恢復(fù)數(shù)據(jù)刪除

2021-12-27 10:08:16

Python編程語言

2020-10-24 13:50:59

Python編程語言

2023-01-05 11:44:43

性能HTTPS

2025-03-24 08:51:16

2022-09-26 09:41:25

MySQL數(shù)據(jù)庫

2019-04-04 15:00:40

SQL索引數(shù)據(jù)庫

2011-08-12 09:30:02

MongoDB
點贊
收藏

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

91在线免费播放| 91视频综合| 欧美视频二区36p| 国产一区二区中文字幕免费看 | 久久在线观看免费| 日韩av免费在线播放| 色欲狠狠躁天天躁无码中文字幕| 正在播放日韩精品| 国产精品视频观看| 亚洲综合小说区| 国产69精品久久久久久久久久| 亚洲宅男一区| 日本久久一二三四| 色天使久久综合网天天| 日韩av影视| 精品国产九九九| 亚洲欧洲日本mm| 亚洲欧美一区二区三区久久| 日韩av片网站| 色www永久免费视频首页在线 | 婷婷丁香花五月天| 日本在线不卡视频| 欧美高清视频一区二区| 国产精品扒开腿做爽爽| 国产一区一区| 一本色道综合亚洲| 麻豆传媒网站在线观看| 亚洲欧美日韩免费| 精品午夜久久福利影院| 欧美又大又粗又长| 日韩在线中文字幕视频| 精品九九在线| 精品国产乱码久久久久久影片| 国产第一页视频| 成年人视频免费在线观看| 国产aⅴ综合色| 国产精品久久久久久久久久99| 精品亚洲永久免费| 欧美va久久久噜噜噜久久| 亚洲国产三级网| 伊人国产精品视频| 欧美电影h版| 一区二区三区高清不卡| 一区二区三区在线观看www| 嫩草在线播放| 韩国一区二区三区| 国产精品扒开腿做爽爽爽视频| 久久久久成人网站| 999国产精品视频| 亚洲香蕉av在线一区二区三区| 亚洲视频天天射| 亚洲老司机网| 欧美日韩国产综合一区二区三区 | 国产一级二级三级| 久久在线电影| 在线观看国产成人av片| 黄色aaa视频| 欧美xxxx在线| 亚洲精品动漫久久久久| 中国特级黄色大片| 国产欧美日韩电影| 欧美日韩不卡一区| 色戒在线免费观看| 成人在线免费| 欧美日韩在线播放三区| 毛葺葺老太做受视频| 97se综合| 色综合久久88色综合天天6| a在线视频观看| 国内在线视频| 亚洲午夜免费电影| 草草草视频在线观看| 精品福利视频导航大全| 2022国产精品视频| 精品久久久久久中文字幕动漫| 国精产品一品二品国精品69xx| 国产精品亚洲成人| 成人综合色站| 丰满少妇一级片| 成a人片亚洲日本久久| 国产精品乱码| 日本久久一级片| www.视频一区| 欧美lavv| av在线第一页| 国产精品久久午夜夜伦鲁鲁| 精品国产综合| 婷婷五月综合久久中文字幕| 97se狠狠狠综合亚洲狠狠| 日本成人三级电影网站| 1pondo在线播放免费| 亚洲天堂免费在线观看视频| 青青草免费在线视频观看| 久草在线视频福利| 一二三四区精品视频| 成人av一级片| 日韩一区精品| 337p亚洲精品色噜噜| 麻豆免费在线观看视频| 台湾佬综合网| 亚洲性夜色噜噜噜7777| 国产免费一区二区三区四区| 欧美日韩免费观看一区=区三区| 久久久亚洲网站| 激情视频网站在线观看| 黑人精品欧美一区二区蜜桃 | 欧美激情18p| 综合网在线观看| 久久99精品国产.久久久久久| 5566av亚洲| 精品电影在线| 亚洲一区二区三区四区五区黄| 欧美三级在线观看视频| 午夜精品成人av| 在线免费一区三区| aaaaaaaa毛片| 性欧美xxxx免费岛国不卡电影| 中文字幕久热精品视频在线| 日本妇女毛茸茸| 久久这里有精品15一区二区三区| 亚洲qvod图片区电影| 久久天堂电影| 亚洲自拍另类综合| jizzzz日本| 五月天亚洲一区| 久久国产精品久久久久久久久久| 黄色在线免费观看| 国产成人av资源| 免费久久一级欧美特大黄| 成人在线免费看黄| 色综合久久综合| 亚洲成a人无码| 日韩精品中文字幕第1页| 久久久亚洲网站| 99riav国产| 中文字幕精品一区二区三区精品| 免费高清一区二区三区| 欧美成人免费全部网站| 亚洲人av在线影院| 日韩精品视频播放| 国产酒店精品激情| 亚洲精品成人自拍| 香蕉成人av| 日韩精品福利网站| 疯狂试爱三2浴室激情视频| 亚洲女人av| 国产伦精品一区二区三毛| caopon在线免费视频| 欧美综合欧美视频| 91视频免费观看网站| 国产精品久久777777毛茸茸| 成人欧美一区二区三区黑人免费| 嫩草精品影院| 欧美日韩激情网| 日韩精品国产一区| 亚洲免费二区| 亚洲影院高清在线| 菠萝菠萝蜜在线视频免费观看| 欧美亚日韩国产aⅴ精品中极品| 黄色国产在线观看| 亚洲麻豆视频| 国产视频在线观看一区| 国产高清在线a视频大全| 欧美午夜一区二区三区 | 国产精品三级视频| 日韩欧美黄色大片| 欧洲亚洲成人| 国产91av在线| 亚洲国产精彩视频| 亚洲国产裸拍裸体视频在线观看乱了| 99热这里只有精品2| 午夜精品久久| 国产激情美女久久久久久吹潮| 免费看电影在线| 亚洲成人xxx| 久久99国产综合精品免费| 91丨porny丨蝌蚪视频| 每日在线更新av| 小说区图片区色综合区| 国产精品电影在线观看| 四虎影视2018在线播放alocalhost| 欧美日韩中文字幕在线视频| 中文字幕在线免费看线人| 免费一区视频| 亚洲精品一区二区三| 日韩亚洲国产免费| 欧美日韩999| 午夜精品久久久久久久99老熟妇| 亚洲一区二区av在线| 99re这里只有| 日韩中文字幕一区二区三区| 亚洲精品成人a8198a| 欧美专区视频| 538国产精品视频一区二区| 国产一二三在线观看| 欧美日韩国产精品自在自线| 欧美人与禽zozzo禽性配| 国产iv一区二区三区| 18禁男女爽爽爽午夜网站免费 | 久久精品国产999大香线蕉| 好色先生视频污| 国产女人18毛片水真多18精品| 日本国产一区二区三区| 日本最黄一级片免费在线| 日韩亚洲国产中文字幕欧美| 久久国产精品二区| 国产欧美日韩三级| 少妇欧美激情一区二区三区| 亚洲欧美视频| 美国av在线播放| 日韩高清成人在线| 成人高h视频在线| 成av人片在线观看www| 国产一区二区三区在线看| 一卡二卡三卡在线| 亚洲sss视频在线视频| 手机看片日韩av| 岛国一区二区在线观看| 中文字幕国产传媒| 日韩午夜激情| 一区不卡视频| 亚洲欧洲av| 国产精品中文在线| 色爱综合区网| 日韩视频―中文字幕| 视频在线不卡| 日韩亚洲欧美综合| 在线免费观看一级片| 五月婷婷激情综合| 久久久视频6r| 91免费视频网| 精人妻一区二区三区| 久久久人人人| 欧美国产视频一区| 99久久夜色精品国产亚洲1000部| 久久久久久久久久久一区| 精品国产乱码久久久久久樱花| 国产成人亚洲综合91精品| 久热在线观看视频| 91国产视频在线| 免费h视频在线观看| 91精品国产91久久久久久不卡| 51精品视频| 97在线视频免费| 中国字幕a在线看韩国电影| 91成人在线视频| 欧美电影h版| 国产精品欧美日韩久久| 国产一区影院| 91夜夜未满十八勿入爽爽影院| 韩国三级大全久久网站| 亚洲综合av影视| 99精品中文字幕在线不卡| 国产九区一区在线| 日韩成人动漫在线观看| 久久艳妇乳肉豪妇荡乳av| 在线成人动漫av| 翔田千里亚洲一二三区| 91视频一区| 99久久久精品视频| 国产人成精品一区二区三| 国模杨依粉嫩蝴蝶150p| 免费人成黄页网站在线一区二区| 亚洲精品第三页| 成人久久18免费网站麻豆| 亚洲av成人无码一二三在线观看| 久久久久久久综合狠狠综合| 天堂在线中文视频| 亚洲欧美另类久久久精品| 精品无码m3u8在线观看| 色婷婷狠狠综合| 国产精品一区二区av白丝下载| 日韩精品中文字幕一区二区三区| 亚洲 国产 欧美 日韩| 亚洲亚裔videos黑人hd| a视频在线观看| 午夜剧场成人观在线视频免费观看| 韩国精品主播一区二区在线观看| 成人免费高清完整版在线观看| eeuss国产一区二区三区四区| 免费成人av网站| 888久久久| 青青视频在线播放| 国产毛片精品视频| 欧美 变态 另类 人妖| 亚洲欧洲精品一区二区三区不卡 | 欧美二区视频| 国产精品69页| 懂色一区二区三区免费观看| 一区二区三区四区免费| 亚洲精品大片www| 国产性生活视频| 日韩免费成人网| 成人在线免费公开观看视频| 色综合久久88| 秋霞国产精品| 激情视频在线观看一区二区三区| 日韩欧美高清| 看av免费毛片手机播放| 国产最新精品精品你懂的| 风间由美一二三区av片| 自拍偷自拍亚洲精品播放| 成人免费看片98欧美| 91精品国产色综合久久ai换脸| 日韩欧美在线观看一区二区| 欧美理论电影在线观看| 成人在线视频免费看| 精品日本一区二区三区| 希岛爱理一区二区三区| 久久精品网站视频| 99久免费精品视频在线观看| www色aa色aawww| 日本韩国欧美三级| 免费看黄网站在线观看| 久久夜色精品亚洲噜噜国产mv| 忘忧草在线www成人影院| 国产欧美丝袜| 欧美日韩一区二区三区四区在线观看 | 欧美涩涩网站| а 天堂 在线| 国产精品久久久久一区| 国产第一页在线观看| 日韩av在线一区| 暧暧视频在线免费观看| 114国产精品久久免费观看| 99re久久最新地址获取| 99热手机在线| 国产欧美一区二区精品婷婷| 午夜精品久久久久久久久久久久久蜜桃 | 中文字幕一区三区| 最近中文字幕免费观看| 日韩av在线天堂网| 久久影院午夜精品| 久久久99国产精品免费| 一区二区三区高清视频在线观看| 91精产国品一二三| 夜夜精品视频一区二区| 亚洲av无码国产精品久久不卡| 久久这里只有精品视频首页| 成年永久一区二区三区免费视频| 亚洲欧美日本国产有色| 欧美aaaaaa午夜精品| 亚洲综合欧美综合| 欧洲精品一区二区三区在线观看| 国产小视频在线| 国产精品白丝jk喷水视频一区| 国产99久久精品一区二区300| 欧美 国产 小说 另类| 久久久久久久综合| 亚洲精品无码久久久久 | 日皮视频在线观看| 91中文字精品一区二区| 亚洲视频日本| 久久久久久婷婷| 欧美日韩一区二区在线播放| 青青草手机在线| 国产精品久久久久久久久久久久久久| av在线不卡顿| 91丝袜超薄交口足| 一区二区久久久久| 少妇高潮一区二区三区69| 欧美一乱一性一交一视频| 奇米狠狠一区二区三区| 黄色片视频在线| 一区二区在线观看视频| 日本黄色不卡视频| 日本午夜在线亚洲.国产| 日韩美女一区二区三区在线观看| 超碰人人草人人| 亚洲一区二区av在线| 日本福利在线观看| 国产精品视频免费观看www| 一精品久久久| 亚洲精品女人久久久| 欧美四级电影在线观看| 69成人在线| 欧美日韩另类综合| 久久99日本精品| 日韩黄色a级片| 日韩在线视频线视频免费网站| 永久免费精品视频| 久久综合久久色| 亚洲精品一二三区| 日韩美女一级视频| 成人免费看片视频| 一本色道久久综合亚洲精品高清| 欧洲性xxxx| 精品成人佐山爱一区二区| 免费成人美女女| 日本一本中文字幕| 国产片一区二区三区| 亚洲第一页综合| 国产伦精品免费视频| 999在线观看精品免费不卡网站| 我不卡一区二区| 欧美成人video| 久久青草视频| 国产精品50p| 亚洲乱码国产乱码精品精98午夜| 你懂的在线免费观看|