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

聊聊高并發系統之限流特技-2

開發 開發工具
上一篇《聊聊高并發系統限流特技-1》講了限流算法、應用級限流、分布式限流;本篇將介紹接入層限流實現。

[[177166]]

上一篇《聊聊高并發系統限流特技-1》講了限流算法、應用級限流、分布式限流;本篇將介紹接入層限流實現。

接入層限流

接入層通常指請求流量的入口,該層的主要目的有:負載均衡、非法請求過濾、請求聚合、緩存、降級、限流、A/B測試、服務質量監控等等,可以參考筆者寫的《使用Nginx+Lua(OpenResty)開發高性能Web應用》。

對于Nginx接入層限流可以使用Nginx自帶了兩個模塊:連接數限流模塊ngx_http_limit_conn_module和漏桶算法實現的請求限流模塊ngx_http_limit_req_module。還可以使用OpenResty提供的Lua限流模塊lua-resty-limit-traffic進行更復雜的限流場景。

limit_conn用來對某個KEY對應的總的網絡連接數進行限流,可以按照如IP、域名維度進行限流。limit_req用來對某個KEY對應的請求的平均速率進行限流,并有兩種用法:平滑模式(delay)和允許突發模式(nodelay)。

ngx_http_limit_conn_module

limit_conn是對某個KEY對應的總的網絡連接數進行限流。可以按照IP來限制IP維度的總連接數,或者按照服務域名來限制某個域名的總連接數。但是記住不是每一個請求連接都會被計數器統計,只有那些被Nginx處理的且已經讀取了整個請求頭的請求連接才會被計數器統計。

配置示例:

  1. http { 
  2.     limit_conn_zone$binary_remote_addr zone=addr:10m;  
  3.     limit_conn_log_level error; 
  4.     limit_conn_status 503; 
  5.    ... 
  6.    server { 
  7.        ... 
  8.        location /limit { 
  9.            limit_conn addr 1; 
  10.        } 

limit_conn:要配置存放KEY和計數器的共享內存區域和指定KEY的最大連接數;此處指定的最大連接數是1,表示Nginx最多同時并發處理1個連接;

limit_conn_zone:用來配置限流KEY、及存放KEY對應信息的共享內存區域大小;此處的KEY是“$binary_remote_addr”其表示IP地址,也可以使用如$server_name作為KEY來限制域名級別的最大連接數;

limit_conn_status:配置被限流后返回的狀態碼,默認返回503;

limit_conn_log_level:配置記錄被限流后的日志級別,默認error級別。

limit_conn的主要執行過程如下所示:

1、請求進入后首先判斷當前limit_conn_zone中相應KEY的連接數是否超出了配置的最大連接數;

2.1、如果超過了配置的最大大小,則被限流,返回limit_conn_status定義的錯誤狀態碼;

2.2、否則相應KEY的連接數加1,并注冊請求處理完成的回調函數;

3、進行請求處理;

4、在結束請求階段會調用注冊的回調函數對相應KEY的連接數減1。

limt_conn可以限流某個KEY的總并發/請求數,KEY可以根據需要變化。

按照IP限制并發連接數配置示例:

首先定義IP維度的限流區域:

  1. limit_conn_zone $binary_remote_addrzone=perip:10m; 

接著在要限流的location中添加限流邏輯:

  1. location /limit { 
  2.     limit_conn perip 2; 
  3.     echo "123"; 

即允許每個IP最大并發連接數為2。

使用AB測試工具進行測試,并發數為5個,總的請求數為5個:

  1. ab -n 5 -c 5 http://localhost/limit 

將得到如下access.log輸出:

[08/Jun/2016:20:10:51+0800] [1465373451.802] 200

[08/Jun/2016:20:10:51+0800] [1465373451.803] 200

[08/Jun/2016:20:10:51 +0800][1465373451.803] 503

[08/Jun/2016:20:10:51 +0800][1465373451.803] 503

[08/Jun/2016:20:10:51 +0800][1465373451.803] 503

此處我們把access log格式設置為log_format main '[$time_local] [$msec] $status';分別是“日期 日期秒/毫秒值 響應狀態碼”。

如果被限流了,則在error.log中會看到類似如下的內容:

  1. 2016/06/08 20:10:51 [error] 5662#0: *5limiting connections by zone "perip", client: 127.0.0.1, server: _,request: "GET /limit HTTP/1.0", host: "localhost" 

按照域名限制并發連接數配置示例:

首先定義域名維度的限流區域:

  1. limit_conn_zone $ server_name zone=perserver:10m; 

接著在要限流的location中添加限流邏輯:

  1. location /limit { 
  2.     limit_conn perserver 2; 
  3.     echo "123"; 

即允許每個域名最大并發請求連接數為2;這樣配置可以實現服務器最大連接數限制。

ngx_http_limit_req_module

limit_req是令牌桶算法實現,用于對指定KEY對應的請求進行限流,比如按照IP維度限制請求速率。

配置示例:

  1. http { 
  2.     limit_req_zone $binary_remote_addr zone=one:10m rate=1r/s; 
  3.     limit_conn_log_level error; 
  4.     limit_conn_status 503; 
  5.     ... 
  6.     server { 
  7.        ... 
  8.        location /limit { 
  9.             limit_req zone=one burst=5 nodelay; 
  10.     } 

limit_req:配置限流區域、桶容量(突發容量,默認0)、是否延遲模式(默認延遲);

limit_req_zone:配置限流KEY、及存放KEY對應信息的共享內存區域大小、固定請求速率;此處指定的KEY是“$binary_remote_addr”表示IP地址;固定請求速率使用rate參數配置,支持10r/s和60r/m,即每秒10個請求和每分鐘60個請求,不過最終都會轉換為每秒的固定請求速率(10r/s為每100毫秒處理一個請求;60r/m,即每1000毫秒處理一個請求)。

limit_conn_status:配置被限流后返回的狀態碼,默認返回503;

limit_conn_log_level:配置記錄被限流后的日志級別,默認error級別。

limit_req的主要執行過程如下所示:

1、請求進入后首先判斷最后一次請求時間相對于當前時間(第一次是0)是否需要限流,如果需要限流則執行步驟2,否則執行步驟3;

2.1、如果沒有配置桶容量(burst),則桶容量為0;按照固定速率處理請求;如果請求被限流,則直接返回相應的錯誤碼(默認503);

2.2、如果配置了桶容量(burst>0)且延遲模式(沒有配置nodelay);如果桶滿了,則新進入的請求被限流;如果沒有滿則請求會以固定平均速率被處理(按照固定速率并根據需要延遲處理請求,延遲使用休眠實現);

2.3、如果配置了桶容量(burst>0)且非延遲模式(配置了nodelay);不會按照固定速率處理請求,而是允許突發處理請求;如果桶滿了,則請求被限流,直接返回相應的錯誤碼;

3、如果沒有被限流,則正常處理請求;

4、Nginx會在相應時機進行選擇一些(3個節點)限流KEY進行過期處理,進行內存回收。

場景2.1測試

首先定義IP維度的限流區域:

  1. limit_req_zone $binary_remote_addrzone=test:10m rate=500r/s; 

限制為每秒500個請求,固定平均速率為2毫秒一個請求。

接著在要限流的location中添加限流邏輯:

  1. location /limit { 
  2.     limit_req zone=test
  3.     echo "123"; 

即桶容量為0(burst默認為0),且延遲模式。

使用AB測試工具進行測試,并發數為2個,總的請求數為10個:

  1. ab -n 10 -c 2 http://localhost/limit 

將得到如下access.log輸出:

[08/Jun/2016:20:25:56+0800] [1465381556.410] 200

[08/Jun/2016:20:25:56 +0800][1465381556.410] 503

[08/Jun/2016:20:25:56 +0800][1465381556.411] 503

[08/Jun/2016:20:25:56+0800] [1465381556.411] 200

[08/Jun/2016:20:25:56 +0800][1465381556.412] 503

[08/Jun/2016:20:25:56 +0800][1465381556.412] 503

雖然每秒允許500個請求,但是因為桶容量為0,所以流入的請求要么被處理要么被限流,無法延遲處理;另外平均速率在2毫秒左右,比如1465381556.410和1465381556.411被處理了;有朋友會說這固定平均速率不是1毫秒嘛,其實這是因為實現算法沒那么精準造成的。

如果被限流在error.log中會看到如下內容:

  1. 2016/06/08 20:25:56 [error] 6130#0: *1962limiting requests, excess: 1.000 by zone "test", client: 127.0.0.1,server: _, request: "GET /limit HTTP/1.0", host:"localhost" 

如果被延遲了在error.log(日志級別要INFO級別)中會看到如下內容:

  1. 2016/06/10 09:05:23 [warn] 9766#0: *97021delaying request, excess: 0.368, by zone "test", client: 127.0.0.1,server: _, request: "GET /limit HTTP/1.0", host:"localhost" 

場景2.2測試

首先定義IP維度的限流區域:

  1. limit_req_zone $binary_remote_addr    zone=test:10m rate=2r/s; 

為了方便測試設置速率為每秒2個請求,即固定平均速率是500毫秒一個請求。

接著在要限流的location中添加限流邏輯:

  1. location /limit { 
  2.     limit_req zone=test burst=3
  3.     echo "123"; 

固定平均速率為500毫秒一個請求,通容量為3,如果桶滿了新的請求被限流,否則可以進入桶中排隊并等待(實現延遲模式)。

為了看出限流效果我們寫了一個req.sh腳本:

  1. ab -c 6 -n 6 http://localhost/limit 
  2. sleep 0.3 
  3. ab -c 6 -n 6 http://localhost/limit 

首先進行6個并發請求6次URL,然后休眠300毫秒,然后再進行6個并發請求6次URL;中間休眠目的是為了能跨越2秒看到效果,如果看不到如下的效果可以調節休眠時間。

將得到如下access.log輸出:

[09/Jun/2016:08:46:43+0800] [1465433203.959] 200

[09/Jun/2016:08:46:43 +0800][1465433203.959] 503

[09/Jun/2016:08:46:43 +0800][1465433203.960] 503

[09/Jun/2016:08:46:44+0800] [1465433204.450] 200

[09/Jun/2016:08:46:44+0800] [1465433204.950] 200

[09/Jun/2016:08:46:45 +0800][1465433205.453] 200

[09/Jun/2016:08:46:45 +0800][1465433205.766] 503

[09/Jun/2016:08:46:45 +0800][1465433205.766] 503

[09/Jun/2016:08:46:45 +0800][1465433205.767] 503

[09/Jun/2016:08:46:45+0800] [1465433205.950] 200

[09/Jun/2016:08:46:46+0800] [1465433206.451] 200

[09/Jun/2016:08:46:46+0800] [1465433206.952] 200

按照域名限制并發連接數配置

桶容量為3,即桶中在時間窗口內最多流入3個請求,且按照2r/s的固定速率處理請求(即每隔500毫秒處理一個請求);桶計算時間窗口(1.5秒)=速率(2r/s)/桶容量(3),也就是說在這個時間窗口內桶最多暫存3個請求。因此我們要以當前時間往前推1.5秒和1秒來計算時間窗口內的總請求數;另外因為默認是延遲模式,所以時間窗內的請求要被暫存到桶中,并以固定平均速率處理請求:

第一輪:有4個請求處理成功了,按照漏桶桶容量應該最多3個才對;這是因為計算算法的問題,第一次計算因沒有參考值,所以第一次計算后,后續的計算才能有參考值,因此第一次成功可以忽略;這個問題影響很小可以忽略;而且按照固定500毫秒的速率處理請求。

第二輪:因為第一輪請求是突發來的,差不多都在1465433203.959時間點,只是因為漏桶將速率進行了平滑變成了固定平均速率(每500毫秒一個請求);而第二輪計算時間應基于1465433203.959;而第二輪突發請求差不多都在1465433205.766時間點,因此計算桶容量的時間窗口應基于1465433203.959和1465433205.766來計算,計算結果為1465433205.766這個時間點漏桶為空了,可以流入桶中3個請求,其他請求被拒絕;又因為第一輪最后一次處理時間是1465433205.453,所以第二輪第一個請求被延遲到了1465433205.950。這里也要注意固定平均速率只是在配置的速率左右,存在計算精度問題,會有一些偏差。

如果桶容量改為1(burst=1),執行req.sh腳本可以看到如下輸出:

[09/Jun/2016:09:04:30+0800] [1465434270.362] 200

[09/Jun/2016:09:04:30 +0800][1465434270.371] 503

[09/Jun/2016:09:04:30 +0800] [1465434270.372]503

[09/Jun/2016:09:04:30 +0800][1465434270.372] 503

[09/Jun/2016:09:04:30 +0800][1465434270.372] 503

[09/Jun/2016:09:04:30+0800] [1465434270.864] 200

[09/Jun/2016:09:04:31 +0800][1465434271.178] 503

[09/Jun/2016:09:04:31 +0800][1465434271.178] 503

[09/Jun/2016:09:04:31 +0800][1465434271.178] 503

[09/Jun/2016:09:04:31 +0800][1465434271.178] 503

[09/Jun/2016:09:04:31 +0800][1465434271.179] 503

[09/Jun/2016:09:04:31+0800] [1465434271.366] 200

桶容量為1,按照每1000毫秒一個請求的固定平均速率處理請求。

場景2.3測試

首先定義IP維度的限流區域:

  1. limit_req_zone $binary_remote_addrzone=test:10m rate=2r/s; 

為了方便測試配置為每秒2個請求,固定平均速率是500毫秒一個請求。

接著在要限流的location中添加限流邏輯:

  1. location /limit { 
  2.          limit_req zone=test burst=3 nodelay; 
  3.          echo "123"; 
  4.      } 

桶容量為3,如果桶滿了直接拒絕新請求,且每秒2最多兩個請求,桶按照固定500毫秒的速率以nodelay模式處理請求。

為了看到限流效果我們寫了一個req.sh腳本:

  1. ab -c 6 -n 6 http://localhost/limit 
  2. sleep 1 
  3. ab -c 6 -n 6 http://localhost/limit 
  4. sleep 0.3 
  5. ab -c 6 -n 6 http://localhost/limit 
  6. sleep 0.3 
  7. ab -c 6 -n 6 http://localhost/limit 
  8. sleep 0.3 
  9. ab -c 6 -n 6 http://localhost/limit 
  10. sleep 2 
  11. ab -c 6 -n 6 http://localhost/limit 

將得到類似如下access.log輸出:

================================

[09/Jun/2016:14:30:11+0800] [1465453811.754] 200

[09/Jun/2016:14:30:11+0800] [1465453811.755] 200

[09/Jun/2016:14:30:11+0800] [1465453811.755] 200

[09/Jun/2016:14:30:11+0800] [1465453811.759] 200

[09/Jun/2016:14:30:11 +0800][1465453811.759] 503

[09/Jun/2016:14:30:11 +0800][1465453811.759] 503

 

[09/Jun/2016:14:30:12+0800] [1465453812.776] 200

[09/Jun/2016:14:30:12+0800] [1465453812.776] 200

[09/Jun/2016:14:30:12 +0800][1465453812.776] 503

[09/Jun/2016:14:30:12 +0800][1465453812.777] 503

[09/Jun/2016:14:30:12 +0800][1465453812.777] 503

[09/Jun/2016:14:30:12 +0800][1465453812.777] 503

 

[09/Jun/2016:14:30:13 +0800] [1465453813.095]503

[09/Jun/2016:14:30:13 +0800][1465453813.097] 503

[09/Jun/2016:14:30:13 +0800][1465453813.097] 503

[09/Jun/2016:14:30:13 +0800][1465453813.097] 503

[09/Jun/2016:14:30:13 +0800][1465453813.097] 503

[09/Jun/2016:14:30:13 +0800][1465453813.098] 503

 

[09/Jun/2016:14:30:13+0800] [1465453813.425] 200

[09/Jun/2016:14:30:13 +0800][1465453813.425] 503

[09/Jun/2016:14:30:13 +0800][1465453813.425] 503

[09/Jun/2016:14:30:13 +0800][1465453813.426] 503

[09/Jun/2016:14:30:13 +0800][1465453813.426] 503

[09/Jun/2016:14:30:13 +0800][1465453813.426] 503

 

[09/Jun/2016:14:30:13+0800] [1465453813.754] 200

[09/Jun/2016:14:30:13 +0800][1465453813.755] 503

[09/Jun/2016:14:30:13 +0800][1465453813.755] 503

[09/Jun/2016:14:30:13 +0800][1465453813.756] 503

[09/Jun/2016:14:30:13 +0800][1465453813.756] 503

[09/Jun/2016:14:30:13 +0800][1465453813.756] 503

 

[09/Jun/2016:14:30:15+0800] [1465453815.278] 200

[09/Jun/2016:14:30:15+0800] [1465453815.278] 200

[09/Jun/2016:14:30:15+0800] [1465453815.278] 200

[09/Jun/2016:14:30:15 +0800][1465453815.278] 503

[09/Jun/2016:14:30:15 +0800][1465453815.279] 503

[09/Jun/2016:14:30:15 +0800][1465453815.279] 503

 

[09/Jun/2016:14:30:17+0800] [1465453817.300] 200

[09/Jun/2016:14:30:17+0800] [1465453817.300] 200

[09/Jun/2016:14:30:17+0800] [1465453817.300] 200

[09/Jun/2016:14:30:17+0800] [1465453817.301] 200

[09/Jun/2016:14:30:17 +0800][1465453817.301] 503

[09/Jun/2016:14:30:17 +0800][1465453817.301] 503

高并發系統之限流測試

桶容量為3(,即桶中在時間窗口內最多流入3個請求,且按照2r/s的固定速率處理請求(即每隔500毫秒處理一個請求);桶計算時間窗口(1.5秒)=速率(2r/s)/桶容量(3),也就是說在這個時間窗口內桶最多暫存3個請求。因此我們要以當前時間往前推1.5秒和1秒來計算時間窗口內的總請求數;另外因為配置了nodelay,是非延遲模式,所以允許時間窗內突發請求的;另外從本示例會看出兩個問題:

第一輪和第七輪:有4個請求處理成功了;這是因為計算算法的問題,本示例是如果2秒內沒有請求,然后接著突然來了很多請求,第一次計算的結果將是不正確的;這個問題影響很小可以忽略;

第五輪:1.0秒計算出來是3個請求;此處也是因計算精度的問題,也就是說limit_req實現的算法不是非常精準的,假設此處看成相對于2.75的話,1.0秒內只有1次請求,所以還是允許1次請求的。

如果限流出錯了,可以配置錯誤頁面:

  1. proxy_intercept_errors on; 
  2. recursive_error_pages on; 
  3. error_page 503 //www.jd.com/error.aspx; 

limit_conn_zone/limit_req_zone定義的內存不足,則后續的請求將一直被限流,所以需要根據需求設置好相應的內存大小。

此處的限流都是單Nginx的,假設我們接入層有多個nginx,此處就存在和應用級限流相同的問題;那如何處理呢?一種解決辦法:建立一個負載均衡層將按照限流KEY進行一致性哈希算法將請求哈希到接入層Nginx上,從而相同KEY的將打到同一臺接入層Nginx上;另一種解決方案就是使用Nginx+Lua(OpenResty)調用分布式限流邏輯實現。

lua-resty-limit-traffic

之前介紹的兩個模塊使用上比較簡單,指定KEY、指定限流速率等就可以了,如果我們想根據實際情況變化KEY、變化速率、變化桶大小等這種動態特性,使用標準模塊就很難去實現了,因此我們需要一種可編程來解決我們問題;而OpenResty提供了lua限流模塊lua-resty-limit-traffic,通過它可以按照更復雜的業務邏輯進行動態限流處理了。其提供了limit.conn和limit.req實現,算法與nginx limit_conn和limit_req是一樣的。

此處我們來實現ngx_http_limit_req_module中的【場景2.2測試】,不要忘記下載lua-resty-limit-traffic模塊并添加到OpenResty的lualib中。

配置用來存放限流用的共享字典:

  1. lua_shared_dict limit_req_store 100m; 

以下是實現【場景2.2測試】的限流代碼limit_req.lua:

  1. local limit_req = require "resty.limit.req" 
  2. local rate = 2 --固定平均速率 2r/s 
  3. local burst = 3  --桶容量 
  4. local error_status = 503 
  5. local nodelay = false --是否需要不延遲處理 
  6. local lim, err = limit_req.new("limit_req_store", rate, burst) 
  7. if not lim then --沒定義共享字典 
  8.     ngx.exit(error_status) 
  9. end 
  10. local key = ngx.var.binary_remote_addr --IP維度的限流 
  11. --流入請求,如果請求需要被延遲則delay > 0 
  12. local delay, err = lim:incoming(key, true) 
  13. if not delay and err == "rejected" then --超出桶大小了 
  14.     ngx.exit(error_status) 
  15. end 
  16. if delay > 0 then  --根據需要決定是延遲或者不延遲處理 
  17.     if nodelay then 
  18.         --直接突發處理了 
  19.     else 
  20.         ngx.sleep(delay) --延遲處理 
  21.     end 
  22. end 

即限流邏輯再nginx access階段被訪問,如果不被限流繼續后續流程;如果需要被限流要么sleep一段時間繼續后續流程,要么返回相應的狀態碼拒絕請求。

在分布式限流中我們使用了簡單的Nginx+Lua進行分布式限流,有了這個模塊也可以使用這個模塊來實現分布式限流。

另外在使用Nginx+Lua時也可以獲取ngx.var.connections_active進行過載保護,即如果當前活躍連接數超過閾值進行限流保護。

  1. if tonumber(ngx.var.connections_active) >= tonumber(limit) then 
  2.     //限流 
  3. end 

nginx也提供了limit_rate用來對流量限速,如limit_rate 50k,表示限制下載速度為50k。

到此筆者在工作中涉及的限流用法就介紹完,這些算法中有些允許突發,有些會整形為平滑,有些計算算法簡單粗暴;其中令牌桶算法和漏桶算法實現上是類似的,只是表述的方向不太一樣,對于業務來說不必刻意去區分它們;因此需要根據實際場景來決定如何限流,最好的算法不一定是最適用的。

參考資料

https://en.wikipedia.org/wiki/Token_bucket

https://en.wikipedia.org/wiki/Leaky_bucket

http://redis.io/commands/incr

http://nginx.org/en/docs/http/ngx_http_limit_req_module.html

http://nginx.org/en/docs/http/ngx_http_limit_conn_module.html

https://github.com/openresty/lua-resty-limit-traffic

http://nginx.org/en/docs/http/ngx_http_core_module.html#limit_rate

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

責任編輯:趙寧寧 來源: 開濤的博客
相關推薦

2016-11-28 08:58:43

系統限流算法

2016-11-28 08:40:17

系統降級服務

2018-06-19 09:35:51

分布式系統限流

2018-06-11 11:12:09

秒殺限流分布式

2016-11-28 09:00:10

瀏覽器瀏覽器緩存服務端

2016-11-25 00:45:37

隊列數據

2016-11-28 09:08:43

java系統異步非阻塞

2020-02-20 08:00:37

緩存降級限流

2019-12-13 08:52:48

高并發系統限流

2016-11-25 00:38:45

隔離負載均衡系統

2022-06-12 06:45:26

高并發防重

2020-08-27 08:17:05

緩存高并發系統

2019-11-29 10:16:36

高并發系統緩存

2022-05-09 07:35:48

動態集群限流

2021-10-06 19:01:45

高并發熔斷預熱

2022-12-12 09:07:06

Redis并發限流

2019-12-03 10:46:07

PHP高并發架構

2017-04-18 14:49:38

應用層API代碼

2018-09-15 04:59:01

2023-07-03 09:59:00

并發編程并發容器
點贊
收藏

51CTO技術棧公眾號

波多野结衣有码| 一区二区三区四区免费观看| 国产三级精品三级在线观看| 欧美日韩精品在线一区| 欧美日韩国产bt| 一区二区在线观看网站| 欧美在线 | 亚洲| 久久av最新网址| 成人黄色短视频在线观看 | 国产精品久久久久一区二区三区厕所| 欧美一区二区女人| www黄色在线| 影院在线观看全集免费观看| 91色porny| 亚洲伊人一本大道中文字幕| 国产美女激情视频| 91精品一区二区三区综合在线爱| 日韩成人av网址| 五月天视频在线观看| 国产777精品精品热热热一区二区| 久久综合九色综合97_久久久| 国产在线高清精品| 日本熟女毛茸茸| 欧美私人啪啪vps| 中文字幕亚洲自拍| 国产成人av一区二区三区不卡| 日本少妇精品亚洲第一区| 色就色 综合激情| 2018日日夜夜| av大大超碰在线| 中文字幕av一区二区三区高| 久久久婷婷一区二区三区不卡| 国产女人爽到高潮a毛片| 日本在线播放一区二区三区| 78色国产精品| 日本三级午夜理伦三级三| 一区二区蜜桃| 久久久国产精品亚洲一区| 中国女人特级毛片| 国产精品一区二区av交换| 亚洲精美色品网站| 国内精品免费视频| 伊人久久影院| 欧美一区二区高清| 热久久久久久久久| 欧美高清xxx| 欧美在线免费观看亚洲| 已婚少妇美妙人妻系列| 欧美日韩大片| 91黄色免费网站| 欧美激情精品久久久久久小说| 九色porny自拍视频在线观看| 亚洲一区二区高清| a级黄色小视频| 国模私拍一区二区国模曼安| 亚洲成人手机在线| av在线播放亚洲| 国产色播av在线| 色综合天天狠狠| 欧美精品无码一区二区三区| 久久久一本精品| 欧美唯美清纯偷拍| 污污的网站免费| 日韩精品免费视频一区二区三区 | 欧美亚洲国产精品久久| 正在播放国产一区| 天天鲁一鲁摸一摸爽一爽| 久久久国产精品| 欧美成年人视频| 日韩激情一区二区三区| 亚洲免费精品| 国产精品igao视频| 国产又黄又大又粗的视频| 国产精品一区在线观看乱码 | 亚洲男同1069视频| 午夜久久久久久久久久久| 亚洲www色| 精品久久在线播放| 午夜免费高清视频| 国产中文欧美日韩在线| 欧美日韩第一区| 欧美久久一二三四区| 一二三av在线| 精品国产午夜肉伦伦影院| 亚洲欧洲免费视频| 久久国产波多野结衣| 1024成人| 国产精品99导航| 国产免费无遮挡| 99久久精品国产一区二区三区 | 婷婷六月综合网| 天天操天天摸天天爽| 欧美一区一区| 亚洲欧美中文另类| 欧美第一页在线观看| 亚洲影音先锋| 亚洲va电影大全| 青青草视频免费在线观看| 中文字幕在线不卡视频| 2018国产在线| 日韩黄色在线| 日韩精品欧美国产精品忘忧草| 国产第一页精品| 国产欧美日本| 亚洲在线观看视频| 成人高清网站| 在线精品国产| 一本色道久久综合精品竹菊| 国产又猛又黄的视频| 国产精品调教视频| 日韩少妇与小伙激情| 久久久久久久久久免费视频| 激情偷乱视频一区二区三区| 久热国产精品视频一区二区三区| 国内精品久久久久久野外| 色综合视频在线观看| 师生出轨h灌满了1v1| 日韩欧美综合| 日本精品久久久久影院| 黑人精品一区二区三区| 18欧美亚洲精品| 日韩一级片播放| 欧美男人操女人视频| 在线看国产精品| a级片在线观看免费| 午夜在线播放视频欧美| 成人影片在线播放| 米奇精品一区二区三区| 日本精品一级二级| 999精品免费视频| 影音先锋日韩精品| 国产精品视频内| 国产三级在线免费观看| 欧美性极品xxxx做受| 超碰人人cao| 五月久久久综合一区二区小说| 国产mv免费观看入口亚洲| 日韩在线视频第一页| 亚洲精品日韩专区silk| 亚洲最大天堂网| 久久人体视频| 国产精品美女视频网站| 精品美女视频在线观看免费软件| 亚洲第一精品在线| 亚洲免费观看在线| 合欧美一区二区三区| 99蜜桃在线观看免费视频网站| 天堂中文8资源在线8| 欧美日韩精品一区二区三区蜜桃 | 久久久久久免费网| 色综合久久久久无码专区| av一级亚洲| 国语自产在线不卡| 亚洲精品国产精品乱码不卡| 亚洲精品v日韩精品| 亚洲一级片免费观看| 国产精品久久占久久| 国产精品入口免费视| av电影在线网| 欧美日韩三级一区二区| 男女全黄做爰文章| 国产一区激情在线| 亚洲爆乳无码精品aaa片蜜桃| 日韩在线成人| 欧美激情影音先锋| 天天干天天色天天| 亚洲尤物视频在线| 人妻体体内射精一区二区| 亚洲性人人天天夜夜摸| 精品国产电影| 美女一区网站| 色哟哟入口国产精品| 97视频免费在线| 一区二区三区在线播| 最新中文字幕日本| 国产午夜久久| 午夜精品美女久久久久av福利| 涩涩涩久久久成人精品| 久久6免费高清热精品| 国内爆初菊对白视频| 欧美日韩亚洲一区二| 好吊视频在线观看| 国内成人精品2018免费看| 国产一级大片免费看| 丝袜美腿综合| 国产免费亚洲高清| 男女免费观看在线爽爽爽视频| 亚洲精品久久久久中文字幕二区| 波多野结衣一本一道| 亚洲欧美在线观看| 好吊色视频一区二区三区| 日本不卡一区二区| 国产xxxx振车| 欧美日韩第一| 99久久免费国| 成人网ww555视频免费看| 欧美精品免费看| 色中色在线视频| 99热在线只有精品| 中文字幕在线不卡一区二区三区| 青娱乐精品在线| 国产黄色av片| 视频一区二区三区入口| 亚洲高清精品中出| 国产精东传媒成人av电影| 白白操在线视频| av电影在线观看| 日韩精品一区二区三区蜜臀| 69成人免费视频| 一区二区三区中文字幕精品精品| 成人在线国产精品| 中文字幕在线观看播放| 亚洲人成77777在线观看网| 99精品视频免费看| 欧美亚洲自拍偷拍| 国产成人在线播放视频| 亚洲人成精品久久久久久 | 日本道在线观看| 亚洲天堂精品在线观看| 一色道久久88加勒比一| 成人丝袜高跟foot| 国产在线观看中文字幕| 日韩不卡在线观看日韩不卡视频| 亚洲 欧美 日韩 国产综合 在线 | 97精品人妻一区二区三区| 欧美日韩在线免费| 久久精品免费av| 亚洲精品视频免费观看| 午夜三级在线观看| 国产日韩精品一区二区浪潮av | 97视频在线观看亚洲| 调教一区二区| 久久韩剧网电视剧| 欧美尤物美女在线| 久久国产一区二区三区| 欧美日韩欧美| 日韩最新在线视频| 午夜免费视频在线国产| 尤物tv国产一区| 国产精品免费播放| 国产一区二区三区在线看| 日本亚洲一区| 亚洲免费人成在线视频观看| 亚洲av成人无码久久精品老人| 亚洲第一福利在线观看| 欧洲av在线播放| 亚洲精品国精品久久99热| 女人18毛片一区二区三区| 精品国免费一区二区三区| 亚洲成熟女性毛茸茸| 精品国产区一区| 男人天堂手机在线观看| 精品国产露脸精彩对白| 色婷婷av一区二区三区之红樱桃| 欧美精品一区二区三区视频| 国产77777| 亚洲黄色av女优在线观看 | 日韩影片在线观看| 国产精品一区二区三区在线| 一区二区三区亚洲变态调教大结局| 999视频在线观看| 波多野结衣欧美| 精品久久久久亚洲| 精品盗摄女厕tp美女嘘嘘| 色综合影院在线观看| 久久视频精品| 日本高清xxxx| 亚洲无线一线二线三线区别av| 欧美一级欧美一级| 久久精品一本| 国产欧美一区二| 韩国精品久久久| 午夜不卡久久精品无码免费| 91网站最新网址| 亚洲自拍偷拍图| 日韩理论在线观看| 99免费在线观看| 色婷婷亚洲综合| 国产日韩欧美一区二区东京热| 精品国产乱码91久久久久久网站| 青青操在线视频| 久久精品国产亚洲精品2020| 18video性欧美19sex高清| 国产精品草莓在线免费观看| 9999精品视频| 久久精品一二三区| 天天影视欧美综合在线观看| 妞干网在线视频观看| 男男视频亚洲欧美| 无码人妻一区二区三区在线| 久久久精品国产99久久精品芒果| 久久av红桃一区二区禁漫| 亚洲一区二区综合| 最新中文字幕免费| 亚洲国产成人精品久久久国产成人一区 | 日韩免费一区二区| 国产h在线观看| 久久久久中文字幕2018| 激情小说亚洲| 免费99视频| 欧美日韩91| 九色91popny| 成人精品在线视频观看| 国产黄色片在线| 日韩欧美精品网址| 丁香花免费高清完整在线播放| 在线观看成人黄色| 天堂电影一区| 波多野结衣久草一区| 欧美限制电影| 男女av免费观看| 成人av综合一区| 国产美女久久久久久| 欧美午夜一区二区| 成人毛片在线精品国产| 三级精品视频久久久久| 国产经典三级在线| 国产aaa精品| 日韩在线黄色| 男人草女人视频| 日韩高清不卡在线| 中文字幕一区二区三区人妻不卡| 亚洲自拍偷拍综合| 国产视频www| 日韩专区在线播放| 亚洲精品555| 奇米视频888战线精品播放| 伊人久久综合| 久久久久亚洲av成人网人人软件| 成人欧美一区二区三区小说| 啪啪小视频网站| 亚洲美女在线视频| 日韩性xxx| 欧美中日韩一区二区三区| 亚洲作爱视频| xxxxxx黄色| 黄色一区二区在线观看| 人妻少妇一区二区三区| 久久久久久av| 精品国产影院| 男人日女人下面视频| av一本久道久久综合久久鬼色| 日本五十路女优| 亚洲丁香婷深爱综合| av电影在线免费| 激情伦成人综合小说| 一本久久综合| 成人免费毛片糖心| 日本精品免费观看高清观看| 精品无吗乱吗av国产爱色| 国产精品久久久久久久久久东京 | 国产精品jk白丝蜜臀av小说| 亚洲啊啊啊啊啊| 国产成人av福利| 日本少妇做爰全过程毛片| 亚洲国产欧美精品| 成人免费网站视频| 亚洲激情啪啪| 久久99精品久久久| 男女羞羞免费视频| 欧美不卡一区二区三区| а√在线天堂官网| 免费在线观看一区二区| 日韩高清不卡在线| 538任你躁在线精品视频网站| 欧美不卡在线视频| 成人免费直播| 制服诱惑一区| 国产经典欧美精品| 国产成人精品片| 国产一区二区三区高清在线观看| 高清不卡一区| 人妻无码久久一区二区三区免费| 91蝌蚪porny九色| 中文在线字幕免费观| 久热在线中文字幕色999舞| 国产精品久久久久av蜜臀| wwwxxx黄色片| 中文字幕一区二区三区在线观看| www.久久久久久| 热re91久久精品国99热蜜臀| 日韩毛片视频| 波多野结衣三级视频| 欧美午夜宅男影院在线观看| 在线日本视频| 激情欧美一区二区三区中文字幕| 免费亚洲电影在线| 国产午夜激情视频| 中日韩美女免费视频网址在线观看| 欧美一区一区| 久草福利视频在线| 亚洲一级电影视频| www.av在线| 国产日韩在线一区二区三区| 蜜臀av性久久久久蜜臀aⅴ| 中文字幕第28页| 色青青草原桃花久久综合| 九九热hot精品视频在线播放| 中文字幕一区久久| 一本到不卡免费一区二区|