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

張開濤:超時與重試機制(2)

開發 開發工具
本文主要從Web應用/服務化應用的角度出發介紹如何設置超時與重試(系統層面的超時設置本文沒有涉及),而Web應用需要在如下鏈條中設置超時與重試機制。

張開濤:超時與重試機制(2)

數據庫客戶端超時

在使用數據庫客戶端時,我們會使用數據庫連接池,數據庫連接池可以進行如下超時設置。

  1. <bean id="dataSource" class="org.apache.commons.dbcp2.BasicDataSource" destroy-method="close"> 
  2.     <!--Statement默認超時時間 --> 
  3.     <property name="defaultQueryTimeout" value="3"/> 
  4.   
  5.     <!-- 另外可以通過如下配置來配置socket連接/讀超時:--> 
  6.     <property name="connectionProperties" 
  7.              value="connectTimeout=2000; socketTimeout=2000 "/> 
  8.     <!--這個是等待獲取連接池連接時間,也不要太大,比如設置在500毫秒--> 
  9.     <property name="maxWaitMillis" value="500"/> 
  10. </bean> 

● 網絡連接/讀超時:使用connectionProperties配置Mysql超時時間,如果是Oracle則可以通過如下配置。

  1. <property name="connectionProperties" 
  2. value="oracle.net.CONNECT_TIMEOUT=2000;oracle.jdbc.ReadTimeout=2000"/> 

● 默認Statement超時時間,通過defaultQueryTimeout配置,單位是秒。

● 從連接池獲取連接的等待時間,通過maxWaitMillis配置。

● Statement超時,如果使用ibatis,則可以通過如下方式配置Statement超時。

因此我們只需要如下配置。

  1. <settings cacheModelsEnabled="false"enhancementEnabled="true" 
  2. lazyLoadingEnabled="false"errorTracingEnabled="true" maxRequests="32" 
  3. defaultStatementTimeout="2"/> 

defaultStatementTimeout單位是秒,根據業務配置。如果數據庫連接池配置了,則此處可以不用配置。

如果想只設置某個Statement的超時時間,則可以考慮:

  1. <insert……timeout="2"> 

如上配置其實最終會調用Statement.setQueryTimeout方法設置Statement超時時間。

● 事務超時是總Statement超時設置,比如我們使用Spring管理事務的話,可以使用如下方式配置全局默認的事務級別的超時時間。

  1. <bean id="txManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> 
  2.   <propertynamepropertyname="dataSource" ref="dataSource" /> 
  3.   <propertynamepropertyname="defaultTimeout" value="3"/> 
  4. </bean> 

這里我們分析下為什么說事務超時是Statement超時的總和,此處我們分析spring的DataSourceTransactionManager,首先開啟事務時會調用其doBegin方法。

  1. //先獲取@Transactional定義的timeout,如果沒有,則使用defaultTimeout 
  2. int timeout =determineTimeout(definition); 
  3. if (timeout !=TransactionDefinition.TIMEOUT_DEFAULT) {  
  4.    txObject.getConnectionHolder().setTimeoutInSeconds(timeout);  
  5. }  

其中determineTimeout用來獲取我們設置的事務超時時間,然后設置到ConnectionHolder對象上(其是ResourceHolder子類),接著看ResourceHolderSupport的setTimeoutInSeconds實現。

  1. public voidsetTimeoutInSeconds(int seconds) { 
  2.     setTimeoutInMillis(seconds* 1000); 
  3.   
  4. public voidsetTimeoutInMillis(long millis) { 
  5.     this.deadline = newDate(System.currentTimeMillis() + millis);   

大家可以看到,此處會設置一個deadline時間,用來判斷事務超時時間,那什么時候調用呢?首先檢查該類中的代碼,會發現。

  1. public int getTimeToLiveInSeconds() { 
  2.     double diff = ((double) getTimeToLiveInMillis()) /1000; 
  3.     int secs = (int) Math.ceil(diff); 
  4.     checkTransactionTimeout(secs <= 0); 
  5.     return secs; 
  6.   
  7. public long getTimeToLiveInMillis() throwsTransactionTimedOutException{ 
  8.     if (this.deadline == null) { 
  9.         throw new IllegalStateException("No timeoutspecified for this resource holder"); 
  10.     } 
  11.     long timeToLive = this.deadline.getTime() -System.currentTimeMillis(); 
  12.     checkTransactionTimeout(timeToLive <= 0); 
  13.     return timeToLive; 
  14.   
  15. private void checkTransactionTimeout(booleandeadlineReached) throws TransactionTimedOutException { 
  16.     if (deadlineReached) { 
  17.         setRollbackOnly(); 
  18.        throw newTransactionTimedOutException("Transaction timed out: deadline was " +this.deadline); 
  19.     } 

我們發現調用getTimeToLiveInSeconds和getTimeToLiveInMillis會檢查是否超時,如果超時了,則標記事務需回滾,并拋出TransactionTimedOutException異常進行回滾。

DataSourceUtils.applyTransactionTimeout會調用DataSourceUtils. applyTimeout, DataSourceUtils.applyTimeout代碼如下。

  1. public static void applyTimeout(Statement stmt,DataSource dataSource, int timeout) throws SQLException { 
  2.     ConnectionHolder holder =         (ConnectionHolder)TransactionSynchronizationManager.getResource(dataSource); 
  3.     if (holder != null && holder.hasTimeout()){ 
  4.         // 計算剩余的事務超時時間覆蓋Statement超時 
  5.        stmt.setQueryTimeout(holder.getTimeToLiveInSeconds()); 
  6.     } else if (timeout > 0) { 
  7.         //如果沒有配置事務超時,則使用Statement超時 
  8.        stmt.setQueryTimeout(timeout); 
  9.     } 

在stmt.setQueryTimeout(holder.getTimeToLiveInSeconds())時會調用getTimeToLiveIn Seconds(),這會檢查事務是否超時。在JdbcTemplate中,執行SQL之前,會調用其applyStatementSettings方法,其將調用DataSourceUtils.applyTimeout(stmt,getDataSource(), getQueryTimeout())設置超時時間。

此處有一個問題,如果設置了事務超時,Statement級別的就不起作用了,整體會使用事務超時覆蓋Statement超時。

NoSQL客戶端超時

對于MongoDB,我們使用的是spring-data-mongodb客戶端,可以通過如下配置設置相關的超時時間。

  1. <mongo:mongo id="tryMongo"replica-set="${try.mongo.hostAndPorts}"> 
  2.    <mongo:options 
  3.            connections-per-host="${mongo.connectionsPerHost}" 
  4.            threads-allowed-to-block-for-connection-multiplier="${mongo.threadsAllowedToBlockForConnectionMultiplier}" 
  5.            max-wait-time="${mongo.maxWaitTime}" 
  6.            connect-timeout="${mongo.connectTimeout}" 
  7.            socket-timeout="${mongo.socketTimeout}" 
  8.            socket-keep-alive="${mongo.socketKeepAlive}" 
  9.            auto-connect-retry="${mongo.autoConnectRetry}" /> 
  10. </mongo:mongo> 

我們曾經就遇到過因為不設置mongodb客戶端timeout而導致服務響應慢的情況。

對于Redis,我們使用的是Jedis客戶端,可以通過如下配置分配等待獲取連接池連接的超時時間和網絡連接/讀超時時間。

  1. PoolJedisConnectionFactory connectionFactory = new PoolJedisConnectionFactory(); 
  2. connectionFactory.setMaxWaitMillis(maxWaitMillis); 
  3. connectionFactory.setTimeout(timeoutInMillis); 

Jedis在建立Socket時通過如下代碼設置超時。

  1. this.socket.connect(new InetSocketAddress(this.host, this.port),this. timeout); 
  2. this.socket.setSoTimeout(this.timeout); 

可以在JVM啟動時通過添加-Dsun.net.client.defaultConnectTimeout=60000-Dsun.net.client.defaultReadTimeout=60000來配置默認全局的Socket連接/讀超時。即如Httpclient、JDBC等,如果沒有配置socket超時,則默認會使用該超時。

業務超時

任務型:比如,訂單超時未支付取消,超時活動自動關閉等,這屬于任務型超時,可以通過Worker定期掃描數據庫修改狀態即可。還有如有時候需要調用的遠程服務超時了(比如,用戶注冊成功后,需要給用戶發放優惠券),可以考慮使用隊列或者暫時記錄到本地稍后重試。

服務調用型:比如,某個服務的全局超時時間為500ms,但我們有多處服務調用,每處的服務調用超時時間可能不一樣,此時,可以簡單地使用Future來解決問題,通過如Future.get(3000,TimeUnit.MILLISECONDS)來設置超時。

前端Ajax超時

我們使用jQuery來進行Ajax請求,可以在請求時帶上timeout參數設置超時時間。

  1. $.ajax({ 
  2.     url:"http://ins.jd.com:9090/test", 
  3.     dataType:"jsonp", 
  4.     jsonp:"test", 
  5.     jsonpCallback:"test", 
  6.     timeout:2000, 
  7.     success:function(result,status,xhr) { 
  8.        //success 
  9.     }, 
  10.     error: function(result,status,xhr){ 
  11.         if(status== 'timeout') { 
  12.             //timeout 
  13.         } 
  14.     } 
  15. }); 

當進行跨域JSONP請求時,使用jQuery 1.4.x版本時,IE9、Chrome 52、Firefox 49測試 JSONP時,請求在超時后不能被取消,即使客戶端超時了,該腳本也將一直運行;使用jQuery1.5.2時超時是起作用了,但是,發出去的請求是沒有取消的(請求還處于執行狀態)。

如還有一種辦法來進行超時重試,通過setTimeout進行超時重試,比如,京東首頁的某個異步接口,其中一個域名(A機房)超時了,想超時后通過另一個域名(B機房)重新獲取數據,代碼如下所示。

  1. var id = setTimeout(retryCallback, 5000); 
  2. $.ajax({ 
  3.    dataType: 'jsonp', 
  4.     success:function() { 
  5.        clearTimeout(id); 
  6.         ... 
  7.     } 
  8. }); 

除了客戶端設置超時外,服務端也一定要配置合理的超時時間。

總結

本文主要介紹了如何在Web應用訪問的整個鏈路上進行超時時間設置。通過配置合理的超時時間,防止出現某服務的依賴服務超時時間太長而響應慢,以致自己響應慢甚至崩潰。

客戶端和服務端都應該設置超時時間,而且客戶端根據場景可以設置比服務端更長的超時時間。如果存在多級依賴關系,如A調用B,B調用C,則超時設置應該是A>B>C,否則可能會一直重試,引起DDoS攻擊效果。不過最終如何選擇還是要看場景,有時候客戶端設置的就是要比服務端的超時時間短,通過在服務端實施限流/降級等手段防止DDoS攻擊。

超時之后應該有相應的策略來處理,常見的策略有重試(等一會兒再試、嘗試其他分組服務、嘗試其他機房服務,重試算法可考慮使用如指數退避算法)、摘掉不存活節點(負載均衡/分布式緩存場景下)、托底(返回歷史數據/靜態數據/緩存數據)、等待頁或者錯誤頁。

對于非冪等寫服務應避免重試,或者可以考慮提前生成唯一流水號來保證寫服務操作通過判斷流水號來實現冪等操作。

在進行數據庫/緩存服務器操作時,記得經常檢查慢查詢,慢查詢通常是引起服務出問題的罪魁禍首。也要考慮在超時嚴重時,直接將該服務降級,待該服務修復后再取消降級。

對于有負載均衡的中間件請考慮配置心跳/存活檢查,而不是惰性檢查。

超時重試必然導致請求響應時間增加,最壞情況下的響應時間=重試次數×單次超時時間,這很可能嚴重影響到用戶體驗,導致用戶會不斷刷新頁面來重復請求,最后導致服務接收的請求太多而掛掉,因此除了控制單次超時時間,也要控制好用戶能忍受的最壞超時時間。

超時時間太短會導致服務調用成功率降低,超時時間太長又導致本應成功的調用卻失敗了,這也要根據實際場景來選擇最適合當前業務的,甚至是程序動態自動計算超時時間。比如商品詳情頁的庫存狀態服務,可以設置較短的超時時間,當超時時降級返回有貨,而結算頁服務就需要設置稍微長一些的超時時間保證確實有貨。

 

在實際開發中,不要輕視超時時間,很多重大事故都是因為超時時間不合理導致的,設置超時時間一定是只有好處沒有壞處的,請立即Review你的代碼吧。

【本文是51CTO專欄作者“張開濤”的原創文章,作者微信公眾號:開濤的博客( kaitao-1234567)】

戳這里,看該作者更多好文

責任編輯:趙寧寧 來源: 51CTO專欄
相關推薦

2017-06-16 15:16:15

2017-06-04 16:24:27

線程線程池中斷

2017-05-18 16:07:23

回滾數據庫代碼

2024-09-25 08:32:05

2022-11-14 08:19:59

重試機制Kafka

2025-09-10 07:15:45

2022-05-06 07:44:10

微服務系統設計重試機制

2017-05-01 17:03:01

Java緩存分布式

2017-05-10 11:40:29

緩存Nginx HTTP

2020-07-19 15:39:37

Python開發工具

2025-02-26 10:49:14

2021-02-20 10:02:22

Spring重試機制Java

2017-04-18 14:49:38

應用層API代碼

2023-11-27 07:44:59

RabbitMQ機制

2025-01-03 08:44:37

kafka消息發送策略

2023-10-27 08:20:12

springboot微服務

2017-04-21 08:51:42

API緩存分布式

2025-05-28 01:15:00

Golang重試機制

2023-11-06 08:00:38

接口高可用機制

2017-05-05 10:13:03

應用級緩存緩存代碼
點贊
收藏

51CTO技術棧公眾號

麻豆一区产品精品蜜桃的特点| 91九色国产ts另类人妖| 国产91精品看黄网站在线观看| 视频精品二区| 一本色道a无线码一区v| 国新精品乱码一区二区三区18| 杨钰莹一级淫片aaaaaa播放| 国产成人高清精品免费5388| 在线国产电影不卡| 日韩视频在线视频| 91大神在线网站| 丁香六月综合激情| 国产噜噜噜噜久久久久久久久| 懂色av蜜桃av| 成人在线超碰| 69堂精品视频| 黄色特一级视频| 国产乱理伦片a级在线观看| 日本不卡一区二区三区| 精品自在线视频| 自拍偷拍你懂的| 欧美一性一交| 日韩欧美的一区二区| www.欧美日本| 黄毛片在线观看| 亚洲欧美欧美一区二区三区| 日本一区视频在线播放| 黄色一级大片在线免费看国产一 | 欧美日韩亚洲另类| 成人免费毛片在线观看| 黄色在线视频网站| 国产精品美女视频| 日本亚洲导航| 日韩一区av| 成人高清免费观看| 91视频网页| 99在线精品视频免费观看软件| 国产精品v一区二区三区 | 天堂av在线免费| 国产精品亚洲第一| 成人在线国产精品| 国产又粗又黄又爽视频| 蜜臀av一级做a爰片久久| 色综合久久中文字幕综合网小说| 国产精品久久久免费观看| 成人看片在线观看| 91国偷自产一区二区三区观看| 日本一道在线观看| 日韩精品系列| 激情综合色综合久久综合| 国产精品99蜜臀久久不卡二区 | 成人羞羞动漫| 国产性猛交xxxx免费看久久| 黄色工厂在线观看| 美女久久99| 亚洲午夜精品久久久久久久久久久久| 国产精品久久久久久久99| 国产伦久视频在线观看| 精品久久久国产| 青青草原av在线播放| 天堂√8在线中文| 色偷偷久久人人79超碰人人澡 | a级片国产精品自在拍在线播放| 国产91丝袜在线播放九色| 国产精品成人播放| 国产精品theporn动漫| 日韩成人精品一区二区| yellow中文字幕久久| 午夜激情福利网| 激情五月***国产精品| 亚洲**2019国产| 久久久久久久久黄色| 国内成人在线| 欧美一级淫片videoshd| 五月激情丁香网| 韩日欧美一区二区三区| 成人动漫视频在线观看免费| 日韩一级片免费在线观看| 国产一区二区三区免费观看| 国产 高清 精品 在线 a| 无码精品黑人一区二区三区| 亚洲国产高清在线| 特级西西人体www高清大胆| 电影k8一区二区三区久久 | 日韩成人午夜精品| 亚洲一区二区三| 欧美熟妇乱码在线一区| 国产午夜精品一区二区| 欧美 日韩 国产 在线观看| 国产蜜臀一区二区打屁股调教| 国产精品久久久久婷婷二区次| 日本一区二区三区免费观看| 黄色网页在线观看| 国产精品毛片a∨一区二区三区| 麻豆成人小视频| 欧美13一16娇小xxxx| 亚洲高清中文字幕| 国产h视频在线播放| 欧美aaaaaa| 亚洲精品www久久久| 蜜桃视频最新网址| 噜噜噜躁狠狠躁狠狠精品视频| 97精品欧美一区二区三区| 中文在线免费看视频| 成人免费看视频| 国产在线一区二区三区播放| 美女隐私在线观看| 韩曰欧美视频免费观看| 日本wwww色| 日韩专区精品| 欧美有码在线观看| 成人午夜免费福利| 国产精品国产三级国产aⅴ中文| 亚洲欧美久久234| 国产美女高潮在线| 精品嫩草影院久久| 亚洲欧美色图视频| 成人亚洲一区二区| 欧美亚洲视频在线观看| 免费精品一区二区| jizz一区二区| 国产情侣第一页| 厕沟全景美女厕沟精品| 日韩欧美国产综合| 免费看特级毛片| 毛片一区二区三区| 99九九电视剧免费观看| 在线播放麻豆| 亚洲国产一区在线观看| 中文字幕日韩久久| 91中文字幕精品永久在线| 国产成人免费av电影| 日本一本草久在线中文| 五月婷婷久久丁香| 国模私拍在线观看| 亚洲福利久久| 久久国产精品99久久久久久丝袜 | av官网在线观看| 国产精品狼人久久影院观看方式| a级片一区二区| 亚洲国产一区二区久久| 久久精品国产清自在天天线| 国产成年人免费视频| 懂色av中文字幕一区二区三区| 日本一区二区久久精品| 欧美一区久久久| 亚洲性av在线| 羞羞色院91蜜桃| www.亚洲精品| 国产在线精品91| 日韩人体视频| 日韩av大片在线| 国产高清一级毛片在线不卡| 欧美性大战久久久久久久 | 国产亚洲人成a在线v网站| 国产亚洲欧洲在线| 日韩女优在线观看| 26uuu亚洲婷婷狠狠天堂| 欧美日韩在线视频一区二区三区| 欧美区一区二区| 九九九热精品免费视频观看网站| 中文字幕观看在线| 亚洲欧洲日韩女同| 日本成人在线免费| 亚洲伦伦在线| 日韩国产在线一区| 999精品视频在线观看| 欧美人成在线视频| 亚洲AV成人无码一二三区在线| ●精品国产综合乱码久久久久| 国产精品动漫网站| 日韩成人综合| αv一区二区三区| 在线高清av| 日韩视频在线免费观看| 亚洲国产精品久久久久久久| 欧美日韩黄色大片| 2019男人天堂| 国产成人福利片| 精品一区二区成人免费视频| 91大神精品| 国产成人精品久久二区二区| 成人在线观看免费网站| 日韩成人av在线| 在线视频欧美亚洲| 亚洲成人免费在线| 久久久久亚洲AV成人无在| 国产成人精品亚洲日本在线桃色| 五月天男人天堂| 欧美日韩一本| 日本老师69xxx| 动漫一区在线| 亚洲品质视频自拍网| 国产精品女人久久久| 精品国产乱码久久久久久天美| 中文字幕日韩三级片| 亚洲视频二区| 做爰高潮hd色即是空| 日韩大尺度在线观看| 亚洲在线观看视频| japanese23hdxxxx日韩| 欧美激情亚洲激情| 日本黄色片在线观看| 欧美日韩久久一区| 天天操天天干视频| 一区二区三区.www| 国产精品无码无卡无需播放器| 精东粉嫩av免费一区二区三区| 在线观看欧美亚洲| 一本久久青青| 国产中文一区二区| 欧美日韩午夜电影网| 国产精品旅馆在线| 性爽视频在线| 国产亚洲免费的视频看| 无码h黄肉3d动漫在线观看| 欧美一级理论片| 中文字幕 日韩有码| 日韩人在线观看| 日本一级黄色录像| 亚洲一区二区3| 538精品在线视频| 国产精品视频观看| 久久久久久久久久久久| 91视频国产观看| 国产精品手机在线观看| 国产精品一级黄| 日日橹狠狠爱欧美超碰| 日本不卡免费一区| 日韩国产美国| 精品日本12videosex| 91丝袜脚交足在线播放| 色999久久久精品人人澡69 | 日韩电影av| 欧洲成人免费aa| 最新日韩精品| 欧洲永久精品大片ww免费漫画| 97视频精彩视频在线观看| 亚洲午夜小视频| 国产区在线视频| 亚洲色图校园春色| 国内精品国产成人国产三级| 91精品久久久久久蜜臀| 91麻豆视频在线观看| 欧美精品九九99久久| 在线观看色网站| 这里是久久伊人| 国产毛片毛片毛片毛片毛片| 91精品久久久久久久91蜜桃| 看片网址国产福利av中文字幕| 亚洲视频一区二区免费在线观看| 少妇精品一区二区三区| 久久久精品欧美丰满| 手机看片福利视频| caoporn国产精品| 醉酒壮男gay强迫野外xx| 久久精品视频网| 五月天免费网站| 久久久亚洲精品石原莉奈| 国产黄片一区二区三区| 亚洲国产成人午夜在线一区| 欧美丰满老妇熟乱xxxxyyy| 国产精品网站在线| 国产盗摄一区二区三区在线| 国产精品网站一区| 五月综合色婷婷| 午夜天堂影视香蕉久久| 黄色在线视频网址| 精品视频免费在线| 性做久久久久久久久久| 日韩精品高清在线| www黄在线观看| 欧美精品免费在线| 岛国av在线网站| 国产精品黄色影片导航在线观看| 中文字幕影音在线| 国产在线精品播放| 国产成人精品一区二区三区在线| 日本91av在线播放| 涩涩涩久久久成人精品 | 午夜激情成人网| 国产综合久久久久| 国产欧美一区二区三区米奇| 欧洲一区二区日韩在线视频观看免费| 欧美激情极品| 最新国产精品久久| 亚洲国产精品一区制服丝袜| 欧美亚洲日本在线观看| 国产精品一卡二| www亚洲色图| 亚洲国产一区视频| 日本少妇做爰全过程毛片| 欧美在线你懂的| 内射无码专区久久亚洲| 色婷婷久久av| 成人国产免费电影| 欧美一区二区三区免费观看| 国产一区二区高清在线| 欧美13一14另类| 欧美网站在线| 免费看黄在线看| 香蕉亚洲视频| 美女日批在线观看| 中文子幕无线码一区tr| 欧美性x x x| 一区二区三区日韩在线观看| 久久精品国产亚洲av麻豆色欲| 午夜影院久久久| 国产xxxx在线观看| 在线亚洲欧美视频| 美女在线视频免费| 99电影网电视剧在线观看| 成人激情免费视频| 成人羞羞国产免费网站| 成人中文字幕在线| 久久精品黄色片| 欧美片在线播放| 丁香婷婷在线观看| 欧美综合在线观看| 成人在线超碰| 国产一区二区三区小说| 黄一区二区三区| 日韩欧美视频免费观看| 日本乱码高清不卡字幕| 91免费视频播放| 在线精品视频视频中文字幕| 深夜成人影院| 欧美日韩在线一区二区三区| 国产精品久久久久久模特| 亚洲一区在线不卡| 久久久久久电影| 无码人妻av一区二区三区波多野| 9191久久久久久久久久久| 天天操天天插天天射| 久久久在线观看| 成人福利一区| 国产96在线 | 亚洲| 成人综合婷婷国产精品久久免费| 91视频免费在观看| 亚洲成人在线免费| 一本色道久久综合无码人妻| 国产性猛交xxxx免费看久久| 色老太综合网| 亚洲高清乱码| 美国一区二区三区在线播放| 日本不卡视频一区| 国产精品久久久久aaaa樱花| 日韩三级视频在线| 日韩av在线免费观看| 松下纱荣子在线观看| 99久久免费国| 亚洲国产激情| a级大片免费看| 亚洲桃色在线一区| www.污视频| 97视频在线看| 国产毛片一区二区三区| 亚洲天堂av线| 亚洲欧美精品午睡沙发| 国产综合在线播放| 欧美整片在线观看| 日韩电影在线视频| 国产麻豆剧传媒精品国产| 国产精品丝袜一区| 国产乱人乱偷精品视频| 国产一区二区成人| 小早川怜子影音先锋在线观看| caoporen国产精品| 性感少妇一区| 日本爱爱小视频| 欧美丝袜丝交足nylons图片| 天堂av网在线| 欧美亚洲第一页| 欧美高清视频在线观看mv| 国产成人av片| 亚洲影院在线观看| 国产高清免费av| 欧美成人午夜影院| 欧美一级色片| 拔插拔插华人永久免费| 亚洲成a人在线观看| 国产最新视频在线| 91久久偷偷做嫩草影院| 一本精品一区二区三区| 国内av一区二区| 精品人伦一区二区三区蜜桃网站| 少妇荡乳情欲办公室456视频| 欧美激情一区二区久久久| 亚洲超碰在线观看| www插插插无码免费视频网站| 国产成人一区在线| 青青国产在线视频| 欧美黑人一区二区三区| 日韩激情一区| 日本少妇毛茸茸| 欧美一卡2卡三卡4卡5免费| 日韩av大片站长工具| 国产免费一区二区视频| 99久久婷婷国产综合精品| 亚洲图片小说视频|