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

實戰案例:如何防止超預期的高并發流量壓垮系統?實戰接口限流防護!代碼已上傳!

開發 前端 網絡管理
我們使用SpringBoot項目來搭建Http接口限流項目,SpringBoot項目本質上還是一個Maven項目。所以,小伙伴們可以直接創建一個Maven項目,我這里的項目名稱為mykit-ratelimiter-test。接下來,在pom.xml文件中添加如下依賴使項目構建為一個SpringBoot項目。

在互聯網應用中,高并發系統會面臨一個重大的挑戰,那就是大量流高并發訪問,比如:天貓的雙十一、京東618、秒殺、搶購促銷等,這些都是典型的大流量高并發場景。

HTTP接口限流實戰

這里,我們實現Web接口限流,具體方式為:使用自定義注解封裝基于令牌桶限流算法實現接口限流。

不使用注解實現接口限流

搭建項目

這里,我們使用SpringBoot項目來搭建Http接口限流項目,SpringBoot項目本質上還是一個Maven項目。所以,小伙伴們可以直接創建一個Maven項目,我這里的項目名稱為mykit-ratelimiter-test。接下來,在pom.xml文件中添加如下依賴使項目構建為一個SpringBoot項目。

<parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.7.3.RELEASE</version>
    </parent>

    <modelVersion>4.0.0</modelVersion>
    <groupId>io.mykit.limiter</groupId>
    <artifactId>mykit-ratelimiter-test</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <name>mykit-ratelimiter-test</name>

    <properties>
        <guava.version>28.2-jre</guava.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
            <exclusions>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-tomcat</artifactId>
                </exclusion>
                <exclusion>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-starter-logging</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-undertow</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-redis</artifactId>
        </dependency>
        
        <dependency>
            <groupId>org.aspectj</groupId>
            <artifactId>aspectjweaver</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

        <dependency>
            <groupId>com.google.guava</groupId>
            <artifactId>guava</artifactId>
            <version>${guava.version}</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version><!--$NO-MVN-MAN-VER$-->
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

可以看到,我在項目中除了引用了SpringBoot相關的Jar包外,還引用了guava框架,版本為28.2-jre。

創建核心類

這里,我主要是模擬一個支付接口的限流場景。首先,我們定義一個PayService接口和MessageService接口。PayService接口主要用于模擬后續的支付業務,MessageService接口模擬發送消息。接口的定義分別如下所示。

  • PayService
package io.mykit.limiter.service;
import java.math.BigDecimal;
/**
 * @author binghe
 * @version 1.0.0
 * @description 模擬支付
 */
public interface PayService {
    int pay(BigDecimal price);
}
  • MessageService
package io.mykit.limiter.service;
/**
 * @author binghe
 * @version 1.0.0
 * @description 模擬發送消息服務
 */
public interface MessageService {
    boolean sendMessage(String message);
}

接下來,創建二者的實現類,分別如下。

  • MessageServiceImpl
package io.mykit.limiter.service.impl;
import io.mykit.limiter.service.MessageService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
 * @author binghe
 * @version 1.0.0
 * @description 模擬實現發送消息
 */
@Service
publicclass MessageServiceImpl implements MessageService {
    privatefinal Logger logger = LoggerFactory.getLogger(MessageServiceImpl.class);
    @Override
    public boolean sendMessage(String message) {
        logger.info("發送消息成功===>>" + message);
        returntrue;
    }
}
  • PayServiceImpl
package io.mykit.limiter.service.impl;
import io.mykit.limiter.service.PayService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
import java.math.BigDecimal;
/**
 * @author binghe
 * @version 1.0.0
 * @description 模擬支付
 */
@Service
publicclass PayServiceImpl implements PayService {
    privatefinal Logger logger = LoggerFactory.getLogger(PayServiceImpl.class);
    @Override
    public int pay(BigDecimal price) {
        logger.info("支付成功===>>" + price);
        return1;
    }
}

由于是模擬支付和發送消息,所以,我在具體實現的方法中打印出了相關的日志,并沒有實現具體的業務邏輯。

接下來,就是創建我們的Controller類PayController,在PayController類的接口pay()方法中使用了限流,每秒鐘向桶中放入2個令牌,并且客戶端從桶中獲取令牌,如果在500毫秒內沒有獲取到令牌的話,我們可以則直接走服務降級處理。

PayController的代碼如下所示。

package io.mykit.limiter.controller;
import com.google.common.util.concurrent.RateLimiter;
import io.mykit.limiter.service.MessageService;
import io.mykit.limiter.service.PayService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.math.BigDecimal;
import java.util.concurrent.TimeUnit;

/**
 * @author binghe
 * @version 1.0.0
 * @description 測試接口限流
 */
@RestController
publicclass PayController {
    privatefinal Logger logger = LoggerFactory.getLogger(PayController.class);
    /**
     * RateLimiter的create()方法中傳入一個參數,表示以固定的速率2r/s,即以每秒2個令牌的速率向桶中放入令牌
     */
    private RateLimiter rateLimiter = RateLimiter.create(2);

    @Autowired
    private MessageService messageService;
    @Autowired
    private PayService payService;
    @RequestMapping("/boot/pay")
    public String pay(){
        //記錄返回接口
        String result = "";
        //限流處理,客戶端請求從桶中獲取令牌,如果在500毫秒沒有獲取到令牌,則直接走服務降級處理
        boolean tryAcquire = rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS);
        if (!tryAcquire){
            result = "請求過多,降級處理";
            logger.info(result);
            return result;
        }
        int ret = payService.pay(BigDecimal.valueOf(100.0));
        if(ret > 0){
            result = "支付成功";
            return result;
        }
        result = "支付失敗,再試一次吧...";
        return result;
    }
}

最后,我們來創建mykit-ratelimiter-test項目的核心啟動類,如下所示。

package io.mykit.limiter;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

/**
 * @author binghe
 * @version 1.0.0
 * @description 項目啟動類
 */
@SpringBootApplication
public class MykitLimiterApplication {

    public static void main(String[] args){
        SpringApplication.run(MykitLimiterApplication.class, args);
    }
}

至此,我們不使用注解方式實現限流的Web應用就基本完成了。

運行項目

項目創建完成后,我們來運行項目,運行SpringBoot項目比較簡單,直接運行MykitLimiterApplication類的main()方法即可。

項目運行成功后,我們在瀏覽器地址欄輸入鏈接:http://localhost:8080/boot/pay。頁面會輸出“支付成功”的字樣,說明項目搭建成功了。如下所示。

此時,我只訪問了一次,并沒有觸發限流。接下來,我們不停的刷瀏覽器,此時,瀏覽器會輸出“支付失敗,再試一次吧...”的字樣,如下所示。

在PayController類中還有一個sendMessage()方法,模擬的是發送消息的接口,同樣使用了限流操作,具體代碼如下所示。

@RequestMapping("/boot/send/message")
public String sendMessage(){
    //記錄返回接口
    String result = "";
    //限流處理,客戶端請求從桶中獲取令牌,如果在500毫秒沒有獲取到令牌,則直接走服務降級處理
    boolean tryAcquire = rateLimiter.tryAcquire(500, TimeUnit.MILLISECONDS);
    if (!tryAcquire){
        result = "請求過多,降級處理";
        logger.info(result);
        return result;
    }
    boolean flag = messageService.sendMessage("恭喜您成長值+1");
    if (flag){
        result = "消息發送成功";
        return result;
    }
    result = "消息發送失敗,再試一次吧...";
    return result;
}

sendMessage()方法的代碼邏輯和運行效果與pay()方法相同,我就不再瀏覽器訪問 http://localhost:8080/boot/send/message 地址的訪問效果了,小伙伴們可以自行驗證。

不使用注解實現限流缺點

通過對項目的編寫,我們可以發現,當在項目中對接口進行限流時,不使用注解進行開發,會導致代碼出現大量冗余,每個方法中幾乎都要寫一段相同的限流邏輯,代碼十分冗余。

如何解決代碼冗余的問題呢?我們可以使用自定義注解進行實現。

使用注解實現接口限流

使用自定義注解,我們可以將一些通用的業務邏輯封裝到注解的切面中,在需要添加注解業務邏輯的方法上加上相應的注解即可。針對我們這個限流的實例來說,可以基于自定義注解實現。

實現自定義注解

實現,我們來創建一個自定義注解,如下所示。

package io.mykit.limiter.annotation;
import java.lang.annotation.*;
/**
 * @author binghe
 * @version 1.0.0
 * @description 實現限流的自定義注解
 */
@Target(value = ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Documented
public @interface MyRateLimiter {
    //向令牌桶放入令牌的速率
    double rate();
    //從令牌桶獲取令牌的超時時間
    long timeout() default 0;
}

自定義注解切面實現

接下來,我們還要實現一個切面類MyRateLimiterAspect,如下所示。

package io.mykit.limiter.aspect;

import com.google.common.util.concurrent.RateLimiter;
import io.mykit.limiter.annotation.MyRateLimiter;
import org.aspectj.lang.ProceedingJoinPoint;
import org.aspectj.lang.annotation.Around;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Pointcut;
import org.aspectj.lang.reflect.MethodSignature;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.concurrent.TimeUnit;

/**
 * @author binghe
 * @version 1.0.0
 * @description 一般限流切面類
 */
@Aspect
@Component
publicclass MyRateLimiterAspect {

    private RateLimiter rateLimiter = RateLimiter.create(2);

    @Pointcut("execution(public * io.mykit.limiter.controller.*.*(..))")
    public void pointcut(){

    }

    /**
     * 核心切面方法
     */
    @Around("pointcut()")
    public Object process(ProceedingJoinPoint proceedingJoinPoint) throws Throwable{
        MethodSignature signature = (MethodSignature) proceedingJoinPoint.getSignature();

        //使用反射獲取方法上是否存在@MyRateLimiter注解
        MyRateLimiter myRateLimiter = signature.getMethod().getDeclaredAnnotation(MyRateLimiter.class);
        if(myRateLimiter == null){
            //程序正常執行,執行目標方法
            return proceedingJoinPoint.proceed();
        }
        //獲取注解上的參數
        //獲取配置的速率
        double rate = myRateLimiter.rate();
        //獲取客戶端等待令牌的時間
        long timeout = myRateLimiter.timeout();

        //設置限流速率
        rateLimiter.setRate(rate);

        //判斷客戶端獲取令牌是否超時
        boolean tryAcquire = rateLimiter.tryAcquire(timeout, TimeUnit.MILLISECONDS);
        if(!tryAcquire){
            //服務降級
            fullback();
            returnnull;
        }
        //獲取到令牌,直接執行
        return proceedingJoinPoint.proceed();

    }

    /**
     * 降級處理
     */
    private void fullback() {
        response.setHeader("Content-type", "text/html;charset=UTF-8");
        PrintWriter writer = null;
        try {
            writer =  response.getWriter();
            writer.println("出錯了,重試一次試試?");
            writer.flush();;
        } catch (IOException e) {
            e.printStackTrace();
        }finally {
            if(writer != null){
                writer.close();
            }
        }
    }
}

接下來,我們改造下PayController類中的sendMessage()方法,修改后的方法片段代碼如下所示。

@MyRateLimiter(rate = 1.0, timeout = 500)
@RequestMapping("/boot/send/message")
public String sendMessage(){
    //記錄返回接口
    String result = "";
    boolean flag = messageService.sendMessage("恭喜您成長值+1");
    if (flag){
        result = "消息發送成功";
        return result;
    }
    result = "消息發送失敗,再試一次吧...";
    return result;
}

運行部署項目

部署項目比較簡單,只需要運行MykitLimiterApplication類下的main()方法即可。這里,為了簡單,我們還是從瀏覽器中直接輸入鏈接地址來進行訪問。

效果如下所示。

接下來,我們不斷的刷新瀏覽器。會出現“消息發送失敗,再試一次吧..”的字樣,說明已經觸發限流操作。

基于限流算法實現限流的缺點

上面介紹的限流方式都只能用于單機部署的環境中,如果將應用部署到多臺服務器進行分布式、集群,則上面限流的方式就不適用了,此時,我們需要使用分布式限流。至于在分布式場景下,如何實現限流操作,我們就在下一篇中進行介紹。

責任編輯:武曉燕 來源: 冰河技術
相關推薦

2025-11-03 04:15:00

2025-02-07 14:42:59

2019-11-12 09:32:35

高并發流量協議

2022-08-04 20:41:42

高并發流量SQL

2019-12-03 10:46:07

PHP高并發架構

2025-04-02 07:42:49

2019-12-13 08:52:48

高并發系統限流

2022-04-18 10:54:49

券系統緩存 RedisMySQL

2024-03-04 00:02:00

Redis存儲令牌

2023-05-15 08:12:38

2025-05-30 02:00:00

Spring接口限流

2021-07-23 14:58:28

Nginx限流方案

2025-07-14 00:00:00

2016-11-28 08:58:43

系統限流

2016-11-28 08:58:43

系統限流算法

2009-11-16 10:49:43

PHP上傳文件代碼

2025-09-04 09:03:08

2025-03-10 06:00:00

2024-11-27 00:20:32

點贊
收藏

51CTO技術棧公眾號

黄色小视频在线免费看| 日韩av在线电影观看| 国产性70yerg老太| **爰片久久毛片| 亚洲成人激情自拍| 久久久久久国产精品一区| 国产农村妇女aaaaa视频| 久久av免费看| 欧美性视频一区二区三区| 欧美性xxxx69| 国产免费黄色网址| 亚洲国产高清一区二区三区| 精品视频偷偷看在线观看| 成人中文字幕av| 欧美边添边摸边做边爱免费| 国产91在线|亚洲| 国产91在线播放九色快色| 国产大屁股喷水视频在线观看| 麻豆久久一区| 一本久久a久久精品亚洲 | 日韩福利视频一区| 欧美色区777第一页| 日韩激情视频一区二区| 国产三级在线免费观看| 国产精品自拍网站| 欧美在线播放视频| 免费在线观看黄色小视频| 精品一区二区男人吃奶| 欧美日韩国产成人在线免费| 国产一二三在线视频| 亚洲欧美视频一区二区| 91在线精品秘密一区二区| 国产精品美女久久| 日本一区二区不卡在线| 天天做综合网| 亚洲色图日韩av| 中国黄色片视频| 手机在线观看av| 亚洲精品视频在线看| 色噜噜一区二区| 人妻偷人精品一区二区三区| 精品一区在线看| 国产成人精品久久二区二区| 久艹视频在线观看| 久久一区二区中文字幕| 亚洲欧美www| 色综合久久久无码中文字幕波多| 日本h片久久| 天天射综合影视| 青青草视频国产| 麻豆免费在线观看| 99精品视频在线免费观看| 亚洲综合精品伊人久久| 亚洲自拍偷拍另类| 狂野欧美一区| 久久久在线视频| 欧美第一页在线观看| 第九色区aⅴ天堂久久香| 精品亚洲一区二区三区在线观看| 深爱五月综合网| 日韩黄色三级在线观看| 欧美视频精品在线观看| 男人舔女人下面高潮视频| av色在线观看| 亚洲一区二区3| 国产激情片在线观看| 黄色在线论坛| 国产精品久久久久久户外露出| 日韩片电影在线免费观看| 天天操天天干天天插| 成人精品小蝌蚪| 国产精品免费在线播放| 日韩一区免费视频| 成人看片黄a免费看在线| 99在线国产| www.蜜臀av.com| 国产一区二区成人久久免费影院| 国产成人免费av电影| 国产情侣免费视频| 免费久久精品视频| 国产热re99久久6国产精品| 国产精品久久久久久久免费看| 奇米影视一区二区三区| 91久久在线观看| 国产黄色一区二区| 岛国一区二区三区| 国产在线精品日韩| 九色国产在线观看| 国产精品人妖ts系列视频 | 国产精品久久久乱弄| 久久躁狠狠躁夜夜爽| 九九热只有精品| 99国产精品自拍| 日韩女优人人人人射在线视频| 国产亚洲久一区二区| 国产自产v一区二区三区c| 99久热re在线精品996热视频| 国产91久久久| 久久一留热品黄| 日韩一区不卡| 在线中文字幕电影| 一区二区三区蜜桃网| 无罩大乳的熟妇正在播放| 三级成人在线| 日韩欧美一二区| 免费观看一区二区三区| 老牛国内精品亚洲成av人片| 国产一区二区三区直播精品电影| 91久久久久久久久久久久久久| 国产一区二区三区四区三区四| 欧美一级电影久久| 一级全黄裸体免费视频| 成人网在线播放| 色播五月综合| 国产盗摄一区二区| 欧美影院一区二区三区| 777一区二区| 国产伦精品一区二区三区在线播放 | 国产av熟女一区二区三区| 成人美女大片| 91精品久久久久久久91蜜桃| 亚洲av成人精品一区二区三区| 欧美一区二区麻豆红桃视频| 欧美精品videos| 一级黄色免费网站| 国产乱码精品一区二区三区忘忧草| 久久99精品国产一区二区三区| 欧美jizz18性欧美| 欧美日韩激情视频| 妖精视频在线观看| 欧美精品一二| 蜜臀久久99精品久久久无需会员| 麻豆精品久久久久久久99蜜桃| 国产美女精品人人做人人爽| 欧美日韩一区二区视频在线观看| 深夜国产在线播放| 欧美日韩国产精选| 少妇精品一区二区三区| 国产精品hd| 国产综合久久久久久| 男人的天堂在线免费视频| 夜夜精品视频一区二区 | 欧美精品欧美精品系列| 少妇真人直播免费视频| 激情另类综合| 97视频热人人精品| 老司机精品影院| 欧美在线观看视频一区二区三区| 曰本三级日本三级日本三级| 久久在线播放| 国产欧美一区二区三区在线| 国产黄色免费在线观看| 欧美性猛交xxxx乱大交| 国产精品入口麻豆| 国产精品www994| 日韩av免费在线看| 深夜福利视频一区| 天天色综合成人网| 91精产国品一二三| 中文无码久久精品| 亚洲一区二区三区777| 日本中文在线观看| 欧美精品1区2区| 青青青视频在线播放| 免费av网站大全久久| 亚洲va久久久噜噜噜久久狠狠| 精品国产免费人成网站| 亚洲第一综合天堂另类专| 精品少妇theporn| 国产91精品免费| 久久手机在线视频| 999久久久久久久久6666| 欧美激情精品久久久久久大尺度| 一区二区三区精| 国产精品久久久久久久蜜臀| 国产色视频在线播放| 久久五月天小说| 91在线免费网站| av免费在线免费| 精品三级在线看| 日本熟妇一区二区| 91在线视频免费观看| 给我免费播放片在线观看| 老司机凹凸av亚洲导航| 日本久久久久久久| h网站视频在线观看| 51精品视频一区二区三区| 91视频免费看片| 国精品**一区二区三区在线蜜桃| 激情五月五月婷婷| 动漫视频在线一区| 欧美怡红院视频一区二区三区 | 亚洲高清一区二| 黑人一级大毛片| 欧美激情一区二区三区| 日韩欧美亚洲另类| 国内精品美女在线观看| 99在线观看| 日韩免费福利视频| 超碰91人人草人人干| 天堂网在线资源| 欧美最猛性xxxxx直播| 国产又粗又长免费视频| 国产99久久久精品| 国产欧美日韩小视频| 亚洲人成网www| 91免费版网站入口| 欧美aa在线| 久久精品视频导航| 四虎在线视频免费观看| 欧美性猛交一区二区三区精品| 青草草在线视频| 久久久久久久久久久久久久久99| 亚洲精品第三页| 午夜一区在线| 日韩精品一区二区三区电影| 妖精一区二区三区精品视频| 51精品国产人成在线观看| 成人啊v在线| 欧美亚洲视频在线观看| 激情av在线| 久久国产精彩视频| 天堂地址在线www| 亚洲午夜激情免费视频 | 亚洲人精选亚洲人成在线| 日本高清视频网站| 精品国产三级a在线观看| 国产欧美久久久精品免费| 欧美三级乱人伦电影| 国产熟妇一区二区三区四区| 亚洲电影第三页| 色在线观看视频| 亚洲视频1区2区| 国产成人免费在线观看视频| 国产精品私人自拍| 欧美性受xxxx黑人| 中文字幕欧美国产| 99久久99久久精品免费| 亚洲国产高清不卡| 国产精品69久久久久孕妇欧美| 国产片一区二区| 亚洲色成人网站www永久四虎| 久久免费午夜影院| 黄色aaa视频| 国产欧美一区二区在线| 久久久久久国产免费a片| 国产目拍亚洲精品99久久精品| 真实乱视频国产免费观看| 久久众筹精品私拍模特| 日韩一区二区a片免费观看| 国产欧美一区二区精品忘忧草| 国产黄色大片免费看| 中文字幕欧美激情| 91免费公开视频| 亚洲精品高清在线观看| 国产一级二级毛片| 午夜精品一区二区三区免费视频 | 欧美精品免费视频| 日韩久久中文字幕| 91成人免费在线| 中文字幕有码无码人妻av蜜桃| 欧美性受xxxx黑人xyx性爽| 91影院在线播放| 精品剧情在线观看| 天堂av在线免费| 亚洲欧美另类中文字幕| p色视频免费在线观看| 精品久久久91| 免费毛片在线看片免费丝瓜视频| 91精品国产乱码久久久久久蜜臀| 色8久久影院午夜场| 国产日韩欧美成人| 亚洲视频一起| 欧洲视频一区二区三区| 93在线视频精品免费观看| 一二三四中文字幕| 蘑菇福利视频一区播放| 视频二区在线播放| 岛国精品在线播放| 男人舔女人下部高潮全视频| 亚洲色图欧洲色图婷婷| 免费日韩一级片| 欧美日韩成人在线一区| 国产 日韩 欧美 综合| 国产一区二区三区在线观看视频 | 黄色在线论坛| 51色欧美片视频在线观看| 久久久国产精品网站| 成人av蜜桃| 日韩精品不卡一区二区| 欧美这里只有精品| 免费成人在线观看视频| 91精品啪在线观看国产| 国产精品久久毛片a| 日韩免费一级片| 91.com视频| 国产最新视频在线观看| 久久久久久综合网天天| 日日夜夜一区| 欧美精品一区二区视频| 欧美特黄一区| 亚洲精品20p| 久久久精品免费网站| 欧美黄片一区二区三区| 欧美日韩一区二区三区在线| 日本精品久久久久| 久久精品人人爽| 综合在线影院| 久久av一区二区| 欧美在线三级| 性生活免费在线观看| 91日韩精品一区| 欧美精品一区二区蜜桃| 欧美日韩国产大片| 国产69久久| 欧美中文字幕在线观看| 国产厕拍一区| 菠萝蜜视频在线观看入口| 捆绑变态av一区二区三区| 亚洲av无码一区二区三区人| 亚洲精品国产视频| 国产麻豆免费视频| 国产亚洲一区二区精品| 欧美亚洲韩国| 欧美亚洲爱爱另类综合| 夜夜嗨一区二区| 高清中文字幕mv的电影| 伊人开心综合网| 国产伦精品一区二区三区免.费| 自拍偷拍亚洲欧美| 日韩美女在线看免费观看| 免费国产一区二区| 国产精品夜夜夜| 黄色av网址在线观看| 五月婷婷综合在线| 人妻夜夜爽天天爽| 午夜精品福利视频| 国产一区丝袜| 精品无码一区二区三区在线| 成人国产精品免费观看视频| 久久精品视频国产| 精品久久久网站| 51av在线| 久久久久久久久久码影片| 亚洲欧美网站| 亚洲一区二区自偷自拍 | 日本人妖在线| 欧美在线视频一区| 国产一区三区在线播放| 性欧美极品xxxx欧美一区二区| 国产亚洲一区二区三区| 中日韩在线观看视频| 日韩亚洲成人av在线| 在线观看亚洲精品福利片| 中文字幕色呦呦| 国产白丝精品91爽爽久久| 日韩av黄色片| 亚洲日本aⅴ片在线观看香蕉| 国产美女久久| 成人午夜免费剧场| 成人av在线看| 中文字幕xxxx| 久久精品在线视频| 草草视频在线一区二区| 女性女同性aⅴ免费观女性恋| 久久这里只精品最新地址| 最近中文字幕免费观看| 久久精品亚洲94久久精品| 亚洲精品不卡在线观看| 少妇人妻无码专区视频| 久久精品在线观看| 91成年人视频| 97精品久久久| 成人精品视频| 美女流白浆视频| 一本大道av一区二区在线播放 | 7777免费精品视频| 成人精品影视| 亚洲啪av永久无码精品放毛片| 色综合久久久久网| 久久77777| 精品在线视频一区二区| 蜜桃久久精品一区二区| 免费视频一二三区| 亚洲一区二区国产| 69精品国产久热在线观看| 亚洲乱码国产一区三区| 亚洲精品视频在线观看网站| 欧洲亚洲精品视频| 91蜜桃网站免费观看| 久久精品人人做人人爽电影蜜月| 日本爱爱小视频| 亚洲精品少妇网址| 国产一区二区高清在线| 老司机午夜av| 亚洲成a天堂v人片| 免费黄色在线看| 欧美日韩免费精品| 丁香一区二区三区| 国产永久免费视频|