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

為什么要限流?常見的限流算法有哪些?

開發
?實際開發中,當業務流量過大時,為了保護下游服務,我們通常會做一些預防性的工作,今天我們就一起來聊聊限流!

實際開發中,當業務流量過大時,為了保護下游服務,我們通常會做一些預防性的工作,今天我們就一起來聊聊限流!

一、為什么需要限流?

在實際應用中,每個系統或者服務都有其處理能力的極限(瓶頸),即便是微服務中有集群和分布式的夾持,也不能保證系統能應對任何大小的流量,因此,系統為了自保,需要對處理能力范圍以外的流量進行“特殊照顧”(比如,丟棄請求或者延遲處理),從而避免系統卡死、崩潰或不可用等情況,保證系統整體服務可用。

二、限流算法

1.令牌桶算法

令牌桶算法(Token Bucket Algorithm)是計算機網絡和電信領域中常用的一種簡單方法,用于流量整形和速率限制。它旨在控制系統在某個時間段內可以發送或接收的數據量,確保流量符合指定的速率。

令牌桶算法的核心思路:系統按照固定速度往桶里加入令牌,如果桶滿則停止添加。當有請求到來時,會嘗試從桶里拿走一個令牌,取到令牌才能繼續進行請求處理,沒有令牌就拒絕服務。示意圖如下:

令牌桶法的幾個特點:

  • 令牌桶容量固定,即系統的處理能力閾值
  • 令牌放入桶內的速度固定
  • 令牌從桶內拿出的速度根據實際請求量而定,每個請求對應一個令牌
  • 當桶內沒有令牌時,請求進入等待或者被拒絕

令牌桶算法主要用于應對突發流量的場景,在 Java語言中使用最多的是 Google的 Guava RateLimiter,下面舉幾個例子來說明它是如何應對突發流量:

示例1

import java.util.concurrent.TimeUnit;
public class RateLimit {

  public static void main(String[] args) {
    RateLimiter limiter = RateLimiter.create(5); // 每秒創建5個令牌
    System.out.println("acquire(5), wait " + limiter.acquire(5) + " s"); // 全部取走 5個令牌
    System.out.println("acquire(1), wait " + limiter.acquire(1) + " s");// 獲取1個令牌
    boolean result = limiter.tryAcquire(1, 0, TimeUnit.SECONDS); // 嘗試獲取1個令牌,獲取不到則直接返回
    System.out.println("tryAcquire(1), result: " + result);
  }
}

示例代碼運行結果如下:

acquire(5), wait 0.0 s
acquire(1), wait 0.971544 s
tryAcquire(1), result: false

桶中共有 5個令牌,acquire(5)返回0 代表令牌充足無需等待,當桶中令牌不足,acquire(1)等待一段時間才獲取到,當令牌不足時,tryAcquire(1)不等待直接返回。

示例2

import com.google.common.util.concurrent.RateLimiter;
public class RateLimit {
    public static void main(String[] args) {
        RateLimiter limiter = RateLimiter.create(5);
        System.out.println("acquire(10), wait " + limiter.acquire(10) + " s");
        System.out.println("acquire(1), wait " + limiter.acquire(1) + " s");
    }
}

示例代碼運行結果如下:

acquire(10), wait 0.0 s
acquire(1), wait 1.974268 s

桶中共有 5個令牌,acquire(10)返回0,和示例似乎有點沖突,其實,這里返回0 代表應對了突發流量,但是 acquire(1)

卻等待了 1.974268秒,這代表 acquire(1)的等待是時間包含了應對突然流量多出來的 5個請求,即 1.974268 = 1 + 0.974268。

為了更好的驗證示例2的猜想,我們看示例3:

示例3

import com.google.common.util.concurrent.RateLimiter;
import java.util.concurrent.TimeUnit;
public class RateLimit {
    public static void main(String[] args) throws InterruptedException {
        RateLimiter limiter = RateLimiter.create(5);
        System.out.println("acquire(5), wait " + limiter.acquire(5) + " s");
        TimeUnit.SECONDS.sleep(1);
        System.out.println("acquire(5), wait " + limiter.acquire(5) + " s");
        System.out.println("acquire(1), wait " + limiter.acquire(1) + " s");
    }
}

示例代碼運行結果如下:

acquire(5), wait 0.0 s
acquire(5), wait 0.0 s
acquire(1), wait 0.966104 s

桶中共有 5個令牌,acquire(5)返回0 代表令牌充足無需等待,接著睡眠 1s,這樣系統又可以增加5個令牌,因此,再次 acquire(5)令牌充足返回0 無需等待,acquire(1)需要等待一段時間才能獲取令牌。

2.漏桶算法

漏桶算法(Leaky Bucket Algorithm)的核心思路是:水(請求)進入固定容量的漏桶,漏桶的水以固定的速度流出,當水流入漏桶的速度過大導致漏桶滿而直接溢出,然后拒絕請求。示意圖如下:

下面為一個 Java版本的漏桶算法示例:

import java.util.concurrent.*;
public class LeakyBucket {
    private final int capacity; // 桶的容量
    private final int rate;     // 出水速率
    private int water;          // 漏斗中的水量
    private long lastLeakTime;  // 上一次漏水的時間

    public LeakyBucket(int capacity, int rate) {
        this.capacity = capacity;
        this.rate = rate;
        this.water = 0;
        this.lastLeakTime = System.currentTimeMillis();
    }

    public synchronized boolean allowRequest(int tokens) {
        leak(); // 漏水
        if (water + tokens <= capacity) {
            water += tokens; // 漏斗容量未滿,可以加水
            return true;
        } else {
            return false; // 漏斗容量已滿,無法加水
        }
    }

    private void leak() {
        long currentTime = System.currentTimeMillis();
        long timeElapsed = currentTime - lastLeakTime;
        int waterToLeak = (int) (timeElapsed * rate / 1000); // 計算經過的時間內應該漏掉的水量
        water = Math.max(0, water - waterToLeak); // 漏水
        lastLeakTime = currentTime; // 更新上一次漏水時間
    }

    public static void main(String[] args) {
        LeakyBucket bucket = new LeakyBucket(10, 2); // 容量為10,速率為2令牌/秒
        int[] packets = {2, 3, 1, 5, 2, 10}; // 要發送的數據包大小

        for (int packet : packets) {
            if (bucket.allowRequest(packet)) {
                System.out.println("發送 " + packet + " 字節的數據包");
            } else {
                System.out.println("漏桶已滿,無法發送數據包");
            }
            try {
                TimeUnit.SECONDS.sleep(1); // 模擬發送間隔
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

漏桶算法的幾個特點:

  • 漏桶容量固定
  • 流入(請求)速度隨意
  • 流出(處理請求)速度固定
  • 桶滿則溢出,即拒絕新請求(限流)

3.計數器算法

計數器是最簡單的限流方式,主要用來限制總并發數,主要通過一個支持原子操作的計數器來累計 1秒內的請求次數,當 秒內計數達到限流閾值時觸發拒絕策略。每過 1秒,計數器重置為 0開始重新計數。比如數據庫連接池大小、線程池大小、程序訪問并發數等都是使用計數器算法。

如下代碼就是一個Java版本的計數器算法示例,通過一個原子計算器 AtomicInteger來記錄總數,如果請求數大于總數就拒絕請求,否則正常處理請求:

import java.util.concurrent.atomic.AtomicInteger;
public class CounterRateLimiter {
    private final int limit;          // 限流閾值
    private final long windowSizeMs;  // 時間窗口大小(毫秒)
    private AtomicInteger counter;    // 請求計數器
    private long lastResetTime;       // 上次重置計數器的時間

    public CounterRateLimiter(int limit, long windowSizeMs) {
        this.limit = limit;
        this.windowSizeMs = windowSizeMs;
        this.counter = new AtomicInteger(0);
        this.lastResetTime = System.currentTimeMillis();
    }

    public boolean allowRequest() {
        long currentTime = System.currentTimeMillis();
        // 如果當前時間超出了時間窗口,重置計數器
        if (currentTime - lastResetTime > windowSizeMs) {
            counter.set(0);
            lastResetTime = currentTime;
        }
        // 檢查計數器是否超過了限流閾值
        return counter.incrementAndGet() <= limit;
    }

    public static void main(String[] args) {
        CounterRateLimiter rateLimiter = new CounterRateLimiter(3, 1000); // 每秒最多處理3個請求
        for (int i = 0; i < 10; i++) {
            if (rateLimiter.allowRequest()) {
                System.out.println("允許請求 " + (i + 1));
            } else {
                System.out.println("限流,拒絕請求 " + (i + 1));
            }
            try {
                Thread.sleep(200); // 模擬請求間隔
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

4.滑動窗口算法

滑動窗口算法是一種常用于限流和統計的算法。它基于一個固定大小的時間窗口,在這個時間窗口內統計請求的數量,并根據設定的閾值來控制流量。比如,TCP協議就使用了該算法

以下是一個簡單的 Java 示例實現滑動窗口算法:

import java.util.concurrent.atomic.AtomicInteger;

public class SlidingWindowRateLimiter {
    private final int limit;          // 限流閾值
    private final long windowSizeMs;  // 時間窗口大小(毫秒)
    private final AtomicInteger[] window;  // 滑動窗口
    private long lastUpdateTime;      // 上次更新窗口的時間
    private int pointer;              // 指向當前時間窗口的指針

    public SlidingWindowRateLimiter(int limit, long windowSizeMs, int granularity) {
        this.limit = limit;
        this.windowSizeMs = windowSizeMs;
        this.window = new AtomicInteger[granularity];
        for (int i = 0; i < granularity; i++) {
            window[i] = new AtomicInteger(0);
        }
        this.lastUpdateTime = System.currentTimeMillis();
        this.pointer = 0;
    }

    public synchronized boolean allowRequest() {
        long currentTime = System.currentTimeMillis();
        // 計算時間窗口的起始位置
        long windowStart = currentTime - windowSizeMs + 1;

        // 更新窗口中過期的計數器
        while (lastUpdateTime < windowStart) {
            lastUpdateTime++;
            window[pointer].set(0);
            pointer = (pointer + 1) % window.length;
        }

        // 檢查窗口內的總計數是否超過限流閾值
        int totalRequests = 0;
        for (AtomicInteger counter : window) {
            totalRequests += counter.get();
        }

        if (totalRequests >= limit) {
            return false; // 超過限流閾值,拒絕請求
        } else {
            window[pointer].incrementAndGet(); // 記錄新的請求
            return true; // 允許請求
        }
    }

    public static void main(String[] args) {
        SlidingWindowRateLimiter rateLimiter = new SlidingWindowRateLimiter(10, 1000, 10); // 每秒最多處理10個請求
        for (int i = 0; i < 20; i++) {
            if (rateLimiter.allowRequest()) {
                System.out.println("允許請求 " + (i + 1));
            } else {
                System.out.println("限流,拒絕請求 " + (i + 1));
            }
            try {
                Thread.sleep(100); // 模擬請求間隔
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
    }
}

5.Redis + Lua分布式限流

Redis + Lua屬于分布式環境下的限流方案,主要利用的是Lua在 Redis中運行能保證原子性。如下示例為一個簡單的Lua限流腳本:

local key = KEYS[1]
local limit = tonumber(ARGV[1])
local current = tonumber(redis.call('get', key) or "0")

if current + 1 > limit then
    return 0
else
    redis.call("INCRBY", key, 1)
    redis.call("EXPIRE", key, 1)
    return 1
end

腳本解釋:

  • KEYS[1]:限流的鍵名,注意,在Lua中,下角標是從 1開始
  • ARGV[1]:限流的最大值
  • redis.call(‘get’, key):獲取當前限流計數。
  • redis.call(‘INCRBY’, key, 1):增加限流計數。
  • redis.call(‘EXPIRE’, key, 1):設置鍵的過期時間為 1 秒。

6.三方限流工具

當我們自己無法實現比較好的限流方案時,成熟的三方框架就是我們比較好的選擇,下面列出兩個 Java語言比較優秀的框架。

(1) resilience4j

resilience4j 是一個輕量級的容錯庫,提供了限流、熔斷、重試等功能。限流模塊 RateLimiter 提供了靈活的限流配置,其優點如下:

  • 集成了多種容錯機制
  • 支持注解方式配置
  • 易于與 Spring Boot集成

(2) Sentinel

Sentinel 是阿里巴巴開源的一個功能全面的流量防護框架,提供限流、熔斷、系統負載保護等多種功能。其優點如下:

  • 功能全面,適用于多種場景
  • 強大的監控和控制臺
  • 與 Spring Cloud 深度集成

三、總結

本文講述了以下幾種限流方式:

  • 計數器
  • 滑動窗口
  • 漏桶
  • 令牌桶
  • Redis + Lua 分布式限流
  • 三方限流工具

上面的限流方式,主要是針對服務器進行限流,除此之外,我們也可以對客戶端進行限流, 比如驗證碼,答題,排隊等方式。

另外,我們也會在一些中間件上進行限流,比如Apache、Tomcat、Nginx等。

在實際的開發中,限流場景略有差異,限流的維度也不一樣,比如,有的場景需要根據請求的 URL來限流,有的會對 IP地址進行限流、另外,設備ID、用戶ID 也是限流常用的維度,因此,我們需要結合真實業務場景靈活的使用限流方案。

責任編輯:趙寧寧 來源: 猿java
相關推薦

2024-07-05 16:47:46

2023-11-28 09:19:12

2025-04-10 08:00:00

服務限流開發高并發

2024-04-19 00:00:00

計數器算法限流算法

2023-02-20 08:08:48

限流算法計數器算法令牌桶算法

2024-12-09 07:10:00

限流系統

2024-02-26 14:07:18

2022-10-28 18:41:53

Java服務限流

2023-12-07 12:21:04

GCJVM垃圾

2025-01-21 08:00:00

限流微服務算法

2020-08-03 08:04:04

限流算法Sentinel

2022-03-18 14:33:22

限流算法微服務

2020-09-08 06:48:07

微服務算法限流

2022-05-19 14:14:26

go語言限流算法

2025-05-12 00:03:15

2021-10-21 06:39:41

限流熔斷系統

2021-05-31 07:01:46

限流算法令牌

2022-01-07 06:12:08

RPC框架限流

2025-05-23 10:10:00

限流算法系統Go

2023-05-16 08:01:26

限流算法滑動窗口
點贊
收藏

51CTO技術棧公眾號

亚洲成色777777在线观看影院| 国产亚洲精品aa| 性欧美暴力猛交69hd| 好吊一区二区三区视频| 日韩一区二区三区在线免费观看 | 亚洲高清自拍| 亚洲视频在线看| 波多野结衣电影免费观看| 亚洲国产福利| 亚洲情趣在线观看| 欧美日本韩国一区二区三区| 国产麻豆91视频| 亚洲欧美日韩视频二区| 久久精品影视伊人网| 亚洲第一页av| 亚洲精品高潮| 欧美色精品在线视频| 欧美一级片免费播放| а天堂8中文最新版在线官网| 国产aⅴ综合色| 91精品久久久久久久久中文字幕 | 一区二区国产精品| 久久五月情影视| www.狠狠爱| 国产精品一线| 91精品国产综合久久香蕉麻豆| 国产日产欧美视频| 狂野欧美激情性xxxx欧美| 中文在线资源观看网站视频免费不卡| 国产精品美女黄网| 国产区精品在线| 蜜臀久久久久久久| 国产v综合ⅴ日韩v欧美大片| 人人干人人干人人干| 午夜激情一区| 日韩有码在线观看| 中文字幕第24页| 奇米亚洲欧美| 亚洲女人天堂视频| 麻豆国产精品一区| eeuss鲁片一区二区三区| 欧美美女网站色| 五月婷婷丁香色| 欧美暴力调教| 在线观看91视频| 国产精品igao| 日本综合字幕| 色欧美88888久久久久久影院| 国产精品333| 欧产日产国产精品视频| 亚洲h在线观看| 日韩中文字幕在线免费| a'aaa级片在线观看| 亚洲一级电影视频| 无码人妻精品一区二区蜜桃网站| а天堂中文在线官网| 自拍偷在线精品自拍偷无码专区| 宅男噜噜99国产精品观看免费| 自拍视频在线网| 国产精品美女www爽爽爽| 亚洲欧美日韩精品综合在线观看| 97电影在线看视频| 亚洲人成网站色在线观看| 日本xxxxx18| 成人高潮aa毛片免费| 欧美日韩国产一区中文午夜| 国内自拍在线观看| 在线看欧美视频| 欧美日韩国产123区| 欧美性受xxxx黒人xyx性爽| 玖玖精品一区| 亚洲精品av在线播放| 国产精品815.cc红桃| 日韩欧美一区二区三区免费看| 精品国产一区二区三区久久狼5月 精品国产一区二区三区久久久狼 精品国产一区二区三区久久久 | 国产91免费视频| 精品毛片一区二区三区| 不卡的av在线播放| 日本一区二区三区视频在线播放| av中文天堂在线| 亚洲精品欧美在线| www.亚洲成人网| 欧美电影免费观看网站| 欧美日本一道本| www.17c.com喷水少妇| 欧美人与拘性视交免费看| 久久天天躁狠狠躁夜夜躁| 日本视频www| 青青青伊人色综合久久| 北条麻妃高清一区| 欧美日本网站| 亚洲精选视频在线| 国产又黄又大又粗视频| 伊人国产精品| 精品视频在线播放| www.av免费| 国产精品日本欧美一区二区三区| 国产精品美女免费| 欧美亚洲精品在线观看| 国产精品视频第一区| 黄色一级片在线看| 日韩在线你懂得| 亚洲欧美精品中文字幕在线| 东方av正在进入| 日韩激情在线观看| 国产私拍一区| 黄色在线免费看| 日本道在线观看一区二区| 日韩大尺度视频| 青青草国产成人a∨下载安卓| 国内伊人久久久久久网站视频 | 欧美一级视频免费观看| 久久99精品久久久久| 久久久99爱| 欧美人与性动交α欧美精品图片| 欧美性xxxxx极品少妇| yy1111111| 欧美欧美全黄| 国产欧美日韩综合精品| 男男激情在线| 污片在线观看一区二区| 国产乱国产乱老熟300部视频| 日韩电影一区| 国产精品精品视频一区二区三区| 免费看av毛片| 亚洲国产裸拍裸体视频在线观看乱了 | 天天色综合社区| 老汉色老汉首页av亚洲| 欧美人在线观看| 国产免费黄色大片| 亚洲国产高清在线观看视频| 日本久久久精品视频| 国产精品一区二区三区美女| 欧美福利视频在线观看| 国产高清视频免费| 亚洲男人的天堂在线观看| 色片在线免费观看| 日韩av免费大片| 国产精品视频网站| 在线激情网站| 欧美日韩精品免费观看视频| 亚洲色图第四色| 丝袜美腿一区二区三区| 日本一区二区不卡高清更新| 粉嫩一区二区| 伊人亚洲福利一区二区三区| aaaaaa毛片| 久久精品无码一区二区三区| 青青草av网站| 成人区精品一区二区婷婷| 国产精品吹潮在线观看| 91涩漫在线观看| 7777精品伊人久久久大香线蕉的| 久久av红桃一区二区禁漫| 精品综合久久久久久8888| 天堂v在线视频| 国产在线视频欧美一区| 欧美高跟鞋交xxxxhd| 高清国产mv在线观看| 亚洲成人在线免费| 日本丰满少妇裸体自慰 | 三上悠亚在线一区| 欧美高清视频手机在在线| 国产日本欧美在线观看 | 亚洲美女屁股眼交| 亚洲少妇一区二区三区| 在线亚洲免费| 日韩精品最新在线观看| 欧美成人三级| 欧美黄色成人网| 天堂成人在线观看| 日本国产一区二区| chinese全程对白| 丁香网亚洲国际| 妞干网在线视频观看| 中文字幕中文字幕精品| 国产精品一区二区三区在线播放| 欧美极品另类| 精品国产91洋老外米糕| 午夜久久久久久久久久影院| 成人免费在线播放视频| 北京富婆泄欲对白| 日本亚洲最大的色成网站www| 中文字幕日韩一区二区三区不卡 | 刘亦菲一区二区三区免费看| 视频在线一区二区| 亚洲第一视频在线| 91久久奴性调教| 婷婷色中文字幕| 久久久影视传媒| 婷婷激情小说网| 美女国产精品| 777久久精品一区二区三区无码| 精品少妇3p| 成人福利视频网| 擼擼色在线看观看免费| 日韩在线观看免费av| 五月婷婷丁香花| 91精品久久久久久久久99蜜臂| 日本在线播放视频| 亚洲激情第一区| 欧美激情视频二区| 99久久99久久精品国产片果冻| 超碰超碰在线观看| 另类亚洲自拍| 日韩精品在线观看av| 成人羞羞网站入口| 久久精品99| 亚洲成av人片在线观看www| 国产精品成人aaaaa网站| 3344国产永久在线观看视频| www.日本久久久久com.| 免费人成在线观看网站| 精品国产污污免费网站入口 | 在线视频91| 神马电影久久| 精品欧美日韩在线| 日韩精品亚洲专区在线观看| 国产精品免费福利| 国产免费不卡| 18一19gay欧美视频网站| 欧美videosex性欧美黑吊| 色老头一区二区三区在线观看| 香港三日本三级少妇66| 日韩一区和二区| 亚洲影视一区二区| 在线亚洲欧美专区二区| 日本一区二区三区精品| 亚洲成人在线网站| 精品无码m3u8在线观看| 一区二区三区加勒比av| 欧美爱爱免费视频| 国产精品国产自产拍高清av| 精品一区二区三区蜜桃在线| 久久久久久久久久电影| 国产伦精品一区二区三区妓女 | 亚洲高清乱码| 欧美久久精品一级c片| 欧美激情第六页| 欧美男男gaytwinkfreevideos| 久久久久免费网| 神马日本精品| 奇米精品在线| 国产免费av一区二区三区| 欧美日韩在线一二三| 少妇精品久久久一区二区| 日本不卡久久| 日本一本不卡| 在线一区日本视频| 亚洲欧美色图| 欧美做暖暖视频| 亚洲国产清纯| 成人在线免费在线观看| 久久婷婷影院| 免费看涩涩视频| 激情小说亚洲一区| 黑人性生活视频| 粉嫩高潮美女一区二区三区| 欧美xxxxx精品| wwwwxxxxx欧美| 国产黄色大片免费看| 国产精品国产自产拍在线| 69av.com| 欧美日韩国产色| 波多野结衣视频网址| 欧美日韩在线播| 国产草草影院ccyycom| 亚洲成avwww人| 九色蝌蚪在线| 日韩亚洲欧美中文高清在线| 丝袜在线视频| 欧美一级成年大片在线观看| 欧美大片1688网站| 亚洲精品欧美极品| 人人网欧美视频| 亚洲ai欧洲av| 国产精品v一区二区三区| 国产高清精品在线观看| 美女爽到高潮91| 日本成人在线免费| 久久免费的精品国产v∧| 日韩av毛片在线观看| 亚洲一区成人在线| 这里只有久久精品视频| 日韩欧美国产精品一区| 青青草在线视频免费观看| 精品国产视频在线| 在线观看特色大片免费视频| 成人激情视频在线播放| 开心激情综合| 国产精品久久成人免费观看| 亚洲精品美女| 国产毛片久久久久久| 久久青草国产手机看片福利盒子| 精品亚洲乱码一区二区 | ,亚洲人成毛片在线播放| 337p日本欧洲亚洲大胆精品| 搞黄视频免费在线观看| 久久久久久久久91| 老司机精品视频网| 国语精品中文字幕| 国产精品麻豆久久| 日韩欧美精品在线观看视频| 国产精品自拍一区| www久久久久久久| 亚洲不卡av一区二区三区| 亚洲天堂aaa| 亚洲免费福利视频| www555久久| 91在线看www| 欧美日韩伦理| 国产精品秘入口18禁麻豆免会员| 国产精品一区二区在线观看网站 | 一级做a爱片久久| 在线观看免费高清视频| 亚洲欧美成人网| 国产在线观看www| 亚洲最大av在线| 99欧美视频| 中文字幕国内自拍| 久久久久青草大香线综合精品| 国产一级av毛片| 欧美一激情一区二区三区| 在线看免费av| 国产精品一香蕉国产线看观看| 亚洲老女人视频免费| 青春草国产视频| 国产成人8x视频一区二区| 亚洲区一区二区三| 欧美日韩国产免费一区二区 | 要久久爱电视剧全集完整观看 | 亚洲精品久久久久久久久久久 | 国产精品久久久久久久美男| 欧美高清视频看片在线观看| 久久艹国产精品| 成人毛片老司机大片| 久久精品视频日本| 欧美成人伊人久久综合网| 羞羞网站在线看| 风间由美久久久| 在线不卡视频| 国产激情视频网站| 偷拍日韩校园综合在线| 污视频网站在线播放| 午夜精品一区二区三区在线视频 | 亚洲毛片aa| 蜜臀av国产精品久久久久| 成人小视频免费看| 欧美日本精品一区二区三区| 欧美日韩欧美| 91久久国产自产拍夜夜嗨| 欧美激情视频一区二区三区在线播放| 天天操夜夜操很很操| 一区二区三区中文字幕| a天堂在线观看视频| 欧美激情影音先锋| 美女av一区| 日本老熟妇毛茸茸| 国产精品久久影院| 99久久久国产精品无码免费| 欧美麻豆久久久久久中文| 国产精品xxx在线观看| 欧美色图另类小说| 国产欧美日本一区二区三区| 亚洲一二区视频| 欧美日韩国产va另类| 鲁大师精品99久久久| 日本在线视频www| 中文字幕一区二区三区精华液| 国产高中女学生第一次| 亚洲91精品在线观看| 极品美女一区二区三区| 欧洲在线免费视频| 精品福利一区二区| 97最新国自产拍视频在线完整在线看| 成人精品一区二区三区电影黑人| 欧美精品九九| 大又大又粗又硬又爽少妇毛片 | 色135综合网| 在线观看一区二区三区视频| 欧美性xxxx极品hd满灌| 日本三级在线播放完整版| 粉嫩av免费一区二区三区| 日韩精品视频网站| 强乱中文字幕av一区乱码| 亚洲电影免费观看高清| 日韩毛片一区| 九九热只有这里有精品| 欧美韩国日本一区| 国产 日韩 欧美 综合| 国产精品美女在线观看| 好看的av在线不卡观看| 男人舔女人下部高潮全视频| 日韩一级片网站| 欧美福利在线播放| 日韩视频在线视频| 中文字幕中文字幕在线一区 | 日韩在线黄色| www激情五月| 在线免费av一区|