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

6種限流實現,附代碼!

開發 前端
本文提供了 6 種具體的實現限流的手段,他們分別是:Tomcat 使用 ??maxThreads??? 來實現限流;Nginx 提供了兩種限流方式,一是通過 ??limit_req_zone?? 和 ??burst??? 來實現速率限流,二是通過 ??limit_conn_zone?? 和 ??limit_conn?? 兩個指令控制并發連接的總數。

限流是一種控制訪問速率的策略,用于限制系統、服務或API接口的請求頻率或數量。它的目的是為了保護系統免受過多請求的影響,防止系統因過載而崩潰或變得不可用。限流是一種重要的性能優化和資源保護機制。

限流的好處有以下幾個:

  • 保護系統穩定性:如果系統接受太多請求,超出了其處理能力,可能導致系統崩潰或響應時間急劇增加,從而影響用戶體驗。限流可以幫助控制請求速率,確保系統穩定運行。
  • 保護系統可用性:有些資源可能是有限的,如數據庫連接、網絡帶寬、內存等。通過限制對這些資源的訪問,可以防止它們被耗盡,從而保護系統的可用性。
  • 防止惡意攻擊:限流可以減少惡意攻擊和濫用系統資源的風險。例如,防止 DDoS(分布式拒絕服務)攻擊或惡意爬蟲訪問網站。
  • 公平分配資源:對于多個客戶或用戶,限流可以確保資源公平分配。每個客戶都有限制的訪問機會,而不會被某個客戶壟斷。
  • 避免雪崩效應:當系統中的一個組件或服務發生故障時,可能會導致大量請求涌入其他正常的組件或服務,進一步加劇系統負載,限流可以防止這種雪崩效應。

限流分類

限流的實現方案有很多種,磊哥這里稍微理了一下,限流的分類如下所示:

  1. 合法性驗證限流:比如驗證碼、IP 黑名單等,這些手段可以有效的防止惡意攻擊和爬蟲采集。
  2. 容器限流:比如 Tomcat、Nginx 等限流手段,其中 Tomcat 可以設置最大線程數(maxThreads),當并發超過最大線程數會排隊等待執行;而 Nginx 提供了兩種限流手段:一是控制速率,二是控制并發連接數。
  3. 服務端限流:比如我們在服務器端通過限流算法實現限流,此項也是我們本文介紹的重點。

合法性驗證限流為最常規的業務代碼,就是普通的驗證碼和 IP 黑名單系統,本文就不做過多的敘述了,我們重點來看下后兩種限流的實現方案:容器限流和服務端限流。

一、容器限流

1.1 Tomcat 限流

Tomcat 8.5 版本的最大線程數在 conf/server.xml 配置中,如下所示:

<Connector port="8080" protocol="HTTP/1.1"
          connectionTimeout="20000"
          maxThreads="150"
          redirectPort="8443" />

其中 maxThreads 就是 Tomcat 的最大線程數,當請求的并發大于此值(maxThreads)時,請求就會排隊執行,這樣就完成了限流的目的。

小貼士:maxThreads 的值可以適當的調大一些,此值默認為 150(Tomcat 版本 8.5.42),但這個值也不是越大越好,要看具體的硬件配置,需要注意的是每開啟一個線程需要耗用 1MB 的 JVM 內存空間用于作為線程棧之用,并且線程越多 GC 的負擔也越重。最后需要注意一下,操作系統對于進程中的線程數有一定的限制,Windows 每個進程中的線程數不允許超過 2000,Linux 每個進程中的線程數不允許超過 1000。

1.2 Nginx 限流

Nginx 提供了兩種限流手段:一是控制速率,二是控制并發連接數。

控制速率

我們需要使用 limit_req_zone 用來限制單位時間內的請求數,即速率限制,示例配置如下:

limit_req_zone $binary_remote_addr zone=mylimit:10m rate=2r/s;
server { 
    location / { 
        limit_req zone=mylimit;
    }
}

以上配置表示,限制每個 IP 訪問的速度為 2r/s,因為 Nginx 的限流統計是基于毫秒的,我們設置的速度是 2r/s,轉換一下就是 500ms 內單個 IP 只允許通過 1 個請求,從 501ms 開始才允許通過第 2 個請求。

我們使用單 IP 在 10ms 內發并發送了 6 個請求的執行結果如下:

圖片圖片

從以上結果可以看出他的執行符合我們的預期,只有 1 個執行成功了,其他的 5 個被拒絕了(第 2 個在 501ms 才會被正常執行)。速率限制升級版上面的速率控制雖然很精準但是應用于真實環境未免太苛刻了,真實情況下我們應該控制一個 IP 單位總時間內的總訪問次數,而不是像上面那么精確但毫秒,我們可以使用 burst 關鍵字開啟此設置,示例配置如下:

limit_req_zone $binary_remote_addr znotallow=mylimit:10m rate=2r/s;
server { 
    location / { 
        limit_req znotallow=mylimit burst=4;
    }
}

burst=4 表示每個 IP 最多允許4個突發請求,如果單個 IP 在 10ms 內發送 6 次請求的結果如下:

圖片圖片

從以上結果可以看出,有 1 個請求被立即處理了,4 個請求被放到 burst 隊列里排隊執行了,另外 1 個請求被拒絕了。

控制并發數

利用 limit_conn_zone 和 limit_conn 兩個指令即可控制并發數,示例配置如下:

limit_conn_zone $binary_remote_addr znotallow=perip:10m;
limit_conn_zone $server_name znotallow=perserver:10m;
server {
    ...
    limit_conn perip 10;
    limit_conn perserver 100;
}

其中 limit_conn perip 10 表示限制單個 IP 同時最多能持有 10 個連接;limit_conn perserver 100 表示 server 同時能處理并發連接的總數為 100 個。

小貼士:只有當 request header 被后端處理后,這個連接才進行計數。

二、服務端限流

服務端限流需要配合限流的算法來執行,而算法相當于執行限流的“大腦”,用于指導限制方案的實現。

有人看到「算法」兩個字可能就暈了,覺得很深奧,其實并不是,算法就相當于操作某個事務的具體實現步驟匯總,其實并不難懂,不要被它的表象給嚇到哦~

限流的常見實現算法有以下三種:

  • 時間窗口算法
  • 漏桶算法
  • 令牌算法

接下來我們分別看來。

2.1 時間窗口算法

所謂的滑動時間算法指的是以當前時間為截止時間,往前取一定的時間,比如往前取 60s 的時間,在這 60s 之內運行最大的訪問數為 100,此時算法的執行邏輯為,先清除 60s 之前的所有請求記錄,再計算當前集合內請求數量是否大于設定的最大請求數 100,如果大于則執行限流拒絕策略,否則插入本次請求記錄并返回可以正常執行的標識給客戶端。

滑動時間窗口如下圖所示:

圖片圖片

其中每一小個表示 10s,被紅色虛線包圍的時間段則為需要判斷的時間間隔,比如 60s 秒允許 100 次請求,那么紅色虛線部分則為 60s。

我們可以借助 Redis 的有序集合 ZSet 來實現時間窗口算法限流,實現的過程是先使用 ZSet 的 key 存儲限流的 ID,score 用來存儲請求的時間,每次有請求訪問來了之后,先清空之前時間窗口的訪問量,統計現在時間窗口的個數和最大允許訪問量對比,如果大于等于最大訪問量則返回 false 執行限流操作,負責允許執行業務邏輯,并且在 ZSet 中添加一條有效的訪問記錄,具體實現代碼如下。

我們借助 Jedis 包來操作 Redis,實現在 pom.xml 添加 Jedis 框架的引用,配置如下:

<!-- https://mvnrepository.com/artifact/redis.clients/jedis -->
<dependency>
    <groupId>redis.clients</groupId>
    <artifactId>jedis</artifactId>
    <version>3.3.0</version>
</dependency>

具體的 Java 實現代碼如下:

import redis.clients.jedis.Jedis;

public class RedisLimit {
    // Redis 操作客戶端
    static Jedis jedis = new Jedis("127.0.0.1", 6379);

    public static void main(String[] args) throws InterruptedException {
        for (int i = 0; i < 15; i++) {
            boolean res = isPeriodLimiting("java", 3, 10);
            if (res) {
                System.out.println("正常執行請求:" + i);
            } else {
                System.out.println("被限流:" + i);
            }
        }
        // 休眠 4s
        Thread.sleep(4000);
        // 超過最大執行時間之后,再從發起請求
        boolean res = isPeriodLimiting("java", 3, 10);
        if (res) {
            System.out.println("休眠后,正常執行請求");
        } else {
            System.out.println("休眠后,被限流");
        }
    }

    /**
     * 限流方法(滑動時間算法)
     * @param key      限流標識
     * @param period   限流時間范圍(單位:秒)
     * @param maxCount 最大運行訪問次數
     * @return
     */
    private static boolean isPeriodLimiting(String key, int period, int maxCount) {
        long nowTs = System.currentTimeMillis(); // 當前時間戳
        // 刪除非時間段內的請求數據(清除老訪問數據,比如 period=60 時,標識清除 60s 以前的請求記錄)
        jedis.zremrangeByScore(key, 0, nowTs - period * 1000);
        long currCount = jedis.zcard(key); // 當前請求次數
        if (currCount >= maxCount) {
            // 超過最大請求次數,執行限流
            return false;
        }
        // 未達到最大請求數,正常執行業務
        jedis.zadd(key, nowTs, "" + nowTs); // 請求記錄 +1
        return true;
    }
}

以上程序的執行結果為:

正常執行請求:0

正常執行請求:1

正常執行請求:2

正常執行請求:3

正常執行請求:4

正常執行請求:5

正常執行請求:6

正常執行請求:7

正常執行請求:8

正常執行請求:9

被限流:10

被限流:11

被限流:12

被限流:13

被限流:14

休眠后,正常執行請求

此實現方式存在的缺點有兩個:

  • 使用 ZSet 存儲有每次的訪問記錄,如果數據量比較大時會占用大量的空間,比如 60s 允許 100W 訪問時;
  • 此代碼的執行非原子操作,先判斷后增加,中間空隙可穿插其他業務邏輯的執行,最終導致結果不準確。

2.1 漏桶算法

漏桶算法的靈感源于漏斗,如下圖所示:

圖片圖片

滑動時間算法有一個問題就是在一定范圍內,比如 60s 內只能有 10 個請求,當第一秒時就到達了 10 個請求,那么剩下的 59s 只能把所有的請求都給拒絕掉,而漏桶算法可以解決這個問題。

漏桶算法類似于生活中的漏斗,無論上面的水流倒入漏斗有多大,也就是無論請求有多少,它都是以均勻的速度慢慢流出的。當上面的水流速度大于下面的流出速度時,漏斗會慢慢變滿,當漏斗滿了之后就會丟棄新來的請求;當上面的水流速度小于下面流出的速度的話,漏斗永遠不會被裝滿,并且可以一直流出。

漏桶算法的實現步驟是,先聲明一個隊列用來保存請求,這個隊列相當于漏斗,當隊列容量滿了之后就放棄新來的請求,然后重新聲明一個線程定期從任務隊列中獲取一個或多個任務進行執行,這樣就實現了漏桶算法。

上面我們演示 Nginx 的控制速率其實使用的就是漏桶算法,當然我們也可以借助 Redis 很方便的實現漏桶算法。

我們可以使用 Redis 4.0 版本中提供的 Redis-Cell 模塊,該模塊使用的是漏斗算法,并且提供了原子的限流指令,而且依靠 Redis 這個天生的分布式程序就可以實現比較完美的限流了。Redis-Cell 實現限流的方法也很簡單,只需要使用一條指令 cl.throttle 即可,使用示例如下:

> cl.throttle mylimit 15 30 60
1)(integer)0 # 0 表示獲取成功,1 表示拒絕
2)(integer)15 # 漏斗容量
3)(integer)14 # 漏斗剩余容量
4)(integer)-1 # 被拒絕之后,多長時間之后再試(單位:秒)-1 表示無需重試
5)(integer)2 # 多久之后漏斗完全空出來

其中 15 為漏斗的容量,30 / 60s 為漏斗的速率。

2.3 令牌算法

在令牌桶算法中有一個程序以某種恒定的速度生成令牌,并存入令牌桶中,而每個請求需要先獲取令牌才能執行,如果沒有獲取到令牌的請求可以選擇等待或者放棄執行,如下圖所示:

圖片圖片

我們可以使用 Google 開源的 guava 包,很方便的實現令牌桶算法,首先在 pom.xml 添加 guava 引用,配置如下:

<!-- https://mvnrepository.com/artifact/com.google.guava/guava -->
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>28.2-jre</version>
</dependency>

具體實現代碼如下:

import com.google.common.util.concurrent.RateLimiter;

import java.time.Instant;

/**
 * Guava 實現限流
 */
public class RateLimiterExample {
    public static void main(String[] args) {
        // 每秒產生 10 個令牌(每 100 ms 產生一個)
        RateLimiter rt = RateLimiter.create(10);
        for (int i = 0; i < 11; i++) {
            new Thread(() -> {
                // 獲取 1 個令牌
                rt.acquire();
                System.out.println("正常執行方法,ts:" + Instant.now());
            }).start();
        }
    }
}

以上程序的執行結果為:

正常執行方法,ts:2023-05-15T14:46:37.175Z

正常執行方法,ts:2023-05-15T14:46:37.237Z

正常執行方法,ts:2023-05-15T14:46:37.339Z

正常執行方法,ts:2023-05-15T14:46:37.442Z

正常執行方法,ts:2023-05-15T14:46:37.542Z

正常執行方法,ts:2023-05-15T14:46:37.640Z

正常執行方法,ts:2023-05-15T14:46:37.741Z

正常執行方法,ts:2023-05-15T14:46:37.840Z

正常執行方法,ts:2023-05-15T14:46:37.942Z

正常執行方法,ts:2023-05-15T14:46:38.042Z

正常執行方法,ts:2023-05-15T14:46:38.142Z

從以上結果可以看出令牌確實是每 100ms 產生一個,而 acquire() 方法為阻塞等待獲取令牌,它可以傳遞一個 int 類型的參數,用于指定獲取令牌的個數。它的替代方法還有 tryAcquire(),此方法在沒有可用令牌時就會返回 false 這樣就不會阻塞等待了。當然 tryAcquire() 方法也可以設置超時時間,未超過最大等待時間會阻塞等待獲取令牌,如果超過了最大等待時間,還沒有可用的令牌就會返回 false。

注意:使用 guava 實現的令牌算法屬于程序級別的單機限流方案,而上面使用 Redis-Cell 的是分布式的限流方案。

小結

本文提供了 6 種具體的實現限流的手段,他們分別是:Tomcat 使用 maxThreads 來實現限流;Nginx 提供了兩種限流方式,一是通過 limit_req_zone 和 burst 來實現速率限流,二是通過 limit_conn_zone 和 limit_conn 兩個指令控制并發連接的總數。最后我們講了時間窗口算法借助 Redis 的有序集合可以實現,還有漏桶算法可以使用 Redis-Cell 來實現,以及令牌算法可以解決 Google 的 guava 包來實現。

需要注意的是借助 Redis 實現的限流方案可用于分布式系統,而 guava 實現的限流只能應用于單機環境。如果你嫌棄服務器端限流麻煩,甚至可以在不改代碼的情況下直接使用容器限流(Nginx 或 Tomcat),但前提是能滿足你的業務需求。

好了,本節到這里就結束了,下期我們再會~

參考 & 鳴謝

https://www.cnblogs.com/biglittleant/p/8979915.html

責任編輯:武曉燕 來源: Java中文社群
相關推薦

2024-11-20 15:24:49

2023-09-02 21:14:32

2020-09-09 08:23:53

URLIP代碼

2021-11-05 21:33:28

Redis數據高并發

2022-05-31 09:36:18

JDKDelayQueueRedis

2023-05-10 13:58:13

服務限流系統

2022-03-18 14:33:22

限流算法微服務

2023-07-11 10:24:00

分布式限流算法

2023-09-06 15:22:26

限流Java

2023-11-09 08:14:07

時間窗口限流

2025-01-21 08:00:00

限流微服務算法

2021-05-14 07:45:07

Sentinel 接口限流

2011-11-21 10:52:47

OpenFlowSDN軟件定義網絡

2023-05-31 19:10:31

2021-05-31 07:01:46

限流算法令牌

2011-08-08 10:42:46

iPhone UITableVie 分頁

2022-03-07 09:42:21

Go快速排序

2023-08-08 08:01:22

微服務架構服務

2024-11-05 15:02:41

2021-07-23 14:58:28

Nginx限流方案
點贊
收藏

51CTO技術棧公眾號

狠狠色噜噜狠狠狠狠97| 国产不卡视频在线播放| 视频在线一区二区| 国产精品19p| 自拍在线观看| 亚洲欧洲精品天堂一级| 国产在线资源一区| 亚洲天天综合网| 在线观看不卡| 日韩在线资源网| 熟妇人妻久久中文字幕| 欧美一级在线| 欧美性色视频在线| 中文字幕精品在线播放| 牛牛澡牛牛爽一区二区| 国产一区二区三区免费在线观看| 欧洲精品在线视频| 永久免费看黄网站| 热久久天天拍国产| 日韩高清中文字幕| 成年人看片网站| 日韩黄色碟片| 91精品福利在线| 秋霞无码一区二区| 欧美xxxx性xxxxx高清| 中文欧美字幕免费| 蜜桃传媒视频麻豆一区| 亚洲av色香蕉一区二区三区| 理论电影国产精品| 国产精品白嫩初高中害羞小美女 | 天天干天天爽天天操| 久草精品在线观看| 国产精品视频精品| 无码人妻熟妇av又粗又大| 雨宫琴音一区二区在线| 九九久久国产精品| 国产精品免费人成网站酒店| 日韩欧美午夜| 一区二区三区黄色| 亚洲人成人无码网www国产| 久久超级碰碰| 精品欧美一区二区久久| 欧美色图校园春色| 日本高清久久| 91精品国产乱码久久蜜臀| 自拍偷拍一区二区三区四区| 色综合天天色| 欧美日韩亚洲综合一区| 91视频免费版污| 日韩中文视频| 欧美视频完全免费看| 亚洲综合色在线观看| 亚洲成人av观看| 欧美私人免费视频| 伊人影院综合在线| 国产999精品在线观看| 欧美精品1区2区3区| 在线观看免费不卡av| 97久久中文字幕| 在线成人小视频| 日本人dh亚洲人ⅹxx| 亚洲成人偷拍| 亚洲国产99精品国自产| 一本加勒比波多野结衣| 欧美日韩123| 中文字幕亚洲一区二区三区五十路| 四虎永久免费在线观看| 精品国产一区一区二区三亚瑟 | 成人看片免费| 一区二区三区中文字幕| 成人免费看片'免费看| 国产福利电影在线播放| 欧美日韩在线视频观看| 午夜欧美福利视频| 精品午夜视频| 日韩成人性视频| 亚洲午夜精品久久久久久高潮| 久久美女视频| 久久久久久久国产精品| 伊人手机在线视频| 男女男精品视频| 91香蕉亚洲精品| 少妇高潮一区二区三区99小说 | 大吊一区二区三区| 亚洲精品国产成人影院| 午夜精品久久久久久99热| 亚洲自拍一区在线观看| 激情亚洲综合在线| 精品高清视频| 免费黄色电影在线观看| 亚洲高清不卡在线| 亚洲第一中文av| 成人直播在线观看| 中日韩美女免费视频网址在线观看 | 欧美色综合一区二区三区| 中文字幕高清一区| 野外做受又硬又粗又大视频√| 欧美一区 二区 三区| 欧美一区国产二区| 伊人网伊人影院| 欧美日韩亚洲国产精品| 国产精品久久久久一区二区 | 日韩制服诱惑| 欧美sm美女调教| 成人性视频免费看| 国产精品亚洲综合久久| 91色中文字幕| 国产高清视频免费最新在线| 亚洲狠狠爱一区二区三区| 精品久久久噜噜噜噜久久图片| 超碰成人在线免费| 久久韩国免费视频| 在线永久看片免费的视频| 国产成人亚洲综合a∨婷婷| 神马影院午夜我不卡| 福利影院在线看| 欧美一区二区三区爱爱| www.99热| 美女日韩在线中文字幕| 国产亚洲精品美女久久久m| 米奇777四色精品人人爽| 欧美视频二区36p| 国产二级一片内射视频播放| 在线精品小视频| 国产伊人精品在线| 国产午夜视频在线观看| 欧美日韩免费看| 美女网站视频在线观看| 亚洲精品久久| 成人精品久久一区二区三区| av在线电影免费观看| 日本精品视频一区二区三区| 粉嫩av懂色av蜜臀av分享| 欧美视频四区| 97超级碰碰| av香蕉成人| 欧美一区二区三区四区视频| 亚洲女人毛茸茸高潮| 全部av―极品视觉盛宴亚洲| 热re99久久精品国产99热| 日本在线高清| 日韩精品在线视频| 天天做天天爱夜夜爽| 97se亚洲国产综合自在线不卡| 久久亚洲精品无码va白人极品| 亚洲福利合集| 欧美国产日韩一区二区三区| 精品人妻一区二区三区四区不卡| 亚洲精品成a人| 国产成人精品一区二区在线小狼| 欧美国产专区| 国产一区二区三区无遮挡| 黄色18在线观看| 亚洲第一精品夜夜躁人人爽 | 欧美日韩精品一区| 欧美第一视频| 这里只有视频精品| 国产女人18毛片水真多| 亚洲精品免费看| 视频免费在线观看| 欧美亚洲自偷自偷| 五码日韩精品一区二区三区视频| 欧美高清xxx| 欧美精品在线免费播放| 欧洲av在线播放| 日韩欧美在线中文字幕| 精品无码在线观看| 国产精品自拍网站| 国产情侣第一页| 亚洲人成网亚洲欧洲无码| 国产精品爽爽爽爽爽爽在线观看| 免费a在线看| 精品国产一区二区三区不卡| 欧美啪啪小视频| 国产精品麻豆一区二区| 欧美精品色视频| 在线亚洲观看| 一区二区三区的久久的视频| 99精品国产一区二区三区2021| 91国内产香蕉| 日韩在线观看www| 精品久久久久久无| 欧美性猛交xxxx乱大交hd| 亚洲三级免费电影| 能免费看av的网站| 激情五月激情综合网| 欧美国产亚洲一区| 99久久综合狠狠综合久久aⅴ| 亚洲xxxx做受欧美| 亚洲电影观看| 久久综合伊人77777蜜臀| 亚洲日本中文字幕在线| 在线不卡一区二区| 香蕉免费毛片视频| 亚洲色图在线视频| 老牛影视av老牛影视av| 国产精品一区二区久久精品爱涩| 国产午夜伦鲁鲁| 永久91嫩草亚洲精品人人| 欧美日韩亚洲一区二区三区在线观看 | 一级黄色片毛片| 蜜桃视频免费观看一区| 9久久9毛片又大又硬又粗| 99久久精品费精品国产风间由美 | 国产乱国产乱老熟300部视频| 久久一区视频| 国产情侣第一页| 国产精品videosex性欧美| 蜜桃av久久久亚洲精品| 亚洲一区二区三区在线免费| 国产精品女人网站| 天堂√8在线中文| 欧美肥臀大乳一区二区免费视频| 超碰国产在线观看| 亚洲精品有码在线| 日韩性xxxx| 精品日韩av一区二区| 国产精品日韩无码| 在线观看不卡一区| av图片在线观看| 欧美日韩日本国产| 中文在线观看免费网站| 亚洲精品综合在线| 日韩在线视频网址| 最近日韩中文字幕| 国产一区在线观看免费| 日本一区二区三区久久久久久久久不 | 五月天亚洲色图| 国产精品免费在线| 97久久综合区小说区图片区| 亚洲在线免费看| 2019中文亚洲字幕| 91麻豆国产精品| 国产高清视频一区二区| 成人在线视频网站| 青青在线精品| 国产在线观看不卡| 九七电影院97理论片久久tvb| 国产精品69精品一区二区三区| 中国色在线日|韩| 日韩av色在线| 亚洲精品555| 国产精品一区二区三区久久久| 亚洲日本在线观看视频| 国产精品美女999| 国产福利亚洲| 91精品国产综合久久香蕉922| 亚洲精品毛片| 91精品国产91久久久久青草| 亚洲精品一区二区三区在线| 成人片在线免费看| 你懂的在线观看一区二区| 久久久久一区二区三区| 九色精品国产蝌蚪| 无遮挡亚洲一区| 91超碰国产精品| 久久这里只有精品18| 99热这里只有成人精品国产| 虎白女粉嫩尤物福利视频| 日韩av一区二区三区| 中文字幕中文在线| 粉嫩av一区二区三区在线播放| 国产白袜脚足j棉袜在线观看| 96av麻豆蜜桃一区二区| 成人做爰69片免网站| 成人免费在线播放视频| www.天天色| 91国偷自产一区二区开放时间 | 情侣黄网站免费看| 蜜桃视频第一区免费观看| 亚欧精品在线视频| 99久久精品99国产精品| 久久久久久久毛片| 亚洲青青青在线视频| 亚欧视频在线观看| 欧美三级电影在线看| 亚洲爆乳无码一区二区三区| 亚洲精品一区中文| 日本免费中文字幕在线| 97国产成人精品视频| 秋霞国产精品| 国产不卡一区二区三区在线观看| 思热99re视热频这里只精品| 亚洲一区二三| 9色精品在线| 亚洲36d大奶网| 99精品国产视频| 国产传媒免费在线观看| 黑人欧美xxxx| 精品久久国产视频| 亚洲天天在线日亚洲洲精| 激情影院在线观看| 欧美一区二区三区精品电影| 国产日本亚洲| 视频一区二区在线观看| 亚洲精品1234| 制服丝袜中文字幕第一页| 99热精品国产| 全程偷拍露脸中年夫妇| 欧美亚洲一区二区在线| 色欲久久久天天天综合网| 久久精品亚洲热| 99re久久| 你懂的视频在线一区二区| 欧美91大片| 亚洲一级免费在线观看| 26uuu国产电影一区二区| 免费在线一区二区三区| 欧美日本一区二区| 黄视频在线播放| 992tv在线成人免费观看| 99久久这里有精品| 亚洲一区bb| 日韩激情中文字幕| 88久久精品无码一区二区毛片| 亚洲v中文字幕| 亚洲国产精品18久久久久久| 久久国内精品一国内精品| 国产成人精品一区二三区在线观看| 国产精品对白刺激久久久| 91高清一区| 日本黄大片一区二区三区| 国产欧美精品一区| 亚洲天堂五月天| 国产丝袜高跟一区| 欧美久久天堂| 狠狠久久综合婷婷不卡| 亚洲午夜久久久久久尤物| 亚洲av无码久久精品色欲| 成人精品视频| 亚洲国产一二三精品无码| 老司机精品视频在线| 三年中国中文观看免费播放| 色婷婷综合久久久| 精彩国产在线| 日韩av手机在线| 精品国产乱码久久久| 农村妇女精品一二区| 久久午夜色播影院免费高清| 青草视频在线观看免费| 亚洲精品永久免费| 日韩电影大全网站| 视频二区一区| 老司机免费视频一区二区| 亚洲国产精品一区二区久久hs| 欧美性猛交一区二区三区精品| 免费福利在线视频| 国产精品高清在线| 91亚洲国产| 日本亚洲一区二区三区| 一级中文字幕一区二区| 亚洲乱码国产乱码精品精软件| 欧美黄色www| 狼人天天伊人久久| 久草在在线视频| 一区在线中文字幕| 午夜精品久久久久久久99热黄桃| 欧美激情xxxxx| 蜜臀av一区| 91淫黄看大片| 一色屋精品亚洲香蕉网站| 精品人妻伦一区二区三区久久| 久久久人成影片一区二区三区观看 | 日韩av不卡播放| 麻豆国产欧美一区二区三区| 国产精品视频一区二区三区综合| 一区视频在线播放| 一区二区视频在线免费观看| 日韩中文字幕视频| 国产精品亚洲欧美日韩一区在线| 亚洲国产一二三精品无码| www.亚洲色图.com| 中文字幕在线看人| 日韩在线免费观看视频| 日本99精品| 国产极品美女高潮无套久久久| 中文字幕二三区不卡| 亚洲精品国产suv一区| 欧美亚洲另类视频| 国产国产精品| 污污免费在线观看| 91久久香蕉国产日韩欧美9色| 日本韩国在线视频爽| 国产不卡一区二区在线观看| 亚洲欧美成人综合| 男人av资源站| 日韩激情av在线播放| 电影一区二区| 成人在线国产视频| 国产精品理论在线观看| 日韩在线一区二区三区四区| 国产精品∨欧美精品v日韩精品| 久久久久久久久久久妇女| 人妻在线日韩免费视频| 欧美人妖巨大在线| 校园春色亚洲| av一区二区三区免费观看| 国产女人水真多18毛片18精品视频 | 91精品国产91久久综合| 一区二区三区免费在线观看视频|