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

硬核干貨:HTTP超時、重復請求必見坑點及解決方案

網絡
HTTP調用即通過HTTP協議執行一次網絡請求。既然是網絡請求,就有超時的可能性(可能你的網卡,也可能服務器所處網絡卡),因此在開發中需要注意

[[351757]]

 1 超時,無法避免的痛

HTTP調用即通過HTTP協議執行一次網絡請求。既然是網絡請求,就有超時的可能性(可能你的網卡,也可能服務器所處網絡卡),因此在開發中需要注意:

  • 框架設置的默認超時時間是否合理
  • 過短,請求還未處理完成,你就急不可待了!
  • 過長,請求早已超出正常響應時間而掛了
  • 考慮網絡不穩定性,超時后可以通過定時任務請求重試
  • 注意考慮服務端接口冪等性設計,即是否允許重試
  • 考慮框架是否會像瀏覽器那樣限制并發連接數,以免在高并發下,HTTP調用的并發數成為瓶頸

1.1 HTTP調用框架技術選型

  • Spring Cloud全家桶

          使用Feign進行聲明式的服務調用。

  • 只使用Spring Boot

           HTTP客戶端Apache HttpClient進行服務調用。

1.2 連接超時配置 && 讀取超時參數

雖然應用層是HTTP協議,但網絡層始終是TCP/IP協議。TCP/IP是面向連接的協議,在傳輸數據之前需要建立連接。所以網絡框架都會提供如下超時參數:

 

  • 連接超時參數ConnectTimeout

          可自定義配置的建立連接最長等待時間

  • 讀取超時參數ReadTimeout

          控制從Socket上讀取數據的最長等待時間。

1.3 常見踩坑點

連接超時配置過長

比如60s。TCP三次握手正常建立連接所需時間很短,在ms級最多到s級,不可能需要十幾、幾十秒,多半是網絡或防火墻配置問題。這時如果幾秒還連不上,那么可能永遠也連不上。所以設置特別長的連接超時無意義,1~5秒即可。

如果是純內網調用,還可以設更短,在下游服務無法連接時,快速失敗

無腦排查連接超時問題

服務一般會有多個節點,若別的客戶端通過負載均衡連接服務端,那么客戶端和服務端會直接建立連接,此時出現連接超時大概率是服務端問題

而若服務端通過Nginx反向代理來負載均衡,客戶端連接的其實是Nginx,而非服務端,此時出現連接超時應排查Nginx

讀取超時參數和讀取超時“坑點”

只要讀取超時,服務端程序的正常執行就一定中斷了?

案例

client接口內部通過HttpClient調用服務端接口server,客戶端讀取超時2秒,服務端接口執行耗時5秒。

 

調用client接口后,查看日志:

  • 客戶端2s后出現SocketTimeoutException,即讀取超時

  • 服務端卻泰然地在3s后執行完成

Tomcat Web服務器是把服務端請求提交到線程池處理,只要服務端收到請求,網絡層面的超時和斷開便不會影響服務端的執行。因此,出現讀取超時不能隨意假設服務端的處理情況,需要根據業務狀態考慮如何進行后續處理。

讀取超時只是Socket網絡層面概念,是數據傳輸的最長耗時,故將其配置很短

比如100ms。

發生讀取超時,網絡層面無法區分如下原因:

  • 服務端沒有把數據返回給客戶端
  • 數據在網絡上耗時較久或丟包

但TCP是連接建立完成后才傳輸數據,對于網絡情況不是特差的服務調用,可認為:

  • 連接超時

          網絡問題或服務不在線

  • 讀取超時

          服務處理超時。讀取超時意味著向Socket寫入數據后,我們等到Socket返回數據的超時時間,其中包含的時間或者說絕大部分時間,是服務端處理業務邏輯的時間

超時時間越長,任務接口成功率越高,便將讀取超時參數配置過長

HTTP請求一般需要獲得結果,屬同步調用。

若超時時間很長,在等待 Server 返回數據同時,Client 線程(通常為 Tomcat 線程)也在等待,當下游服務出現大量超時,程序可能也會受到拖累創建大量線程,最終崩潰。

  • 對定時任務或異步任務,讀取超時配置較長問題不大
  • 但面向用戶響應的請求或是微服務平臺的同步接口調用,并發量一般較大,應該設置一個較短的讀取超時時間,以防止被下游服務拖慢,通常不會設置讀取超時超過30s。

評論可能會有人問了,若把讀取超時設為2s,而服務端接口需3s,不就永遠拿不到執行結果?

的確,因此設置讀取超時要結合實際情況:

過長可能會讓下游抖動影響到自己

過短又可能影響成功率。甚至,有些時候我們還要根據下游服務的SLA,為不同的服務端接口設置不同的客戶端讀取超時。

1.4 最佳實踐

連接超時代表建立TCP連接的時間,讀取超時代表了等待遠端返回數據的時間,也包括遠端程序處理的時間。在解決連接超時問題時,我們要搞清楚連的是誰;在遇到讀取超時問題的時候,我們要綜合考慮下游服務的服務標準和自己的服務標準,設置合適的讀取超時時間。此外,在使用諸如Spring Cloud Feign等框架時務必確認,連接和讀取超時參數的配置是否正確生效。

2 Feign&&Ribbon

2.1 如何配置超時

為Feign配置超時參數的難點在于,Feign自身有兩個超時參數,它使用的負載均衡組件Ribbon本身還有相關配置。這些配置的優先級是啥呢?

2.2 案例

  • 測試服務端超時,假設服務端接口,只休眠10min

  • Feign調用該接口:

 

  • 通過Feign Client進行接口調用

在配置文件僅指定服務端地址的情況下:

  1. clientsdk.ribbon.listOfServers=localhost:45678 

得到如下輸出:

  1. [21:46:24.222] [http-nio-45678-exec-4] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController:26  ] -  
  2.     執行耗時:222ms 錯誤:Connect to localhost:45679 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1]  
  3.         failed: Connection refused (Connection refused) executing  
  4.             POST http://clientsdk/feignandribbon/server 

Feign默認讀取超時是1秒,如此短的讀取超時算是“坑”。

分析源碼

自定義配置Feign客戶端的兩個全局超時時間

可以設置如下參數:

  1. feign.client.config.default.readTimeout=3000 
  2. feign.client.config.default.connectTimeout=3000 

修改配置后重試,得到如下日志:

  1. [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController    :26  ] - 執行耗時:3006ms 錯誤:Read timed out executing POST http://clientsdk/feignandribbon/server 

3秒讀取超時生效。

注意:這里有一個大坑,如果希望只修改讀取超時,可能會只配置這么一行:

  1. feign.client.config.default.readTimeout=3000 

測試會發現,這樣配置無法生效。

要配置Feign讀取超時,必須同時配置連接超時

查看FeignClientFactoryBean源碼

  • 只有同時設置ConnectTimeout、ReadTimeout,Request.Options才會被覆蓋

想針對單獨的Feign Client設置超時時間,可以把default替換為Client的name:

  1. feign.client.config.default.readTimeout=3000 
  2. feign.client.config.default.connectTimeout=3000 
  3. feign.client.config.clientsdk.readTimeout=2000 
  4. feign.client.config.clientsdk.connectTimeout=2000 

單獨的超時可覆蓋全局超時

  1. [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController    :26  ] -  
  2. 執行耗時:2006ms 錯誤:Read timed out executing  
  3. POST http://clientsdk/feignandribbon/server 

除了可以配置Feign,也可配置Ribbon組件的參數以修改兩個超時時間

參數首字母要大寫,和Feign的配置不同。

  1. ribbon.ReadTimeout=4000 
  2. ribbon.ConnectTimeout=4000 

可以通過日志證明參數生效:

  1. [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController    :26  ] -  
  2. 執行耗時:4003ms 錯誤:Read timed out executing  
  3. POST http://clientsdk/feignandribbon/server 

同時配置Feign和Ribbon的參數

誰會生效?

  1. clientsdk.ribbon.listOfServers=localhost:45678 
  2. feign.client.config.default.readTimeout=3000 
  3. feign.client.config.default.connectTimeout=3000 
  4. ribbon.ReadTimeout=4000 
  5. ribbon.ConnectTimeout=4000 

最終生效的是Feign的超時:

  1. [http-nio-45678-exec-3] [WARN ] [o.g.t.c.h.f.FeignAndRibbonController    :26  ] -  
  2. 執行耗時:3006ms 錯誤:Read timed out executing  
  3. POST http://clientsdk/feignandribbon/server 

同時配置Feign和Ribbon的超時,以Feign為準

在LoadBalancerFeignClient源碼

如果Request.Options不是默認值,就會創建一個FeignOptionsClientConfig代替原來Ribbon的DefaultClientConfigImpl,導致Ribbon的配置被Feign覆蓋:

但若這么配置,最終生效的還是Ribbon的超時(4秒),難點Ribbon又反覆蓋了Feign?不,這還是因為坑點二,單獨配置Feign的讀取超時無法生效:

  1. clientsdk.ribbon.listOfServers=localhost:45678 
  2. feign.client.config.default.readTimeout=3000 
  3. feign.client.config.clientsdk.readTimeout=2000 
  4. ribbon.ReadTimeout=4000 

3 Ribbon自動重試請求

一些HTTP客戶端往往會內置一些重試策略,其初衷是好的,畢竟因為網絡問題導致丟包雖然頻繁但持續時間短,往往重試就能成功,

但要留心這是否符合我們期望。

3.1 案例

短信重復發送的問題,但短信服務的調用方用戶服務,反復確認代碼里沒有重試邏輯。

那問題究竟出在哪里?

Get請求的發送短信接口,休眠2s以模擬耗時:

 配置一個Feign供客戶端調用:

Feign內部有一個Ribbon組件負責客戶端負載均衡,通過配置文件設置其調用的服務端為兩個節點:

  1. SmsClient.ribbon.listOfServers=localhost:45679,localhost:45678 

客戶端接口,通過Feign調用服務端

在45678和45679兩個端口上分別啟動服務端,然后訪問45678的客戶端接口進行測試。因為客戶端和服務端控制器在一個應用中,所以45678同時扮演了客戶端和服務端的角色。

在45678日志中可以看到,29秒時客戶端收到請求開始調用服務端接口發短信,同時服務端收到了請求,2秒后(注意對比第一條日志和第三條日志)客戶端輸出了讀取超時的錯誤信息:

  1. [http-nio-45678-exec-4] [INFO ] [c.d.RibbonRetryIssueClientController:23  ] - client is called 
  2. [http-nio-45678-exec-5] [INFO ] [c.d.RibbonRetryIssueServerController:16  ] - http://localhost:45678/ribbonretryissueserver/sms is called, 13600000000=>a2aa1b32-a044-40e9-8950-7f0189582418 
  3. [http-nio-45678-exec-4] [ERROR] [c.d.RibbonRetryIssueClientController:27  ] - send sms failed : Read timed out executing GET http://SmsClient/ribbonretryissueserver/sms?mobile=13600000000&message=a2aa1b32-a044-40e9-8950-7f0189582418 

而在另一個服務端45679的日志中還可以看到一條請求,客戶端接口調用后的1秒:

  1. [http-nio-45679-exec-2] [INFO ] [c.d.RibbonRetryIssueServerController:16  ] - http://localhost:45679/ribbonretryissueserver/sms is called, 13600000000=>a2aa1b32-a044-40e9-8950-7f0189582418 

客戶端接口被調用的日志只輸出了一次,而服務端的日志輸出了兩次。雖然Feign的默認讀取超時時間是1秒,但客戶端2秒后才出現超時錯誤。

說明客戶端自作主張進行了一次重試,導致短信重復發送。

3.2 源碼揭秘

查看Ribbon源碼,MaxAutoRetriesNextServer參數默認為1,也就是Get請求在某個服務端節點出現問題(比如讀取超時)時,Ribbon會自動重試一次:

解決方案

1.把發短信接口從Get改為Post

API設計規范:有狀態的API接口不應定義為Get。根據HTTP協議規范,Get請求適用于數據查詢,Post才是把數據提交到服務端用于修改或新增。選擇Get還是Post的依據,應該是API行為,而非參數大小。

  • 常見誤區:Get請求的參數包含在Url QueryString中,會受瀏覽器長度限制,所以一些開發會選擇使用JSON以Post提交大參數,使用Get提交小參數。

2.將MaxAutoRetriesNextServer參數配為0,禁用服務調用失敗后在下一個服務端節點的自動重試。在配置文件中添加一行即可:

  1. ribbon.MaxAutoRetriesNextServer=0 

問責

至此,問題出在用戶服務還是短信服務?

也許雙方都有問題吧。

  • Get請求應該是無狀態或者冪等的,短信接口可以設計為支持冪等調用
  • 用戶服務的開發同學,如果對Ribbon的重試機制有所了解的話,或許就能在排查問題上少走彎路

最佳實踐

對于重試,因為HTTP協議認為Get請求是數據查詢操作,是無狀態的,又考慮到網絡出現丟包是比較常見的事情,有些HTTP客戶端或代理服務器會自動重試Get/Head請求。如果你的接口設計不支持冪等,需要關閉自動重試。但,更好的解決方案是,遵從HTTP協議的建議來使用合適的HTTP方法。

4 并發限制爬蟲抓取

HTTP請求調用還有一個常見的問題:并發數的限制,導致程序處理性能無法提升。

4.1 案例

某爬蟲項目,整體爬取數據效率很低,增加線程池數量也無謂,只能堆機器。

現在模擬該場景,探究問題本質。

假設要爬取的服務端是這樣的一個簡單實現,休眠1s返回數字1:

爬蟲需多次調用該接口抓取數據,為確保線程池不是并發瓶頸,使用了一個無線程上限的newCachedThreadPool,然后使用HttpClient執行HTTP請求,把請求任務循環提交到線程池處理,最后等待所有任務執行完成后輸出執行耗時:

使用默認的PoolingHttpClientConnectionManager構造的CloseableHttpClient,測試一下爬取10次的耗時:


雖然一個請求需要1s執行完成,但線程池可擴張使用任意數量線程。

按道理,10個請求并發處理的時間基本相當于1個請求的處理時間,即1s,但日志中顯示實際耗時5秒:

4.2 源碼解析

PoolingHttpClientConnectionManager源碼有兩個重要參數:

  • defaultMaxPerRoute=2,即同一主機/域名的最大并發請求數為2。我們的爬蟲需要10個并發,顯然是默認值太小限制了爬蟲的效率。
  • maxTotal=20,即所有主機整體最大并發為20,這也是HttpClient整體的并發度。我們請求數是10最大并發是10,20不會成為瓶頸。舉一個例子,使用同一個HttpClient訪問10個域名,defaultMaxPerRoute設置為10,為確保每一個域名都能達到10并發,需要把maxTotal設置為100。

HttpClient是常用的HTTP客戶端,那為什么默認值限制得這么小?

很多早期的瀏覽器也限制了同一個域名兩個并發請求。對于同一個域名并發連接的限制,其實是HTTP 1.1協議要求的,這里有這么一段話:

  • Clients that use persistent connections SHOULD limit the number of simultaneous connections that they maintain to a given server. A single-user client SHOULD NOT maintain more than 2 connections with any server or proxy. A proxy SHOULD use up to 2*N connections to another server or proxy, where N is the number of simultaneously active users. These guidelines are intended to improve HTTP response times and avoid congestion.
  • HTTP 1.1協議是20年前制定的,現在HTTP服務器的能力強很多了,所以有些新的瀏覽器沒有完全遵從2并發這個限制,放開并發數到了8甚至更大。
  • 如果需要通過HTTP客戶端發起大量并發請求,不管使用什么客戶端,請務必確認客戶端的實現默認的并發度是否滿足需求。

嘗試聲明一個新的HttpClient放開相關限制,設置maxPerRoute為50、maxTotal為100,然后修改一下剛才的wrong方法,使用新的客戶端進行測試:

輸出如下,10次請求在1秒左右執行完成。可以看到,因為放開了一個Host 2個并發的默認限制,爬蟲效率得到了大幅提升:

4.3 最佳實踐

若你的客戶端有比較大的請求調用并發,比如做爬蟲,或是扮演類似代理的角色,又或者是程序本身并發較高,如此小的默認值很容易成為吞吐量的瓶頸,需要及時調整。

 

責任編輯:姜華 來源: JavaEdge
相關推薦

2024-06-24 00:30:00

2015-12-02 15:35:08

Redis Clust遷移解決方案

2014-04-08 09:49:27

PostgreSQL雙緩沖

2020-05-06 14:14:50

Linux依賴軟件

2021-10-18 07:58:33

MyBatis Plu數據庫批量插入

2024-09-30 08:43:33

HttpgolangTimeout

2015-05-12 16:31:22

Elasticsear開源分布式搜索引擎

2018-12-12 15:50:13

2018-10-12 14:34:13

2019-10-08 16:05:19

Redis數據庫系統

2010-07-29 15:56:04

FlexSocket

2022-12-27 11:06:35

海量接口并發

2017-08-01 05:44:10

Dockerweave虛擬機

2020-05-08 15:37:20

Redis分布式優化點

2017-06-29 10:13:20

信息安全智慧安全藍盾股份

2024-02-22 11:23:16

2011-12-13 11:39:38

天地超云云服務器云計算

2009-12-07 15:50:27

WCF文件

2023-09-14 15:44:46

分布式事務數據存儲

2011-05-04 16:33:09

游戲銷售Android Mar游戲
點贊
收藏

51CTO技術棧公眾號

精品magnet| 精品一区二区三区在线观看国产| 亚洲精品一线二线三线| 香港三级韩国三级日本三级| 欧美人体大胆444www| 日韩高清不卡一区二区三区| 另类美女黄大片| 800av在线播放| 青青久久精品| 天天射综合影视| 亚洲欧美日韩精品综合在线观看| 国产刺激高潮av| 免费人成在线不卡| 性欧美视频videos6一9| 内射毛片内射国产夫妻| 成人免费在线电影网| 欧美综合在线视频| 日韩视频免费播放| 日韩精品毛片| 久久久久久日产精品| 97av自拍| 中文在线字幕av| 在线视频日韩| 色综合视频一区中文字幕| 人成免费在线视频| 日韩伦理一区二区三区| 日韩欧美三级在线| 欧美男女交配视频| 性欧美gay| 精品欧美一区二区三区| 男同互操gay射视频在线看| 国产三级在线观看| 2023国产精品自拍| 国产伦精品一区| 精品国产999久久久免费| 美女视频网站久久| 日韩免费视频在线观看| 日韩精品乱码久久久久久| 五月激情综合| 日韩最新中文字幕电影免费看| 久久久久久久无码| 国产66精品| 精品国产麻豆免费人成网站| www.成人黄色| 国产成人精品一区二区三区视频| 色国产精品一区在线观看| 自拍日韩亚洲一区在线| ririsao久久精品一区| 亚洲人成在线观看一区二区| 一本一道久久a久久综合精品| 黄色网址在线播放| 国产午夜亚洲精品羞羞网站| 蜜桃视频日韩| 黄色在线免费观看大全| 久久久久久久久久久黄色| 欧美精品一区在线发布| 无码国产精品高潮久久99| 成人一区在线看| 国产精品一区而去| 99热这里只有精品在线| 国产成人一区在线| 国产伦精品一区二区三区四区免费 | 黄色一区二区视频| 另类欧美日韩国产在线| 成人欧美一区二区三区在线湿哒哒 | 黄色成人在线观看| 亚洲色图在线视频| 久久www视频| 国产伦子伦对白在线播放观看| 亚洲精品成a人| 国产主播自拍av| 中文字幕在线免费观看视频| 日本久久一区二区三区| xxww在线观看| 6080亚洲理论片在线观看| 精品国产乱码久久| 精品人妻无码一区二区三区| 日韩dvd碟片| 久久成人精品一区二区三区| a级片在线观看免费| 一区二区三区国产盗摄| 国产精品毛片a∨一区二区三区|国 | 中文幕无线码中文字蜜桃| 制服丝袜日韩| 精品国产一区二区在线| 麻豆changesxxx国产| 在线亚洲自拍| 成人中文字幕在线观看| 日韩永久免费视频| 欧美国产日本韩| 青青草视频国产| 中文字幕在线免费观看视频| 777亚洲妇女| 网站免费在线观看| 99久久综合狠狠综合久久aⅴ| 欧美激情视频一区| 中文在线第一页| 国产一区日韩二区欧美三区| 九色91视频| 日本网站在线免费观看视频| 亚洲一区二区三区国产| 冲田杏梨av在线| 91夜夜蜜桃臀一区二区三区| 国产一区二区三区在线免费观看 | 国产精品久久久久久超碰| 国产高清视频免费| 久久综合九色综合97_久久久| 色撸撸在线观看| 成人免费看视频网站| 欧美精品国产精品| 性高潮久久久久久久| 欧美在线二区| 国产精品免费一区豆花| 视频二区在线观看| 亚洲男人电影天堂| 毛片一区二区三区四区| 波多野结衣在线一区二区| 色偷偷综合社区| 日韩 欧美 中文| 国产99久久精品| 亚洲日本精品| 久久久久久久| 亚洲国产欧美在线成人app| 99国产精品无码| 免费日韩av| 国产一区自拍视频| 影音先锋中文在线视频| 欧美三级日韩三级| 加勒比综合在线| 在线亚洲观看| 国产视色精品亚洲一区二区| 伊人春色在线观看| 欧美精品xxxxbbbb| www.xx日本| 免费在线视频一区| 日韩国产在线一区| 欧美成人精品三级网站| 日韩精品在线视频观看| 日韩aaaaaa| 成人免费毛片app| 无码熟妇人妻av在线电影| 视频二区欧美| 九九热这里只有精品免费看| 99热这里只有精品3| 亚洲同性同志一二三专区| 亚洲视频第二页| 欧美激情成人| 国产在线播放91| 国产丝袜在线| 日韩欧美一级特黄在线播放| 91porn在线视频| 高清不卡在线观看av| 美女av免费观看| 99久久香蕉| 68精品久久久久久欧美| 日韩一二三四| 欧美性色黄大片| 亚洲少妇xxx| 国产一区二区女| 日本精品久久久久久久久久| 激情小说亚洲图片| 日本亚洲精品在线观看| 国产三区四区在线观看| 在线播放91灌醉迷j高跟美女| 成人免费毛片xxx| 大胆亚洲人体视频| 尤物av无码色av无码| 国产毛片一区二区三区| 国产剧情日韩欧美| 亚洲男同gay网站| 日韩精品欧美国产精品忘忧草| 黄色一级片免费在线观看| 国产午夜亚洲精品午夜鲁丝片| av五月天在线| 自由日本语亚洲人高潮| 精品国产免费久久久久久尖叫| 偷拍自拍在线看| 国产亚洲精品美女| 99热精品在线播放| 精品日韩中文字幕| 18精品爽国产三级网站| 国产剧情av麻豆香蕉精品| 成人小视频在线观看免费| 午夜精品福利影院| 成人在线国产精品| a√中文在线观看| 伊人一区二区三区久久精品| av中文字幕免费在线观看| 黄网站色欧美视频| 免费精品在线视频| 91婷婷韩国欧美一区二区| 中文字幕第100页| 日韩一级免费| 一区二区三区欧美成人| 琪琪久久久久日韩精品| 国产九九精品视频| 中文字幕一区久| 不用播放器成人网| 欧美日本韩国一区二区| 日韩网站在线看片你懂的| 日本黄色一级视频| 亚洲一区在线观看网站| 国产精品成人无码免费| 成人一道本在线| 五月天婷婷亚洲| 国产一区二区三区的电影| 在线视频精品一区| 九九精品久久| 国产精品v欧美精品v日韩| 国产69精品久久久久9999人| 日本久久久久久久| 免费电影视频在线看| www.xxxx欧美| 神马亚洲视频| 欧美精品一区二区三区蜜臀| 亚洲无码精品在线播放| 色婷婷精品大在线视频| 精品无码黑人又粗又大又长| 国产精品剧情在线亚洲| 日本一级免费视频| 91免费小视频| 日本少妇xxxx| 国产成人激情av| 天堂av8在线| 免费成人性网站| 老司机午夜av| 亚洲女人av| 男人日女人bb视频| 亚洲日本免费| 欧美日韩不卡在线视频| 欧美三级乱码| 中文字幕日韩精品无码内射| 99久久精品国产亚洲精品| 相泽南亚洲一区二区在线播放| 亚洲男人都懂第一日本| 久久久久久国产精品mv| 女同另类激情重口| 国新精品乱码一区二区三区18| 另类视频一区二区三区| 91日本在线观看| 国产欧美日韩电影| 国产精品日韩在线| 99re久久| 国产又爽又黄的激情精品视频| 免费一级欧美在线观看视频| 国产精品看片资源| 日韩免费大片| 亚洲一区精品电影| 中文字幕av一区二区三区四区| 亚洲一区二区三区毛片| 国产一区二区| 国产精品免费在线| 任我爽精品视频在线播放| 精品中文字幕人| 亚洲成在人线免费观看| 欧美三级华人主播| 日韩精品免费| 欧美另类videos| 黄色成人在线网址| 人人妻人人添人人爽欧美一区| 99综合精品| 免费裸体美女网站| 麻豆精品一二三| 99中文字幕在线| 成人精品免费网站| 新91视频在线观看| 亚洲国产精品av| 国产黄在线免费观看| 亚洲午夜一区二区三区| 在线观看免费av片| 欧美日韩国产首页在线观看| 国产黄a三级三级看三级| 精品国产在天天线2019| 青青草视频在线免费观看| 国产亚洲激情视频在线| 黄色国产网站在线播放| 8x拔播拔播x8国产精品| jizz亚洲女人高潮大叫| 99精彩视频| 中国av一区| 精品一区二区成人免费视频| 亚洲经典自拍| 亚洲一级免费观看| 成人免费视频国产在线观看| 亚洲精品视频网址| 亚洲一区二区高清| 欧美性猛交xxxx乱大交hd | 黄色av中文字幕| 国产午夜精品全部视频在线播放| 精品孕妇一区二区三区| 91精品国产免费久久久久久| 国产综合色激情| 国产三区二区一区久久| 成人羞羞在线观看网站| 国产精品www在线观看| 麻豆一区二区三| 天天躁日日躁狠狠躁av麻豆男男| 中文久久乱码一区二区| 免费看一级一片| 欧美日韩中文国产| 色网站免费观看| 久久视频中文字幕| 午夜激情成人网| 国产欧美一区二区三区不卡高清| 久久社区一区| 日韩av在线综合| 成人精品gif动图一区| 亚洲人做受高潮| 日本精品视频一区二区| 欧美自拍偷拍一区二区| 日韩视频永久免费观看| 欧美1级2级| 精品在线视频一区二区三区| 欧美久久九九| 在线免费黄色网| 国产精品美女一区二区在线观看| 日韩三级一区二区三区| 欧美一级片在线看| 天天综合视频在线观看| 日韩美女视频在线观看| 欧美精品中文字幕亚洲专区| wwwwww欧美| 国产在线精品一区二区| 欧美老女人性生活视频| 色婷婷av一区二区| 日韩a在线观看| 91精品国产91久久久久福利| 综合成人在线| 好吊色视频988gao在线观看| 久久97超碰国产精品超碰| 国产精品天天干| 日韩人体视频一二区| 手机看片福利在线观看| 欧美一级淫片videoshd| 国语一区二区三区| 精品国产av无码一区二区三区| 国产99一区视频免费| 国产波霸爆乳一区二区| 日韩一级片在线播放| 免费黄色在线| 91视频国产高清| 久久久国产精品| a级大片免费看| 怡红院av一区二区三区| 国产婷婷在线视频| 欧美人与性动交| 高清精品视频| 播放灌醉水嫩大学生国内精品| 久久综合久久鬼色中文字| 青青视频在线免费观看| 国产亚洲精品一区二区| 97成人超碰| 国产高清免费在线| 国产乱子伦视频一区二区三区| 中文字幕亚洲欧美日韩| 精品免费视频一区二区| 国产传媒在线| 欧美另类高清视频在线| 免费看精品久久片| 欧美爱爱免费视频| 日韩精品自拍偷拍| 三级中文字幕在线观看| 区一区二区三区中文字幕| 麻豆精品视频在线观看视频| 校园春色 亚洲| 日韩激情视频在线播放| 日韩成人影音| 影音先锋男人的网站| 国产成人免费xxxxxxxx| 国产九色在线播放九色| 一本色道久久88综合亚洲精品ⅰ | 久久91导航| 免费看av软件| 成人高清伦理免费影院在线观看| 久久不卡免费视频| 中文字幕亚洲国产| 7m精品国产导航在线| 国产精品wwwww| 中文字幕一区二区三区精华液| 性欧美videos另类hd| 日本午夜精品理论片a级appf发布| 色综合天天综合网中文字幕| 久久久久亚洲av无码网站| 欧美小视频在线观看| 美女隐私在线观看| 久久99导航| 国产一区二区三区蝌蚪| 久久久国产高清| 久久精品久久久久久| 四虎884aa成人精品最新| 亚洲综合婷婷久久| 红桃av永久久久| 日本电影在线观看网站| 精品亚洲第一| 国产一区二区福利视频| 天天爽夜夜爽人人爽| 九九精品视频在线观看| 少妇精品久久久一区二区| 黄页网站在线看| 欧美主播一区二区三区|