久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術(shù)文章
文章詳情頁

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

瀏覽:4日期:2023-05-13 10:39:18

一、什么是限流?為什么要限流?

不知道大家有沒有做過帝都的地鐵,就是進(jìn)地鐵站都要排隊(duì)的那種,為什么要這樣擺長龍轉(zhuǎn)圈圈?答案就是為了限流!因?yàn)橐惶说罔F的運(yùn)力是有限的,一下擠進(jìn)去太多人會(huì)造成站臺(tái)的擁擠、列車的超載,存在一定的安全隱患。同理,我們的程序也是一樣,它處理請求的能力也是有限的,一旦請求多到超出它的處理極限就會(huì)崩潰。為了不出現(xiàn)最壞的崩潰情況,只能耽誤一下大家進(jìn)站的時(shí)間。

限流是保證系統(tǒng)高可用的重要手段!!!

由于互聯(lián)網(wǎng)公司的流量巨大,系統(tǒng)上線會(huì)做一個(gè)流量峰值的評(píng)估,尤其是像各種秒殺促銷活動(dòng),為了保證系統(tǒng)不被巨大的流量壓垮,會(huì)在系統(tǒng)流量到達(dá)一定閾值時(shí),拒絕掉一部分流量。

限流會(huì)導(dǎo)致用戶在短時(shí)間內(nèi)(這個(gè)時(shí)間段是毫秒級(jí)的)系統(tǒng)不可用,一般我們衡量系統(tǒng)處理能力的指標(biāo)是每秒的QPS或者TPS,假設(shè)系統(tǒng)每秒的流量閾值是1000,理論上一秒內(nèi)有第1001個(gè)請求進(jìn)來時(shí),那么這個(gè)請求就會(huì)被限流。

二、限流方案

1、計(jì)數(shù)器

Java內(nèi)部也可以通過原子類計(jì)數(shù)器AtomicInteger、Semaphore信號(hào)量來做簡單的限流。

// 限流的個(gè)數(shù) private int maxCount = 10; // 指定的時(shí)間內(nèi) private long interval = 60; // 原子類計(jì)數(shù)器 private AtomicInteger atomicInteger = new AtomicInteger(0); // 起始時(shí)間 private long startTime = System.currentTimeMillis(); public boolean limit(int maxCount, int interval) { atomicInteger.addAndGet(1); if (atomicInteger.get() == 1) { startTime = System.currentTimeMillis(); atomicInteger.addAndGet(1); return true; } // 超過了間隔時(shí)間,直接重新開始計(jì)數(shù) if (System.currentTimeMillis() - startTime > interval * 1000) { startTime = System.currentTimeMillis(); atomicInteger.set(1); return true; } // 還在間隔時(shí)間內(nèi),check有沒有超過限流的個(gè)數(shù) if (atomicInteger.get() > maxCount) { return false; } return true; }

2、漏桶算法

漏桶算法思路很簡單,我們把水比作是請求,漏桶比作是系統(tǒng)處理能力極限,水先進(jìn)入到漏桶里,漏桶里的水按一定速率流出,當(dāng)流出的速率小于流入的速率時(shí),由于漏桶容量有限,后續(xù)進(jìn)入的水直接溢出(拒絕請求),以此實(shí)現(xiàn)限流。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

3、令牌桶算法

令牌桶算法的原理也比較簡單,我們可以理解成醫(yī)院的掛號(hào)看病,只有拿到號(hào)以后才可以進(jìn)行診病。

系統(tǒng)會(huì)維護(hù)一個(gè)令牌(token)桶,以一個(gè)恒定的速度往桶里放入令牌(token),這時(shí)如果有請求進(jìn)來想要被處理,則需要先從桶里獲取一個(gè)令牌(token),當(dāng)桶里沒有令牌(token)可取時(shí),則該請求將被拒絕服務(wù)。令牌桶算法通過控制桶的容量、發(fā)放令牌的速率,來達(dá)到對請求的限制。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

4、Redis + Lua

很多同學(xué)不知道Lua是啥?個(gè)人理解,Lua腳本和 MySQL數(shù)據(jù)庫的存儲(chǔ)過程比較相似,他們執(zhí)行一組命令,所有命令的執(zhí)行要么全部成功或者失敗,以此達(dá)到原子性。也可以把Lua腳本理解為,一段具有業(yè)務(wù)邏輯的代碼塊。

而Lua本身就是一種編程語言,雖然redis 官方?jīng)]有直接提供限流相應(yīng)的API,但卻支持了 Lua 腳本的功能,可以使用它實(shí)現(xiàn)復(fù)雜的令牌桶或漏桶算法,也是分布式系統(tǒng)中實(shí)現(xiàn)限流的主要方式之一。

相比Redis事務(wù),Lua腳本的優(yōu)點(diǎn):

減少網(wǎng)絡(luò)開銷: 使用Lua腳本,無需向Redis 發(fā)送多次請求,執(zhí)行一次即可,減少網(wǎng)絡(luò)傳輸 原子操作:Redis 將整個(gè)Lua腳本作為一個(gè)命令執(zhí)行,原子,無需擔(dān)心并發(fā) 復(fù)用:Lua腳本一旦執(zhí)行,會(huì)永久保存 Redis 中,,其他客戶端可復(fù)用

Lua腳本大致邏輯如下:

-- 獲取調(diào)用腳本時(shí)傳入的第一個(gè)key值(用作限流的 key)local key = KEYS[1]-- 獲取調(diào)用腳本時(shí)傳入的第一個(gè)參數(shù)值(限流大小)local limit = tonumber(ARGV[1])-- 獲取當(dāng)前流量大小local curentLimit = tonumber(redis.call(’get’, key) or '0')-- 是否超出限流if curentLimit + 1 > limit then -- 返回(拒絕) return 0else -- 沒有超出 value + 1 redis.call('INCRBY', key, 1) -- 設(shè)置過期時(shí)間 redis.call('EXPIRE', key, 2) -- 返回(放行) return 1end 通過KEYS[1] 獲取傳入的key參數(shù) 通過ARGV[1]獲取傳入的limit參數(shù) redis.call方法,從緩存中g(shù)et和key相關(guān)的值,如果為null那么就返回0 接著判斷緩存中記錄的數(shù)值是否會(huì)大于限制大小,如果超出表示該被限流,返回0 如果未超過,那么該key的緩存值+1,并設(shè)置過期時(shí)間為1秒鐘以后,并返回緩存值+1

這種方式是本文推薦的方案,具體實(shí)現(xiàn)會(huì)在后邊做細(xì)說。

5、網(wǎng)關(guān)層限流

限流常在網(wǎng)關(guān)這一層做,比如Nginx、Openresty、kong、zuul、Spring Cloud Gateway等,而像spring cloud - gateway網(wǎng)關(guān)限流底層實(shí)現(xiàn)原理,就是基于Redis + Lua,通過內(nèi)置Lua限流腳本的方式。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

三、Redis + Lua 限流實(shí)現(xiàn)

下面我們通過自定義注解、aop、Redis + Lua 實(shí)現(xiàn)限流,步驟會(huì)比較詳細(xì),為了小白能讓快速上手這里??亂壞悖?芯?櫚睦夏衩嵌嗟4?幌隆?/p>

1、環(huán)境準(zhǔn)備

springboot 項(xiàng)目創(chuàng)建地址:https://start.spring.io,很方便實(shí)用的一個(gè)工具。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

2、引入依賴包

pom文件中添加如下依賴包,比較關(guān)鍵的就是 spring-boot-starter-data-redis 和 spring-boot-starter-aop。

<dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-redis</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>21.0</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> </dependency> <dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-lang3</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> <exclusions><exclusion> <groupId>org.junit.vintage</groupId> <artifactId>junit-vintage-engine</artifactId></exclusion> </exclusions> </dependency> </dependencies>

3、配置application.properties

在 application.properties 文件中配置提前搭建好的 redis 服務(wù)地址和端口。

spring.redis.host=127.0.0.1spring.redis.port=6379

4、配置RedisTemplate實(shí)例

@Configurationpublic class RedisLimiterHelper { @Bean public RedisTemplate<String, Serializable> limitRedisTemplate(LettuceConnectionFactory redisConnectionFactory) { RedisTemplate<String, Serializable> template = new RedisTemplate<>(); template.setKeySerializer(new StringRedisSerializer()); template.setValueSerializer(new GenericJackson2JsonRedisSerializer()); template.setConnectionFactory(redisConnectionFactory); return template; }}

限流類型枚舉類

/** * @author fu * @description 限流類型 * @date 2020/4/8 13:47 */public enum LimitType { /** * 自定義key */ CUSTOMER, /** * 請求者IP */ IP;}

5、自定義注解

我們自定義個(gè)@Limit注解,注解類型為ElementType.METHOD即作用于方法上。

period表示請求限制時(shí)間段,count表示在period這個(gè)時(shí)間段內(nèi)允許放行請求的次數(shù)。limitType代表限流的類型,可以根據(jù)請求的IP、自定義key,如果不傳limitType屬性則默認(rèn)用方法名作為默認(rèn)key。

/** * @author fu * @description 自定義限流注解 * @date 2020/4/8 13:15 */@Target({ElementType.METHOD, ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Inherited@Documentedpublic @interface Limit { /** * 名字 */ String name() default ''; /** * key */ String key() default ''; /** * Key的前綴 */ String prefix() default ''; /** * 給定的時(shí)間范圍 單位(秒) */ int period(); /** * 一定時(shí)間內(nèi)最多訪問次數(shù) */ int count(); /** * 限流的類型(用戶自定義key 或者 請求ip) */ LimitType limitType() default LimitType.CUSTOMER;}

6、切面代碼實(shí)現(xiàn)

/** * @author fu * @description 限流切面實(shí)現(xiàn) * @date 2020/4/8 13:04 */@Aspect@Configurationpublic class LimitInterceptor { private static final Logger logger = LoggerFactory.getLogger(LimitInterceptor.class); private static final String UNKNOWN = 'unknown'; private final RedisTemplate<String, Serializable> limitRedisTemplate; @Autowired public LimitInterceptor(RedisTemplate<String, Serializable> limitRedisTemplate) { this.limitRedisTemplate = limitRedisTemplate; } /** * @param pjp * @author fu * @description 切面 * @date 2020/4/8 13:04 */ @Around('execution(public * *(..)) && @annotation(com.xiaofu.limit.api.Limit)') public Object interceptor(ProceedingJoinPoint pjp) { MethodSignature signature = (MethodSignature) pjp.getSignature(); Method method = signature.getMethod(); Limit limitAnnotation = method.getAnnotation(Limit.class); LimitType limitType = limitAnnotation.limitType(); String name = limitAnnotation.name(); String key; int limitPeriod = limitAnnotation.period(); int limitCount = limitAnnotation.count(); /** * 根據(jù)限流類型獲取不同的key ,如果不傳我們會(huì)以方法名作為key */ switch (limitType) { case IP:key = getIpAddress();break; case CUSTOMER:key = limitAnnotation.key();break; default:key = StringUtils.upperCase(method.getName()); } ImmutableList<String> keys = ImmutableList.of(StringUtils.join(limitAnnotation.prefix(), key)); try { String luaScript = buildLuaScript(); RedisScript<Number> redisScript = new DefaultRedisScript<>(luaScript, Number.class); Number count = limitRedisTemplate.execute(redisScript, keys, limitCount, limitPeriod); logger.info('Access try count is {} for name={} and key = {}', count, name, key); if (count != null && count.intValue() <= limitCount) {return pjp.proceed(); } else {throw new RuntimeException('You have been dragged into the blacklist'); } } catch (Throwable e) { if (e instanceof RuntimeException) {throw new RuntimeException(e.getLocalizedMessage()); } throw new RuntimeException('server exception'); } } /** * @author fu * @description 編寫 redis Lua 限流腳本 * @date 2020/4/8 13:24 */ public String buildLuaScript() { StringBuilder lua = new StringBuilder(); lua.append('local c'); lua.append('nc = redis.call(’get’,KEYS[1])'); // 調(diào)用不超過最大值,則直接返回 lua.append('nif c and tonumber(c) > tonumber(ARGV[1]) then'); lua.append('nreturn c;'); lua.append('nend'); // 執(zhí)行計(jì)算器自加 lua.append('nc = redis.call(’incr’,KEYS[1])'); lua.append('nif tonumber(c) == 1 then'); // 從第一次調(diào)用開始限流,設(shè)置對應(yīng)鍵值的過期 lua.append('nredis.call(’expire’,KEYS[1],ARGV[2])'); lua.append('nend'); lua.append('nreturn c;'); return lua.toString(); } /** * @author fu * @description 獲取id地址 * @date 2020/4/8 13:24 */ public String getIpAddress() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String ip = request.getHeader('x-forwarded-for'); if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader('Proxy-Client-IP'); } if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getHeader('WL-Proxy-Client-IP'); } if (ip == null || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { ip = request.getRemoteAddr(); } return ip; }}

7、控制層實(shí)現(xiàn)

我們將@Limit注解作用在需要進(jìn)行限流的接口方法上,下邊我們給方法設(shè)置@Limit注解,在10秒內(nèi)只允許放行3個(gè)請求,這里為直觀一點(diǎn)用AtomicInteger計(jì)數(shù)。

/** * @Author: fu * @Description: */@RestControllerpublic class LimiterController { private static final AtomicInteger ATOMIC_INTEGER_1 = new AtomicInteger(); private static final AtomicInteger ATOMIC_INTEGER_2 = new AtomicInteger(); private static final AtomicInteger ATOMIC_INTEGER_3 = new AtomicInteger(); /** * @author fu * @description * @date 2020/4/8 13:42 */ @Limit(key = 'limitTest', period = 10, count = 3) @GetMapping('/limitTest1') public int testLimiter1() { return ATOMIC_INTEGER_1.incrementAndGet(); } /** * @author fu * @description * @date 2020/4/8 13:42 */ @Limit(key = 'customer_limit_test', period = 10, count = 3, limitType = LimitType.CUSTOMER) @GetMapping('/limitTest2') public int testLimiter2() { return ATOMIC_INTEGER_2.incrementAndGet(); } /** * @author fu * @description * @date 2020/4/8 13:42 */ @Limit(key = 'ip_limit_test', period = 10, count = 3, limitType = LimitType.IP) @GetMapping('/limitTest3') public int testLimiter3() { return ATOMIC_INTEGER_3.incrementAndGet(); }}

8、測試

測試預(yù)期:連續(xù)請求3次均可以成功,第4次請求被拒絕。接下來看一下是不是我們預(yù)期的效果,請求地址:http://127.0.0.1:8080/limitTest1,用postman進(jìn)行測試,有沒有postman url直接貼瀏覽器也是一樣。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

可以看到第四次請求時(shí),應(yīng)用直接拒絕了請求,說明我們的 Springboot + aop + lua 限流方案搭建成功。

詳解springboot+aop+Lua分布式限流的最佳實(shí)踐

總結(jié)

以上 springboot + aop + Lua 限流實(shí)現(xiàn)是比較簡單的,旨在讓大家認(rèn)識(shí)下什么是限流?如何做一個(gè)簡單的限流功能,面試要知道這是個(gè)什么東西。上面雖然說了幾種實(shí)現(xiàn)限流的方案,但選哪種還要結(jié)合具體的業(yè)務(wù)場景,不能為了用而用。

到此這篇關(guān)于詳解springboot+aop+Lua分布式限流的最佳實(shí)踐的文章就介紹到這了,更多相關(guān)springboot+aop+Lua分布式限流內(nèi)容請搜索好吧啦網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持好吧啦網(wǎng)!

標(biāo)簽: Spring
相關(guān)文章:
主站蜘蛛池模板: 久久久久久综合 | 精品视频在线免费 | 中文字幕一区二区在线观看 | 欧美精品区 | 国产精品久久久久影院色老大 | 97伦理网 | 国产精久久久久 | 色婷婷av久久久久久久 | 日本最新免费二区 | 国产精品免费一区二区三区四区 | 亚洲精品日韩在线 | 日韩在线中文字幕视频 | 作爱视频免费看 | 日韩亚洲 | 99精品全国免费观看视频软件 | www.中文字幕.com| 手机久久看片 | 人妖一区| 成人在线不卡 | 国产精品嫩草55av | 亚洲午夜在线 | 成人羞羞网站 | 亚洲精品粉嫩美女一区 | 免费在线国产 | 91在线观看网站 | 精品国产欧美一区二区 | 亚洲一区二区三区高清 | 亚洲国产二区 | 欧美一级免费播放 | 欧美成人一区二区 | 亚洲精品久久久久久久久久久久久 | 亚洲一区二区三区免费 | 看片地址 | 91成人黄色 | 欧美性18 | 一区二区三区国产视频 | av综合在线观看 | 国产99久久精品一区二区永久免费 | 国产精品视频一区二区三区 | h视频在线免费观看 | 国产高清不卡 | 超碰免费观看 | 国产欧美日韩综合精品一区二区 | 亚洲精品午夜视频 | 日韩欧美在线不卡 | 国产一区二区精品 | 99国产精品久久久久久久 | 日本亚洲最大的色成网站www | 久久久综合网 | 久草视频在线播放 | www.久久久.com | 欧美成人精品一区二区三区 | 日日干夜夜骑 | 69性欧美高清影院 | 久久国产区 | 国产一级免费在线 | 国产精品1区2区 | 成人免费共享视频 | 中文字幕在线观看免费 | 精品国产一区av | 久草一区| 亚洲综合二区 | 精品伊人 | 欧美专区在线观看 | 亚洲精品网址 | 中文字幕成人网 | 久久精品色欧美aⅴ一区二区 | 国产成人免费视频网站视频社区 | 久久九九 | 黄色毛片视频网站 | 亚洲成人一区二区三区 | 免费观看av毛片 | 久久久精品电影 | 成人日批| 久久精品综合 | 蜜桃免费一区二区三区 | 婷婷五月色综合香五月 | 免费视频爱爱太爽了 | 国产欧美一区二区视频 | 国产欧美一区二区三区在线看 | 午夜免费观看网站 | 国产视频精品在线 | 免费黄色片一区二区 | 中文字幕亚洲综合久久久软件 | 欧美日韩视频在线 | 狠狠的日 | 亚州成人 | 日本不卡视频 | 久久99精品久久久久婷婷暖91 | 二区三区 | 成人免费精品视频 | 成人午夜性a一级毛片免费看 | 免费视频成人 | av中文字幕在线播放 | 国产一区二区在线免费观看 | 国产精品爱久久久久久久 | 国产成人免费视频网站视频社区 | 岛国伊人| 浴室洗澡偷拍一区二区 | 日韩欧美一区二区三区免费观看 | 玖玖在线精品 | 日韩在线欧美 | 国产精品视频一二三区 | 亚洲成av人片一区二区梦乃 | 伊人网在线免费观看 | 亚洲一区二区三区在线 | 日韩电影免费在线观看中文字幕 | 国产高清在线精品一区二区三区 | 亚洲自啪| 97国产精品视频人人做人人爱 | 三区免费视频 | 久久1区 | 激情网站免费 | 午夜视频在线观看免费视频 | 成人精品一区二区三区中文字幕 | 亚洲国产一区二区三区在线观看 | 亚洲一区丝袜 | 99国产视频| 色噜噜在线 | 福利视频一区二区三区 | 九九热精品视频在线观看 | 亚洲一区二区三区精品视频 | 国产免费一区二区三区最新不卡 | 国产一区二区精品在线 | 中文字幕一区二区三区日韩精品 | 激情视频在线观看免费 | 国产精品久久久久久久久久久久久 | 日本天天色 | 99视频精品 | 国产欧美视频在线 | 日韩视频精品 | 干干人人 | 黄毛片网站 | 亚洲在线| 伊人无码高清 | 午夜精品久久久久久久男人的天堂 | 在线播放国产视频 | 亚洲一区中文字幕在线观看 | 久久综合九九 | 太子妃好紧皇上好爽h | 91视频免费观看网址 | 狠狠综合久久av一区二区老牛 | 手机看片在线 | 亚洲精品久久久 | 亚洲不卡视频 | 欧美freesex交免费视频 | 看毛片网站 | 精品久久久久久亚洲精品 | 久久99精品国产麻豆婷婷洗澡 | 欧美xxxx网站 | 操人视频网站 | 精品久久一区二区三区 | 99精品一区二区三区 | 亚洲最色视频 | 99久久久无码国产精品 | 一级毛片久久久 | 国产日韩中文字幕 | 国产一区二区三区视频 | 国产一级片 | 久久丁香 | 亚洲成人免费在线 | 久久精品视频一区 | 欧美一区二区三区精品 | 国产一区久久 | 久久久久亚洲一区二区三区 | 国产欧美一区二区三区在线看 | 国产免费拔擦拔擦8x高清在线人 | 久久99精品久久久久久青青日本 | 6080yy午夜一二三区久久 | 吴梦梦到粉丝家实战华中在线观看 | 婷婷激情五月 | 日本亚洲欧美 | 日韩久久成人 | 国产一区二区免费 | 可以免费在线观看av的网站 | 91视频网 | 欧美日韩精品一区二区在线播放 | 欧美天堂在线观看 | 亚洲日本精品视频 | 999免费视频 | 黄色a级| 欧美一区永久视频免费观看 | 亚洲精品国产第一综合99久久 | 中文字幕成人免费视频 | 精品国产色 | 国产亚洲成av人片在线观看桃 | 日韩高清在线播放 | 欧洲另类交 | 亚洲成人免费在线观看 | 日韩av高清在线 | 日本一区二区三区在线视频 | 国产精品网站在线看 | av毛片在线免费看 | 国产一区二区三区在线 | 精品网站999www | 日韩中文字幕视频 | 国产精品毛片久久久久久 | 日本亚洲欧美 | 艳妇荡乳豪妇荡淫 | 国产毛片毛片 | 久久久久91 | 精品美女在线观看视频在线观看 | 91精品国产欧美一区二区 | 国产一区二区免费 | 嫩草视频网 | 国产精品国产a级 | 色婷婷国产精品免费网站 | 亚洲一区二区三区精品视频 | av资源中文在线 | 777kkk999成人ww | 一区二区影院 | 一区二区日韩精品 | 久久精品国产99国产精品 | 欧美精品1区2区 | 精品免费国产 | 久久密 | 国产精品视频 | 日韩欧美在线免费观看 | 日本激情视频一区二区三区 | 九九免费视频 | 九九热精品视频 | 久草在线| 国产大学生一区 | 蜜桃中文字幕 | 久久免费的视频 | 国产精品久久天天躁 | 国产精品久久久久影院色老大 | 日韩成人影院 | 日韩不卡 | 久久精品久久久久电影 | 四虎黄色网| 99精品视频一区二区三区 | 色xx综合网 | 中文字幕一区在线观看 | 欧美一级免费 | 日韩综合| 9l蝌蚪porny中文自拍 | 噜噜噜在线视频 | 国产欧美精品一区aⅴ影院 毛片视频网站 | 亚洲成人aaa | 欧美狠狠操 | 日韩蜜桃 | 国产日韩av在线 | 午夜免| 国产精品久久久久久久久久 | 五月婷婷激情 | 国产精品久久久久9999赢消 | 日韩电影在线一区 | 夜夜操操| 亚洲一区电影 | 激情欧美一区二区三区中文字幕 | 日本成人中文字幕 | 精品国产乱码久久久久久久软件 | 日韩一区二区三区在线 | 亚洲精品1区2区 | 日韩av手机在线免费观看 | 亚洲免费婷婷 | 视频一区二区中文字幕日韩 | 狠狠干干| 国产精品1区2区 | 亚洲人人草 | 亚洲人在线 | 久久三区 | 国产乱xxxxx97国语对白 | 污污视频网站 | 色视频网站在线观看 | 国产美女高潮 | 91av视频在线 | 成年人福利 | 成人高清视频在线 | 欧美激情在线免费观看 | 精品国产不卡一区二区三区 | 欧美日韩国产一区二区三区 | 国产电影一区二区 | 91久久国产精品 | 天天曰夜夜操 | 欧美日本一区 | 中文字幕日韩在线 | 中文字幕一区二区三区在线视频 | 麻豆freexxxx性91精品 | 亚洲视频一区在线播放 | 免费观看黄a一级视频 | 日韩一区二区三区四区五区 | 国产xvideos免费视频播放 | 久久久久久久久久久久久久久久久久久 | 免费看的毛片 | 三区视频 | 午夜精品福利一区二区三区蜜桃 | 国产精品免费看 | 国产精品久久久久久吹潮 | 在线黄av| 欧美在线观看免费观看视频 | 成视频年人免费看黄网站 | 国产一区二区三区在线视频 | 精品xxxx户外露出视频 | 亚洲天堂免费 | 国产综合精品 | 成人在线小视频 | 欧美视频网站 | 欧美韩一区二区 | 成人在线播放网站 | 中文字幕一区二区三区四区 | 精品国产一区二区三区久久久 | 欧美激情高清 | 午夜电影福利 | 国产一区二区免费 | 欧美在线视频网站 | 一区二区日本 | 91视频免费观看 | 精品国产一区二区三区高潮视 | 91亚洲国产成人久久精品网站 | 91婷婷射| 亚洲一区二区三区四区五区中文 | 国产成人片 | 精品成人免费一区二区在线播放 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 天天干夜夜爽 | 91资源在线 | 国产超碰人人模人人爽人人添 | 欧美一区| 日韩欧美成人影院 | 日韩激情视频一区 | av毛片| 自拍偷拍欧美 | 亚洲一区二区三区久久久 | 碰碰视频 | 91视频免费看| 99国产精品久久久久久久 | 国产精品美女 | 成人福利视频 | 欧美激情第二页 | 免费av大全| 国产精品久久久久久久久久三级 | 青草福利| 国产伦精品一区二区三区在线 | 免费黄色在线视频网址 | 欧美老妇交乱视频 | 亚洲欧美一区二区三区在线 | 免费观看视频www | 中文字幕在线永久 | 337p日本粉嫩噜噜噜 | 精品一二区 | 91色电影 | 免费观看黄a一级视频 | 欧洲视频一区二区三区 | 亚洲视频自拍 | 日韩在线观看一区 | 欧美日韩精品一区二区三区 | 狠狠爱网站 | 麻豆专区一区二区三区四区五区 | 黄色网免费看 | 久久草在线视频 | 久久国产精品久久久久久电车 | 久久99深爱久久99精品 | 中文字幕99| 国产成人天天爽高清视频 | 亚洲精品久久久久久久久久久久久 | 99视频在线 | 免费看黄视频网站 | 国产精选视频 | 午夜影院普通用户体验区 | 91看片淫黄大片一级在线观看 | 国产亚洲一区二区三区在线观看 | 亚洲高清在线观看 | www.久久精品| 欧美精品在线一区二区 | 成人高清视频在线 | 四虎av成人 | 久久一 | 日韩免费视频一区二区 | 成视频年人免费看黄网站 | 日日干,天天干 | 久草成人 | 狠狠色综合色综合网络 | 天天操天天干天天插 | 亚洲高清在线观看 | 天堂视频中文字幕 | 亚洲欧洲一区二区三区 | 午夜网址 | 亚洲精品一二三区 | 亚洲精品一区中文字幕乱码 | 日韩综合在线 | 亚洲一区电影 | 国产传媒在线 | 久久国产精品一区 | 国产精品国产三级国产aⅴ中文 | 一区二区三区免费av | 亚洲伊人久久网 | 日韩欧美在线看 | 久久久久久网站 | 国产精品美女久久久久aⅴ国产馆 | 无码日韩精品一区二区免费 | 欧美日一区 | av官网在线| 国产精品一区久久久 | 日韩有码在线观看 | 欧美激情精品久久久久久 | 亚洲欧美综合 | 国产精品1区 | 久久久久久91亚洲精品中文字幕 | 久久精品国产清自在天天线 | 91麻豆久久久 | 日日躁夜夜操 | 国产一区二区精品久久岳 | 日韩国伦理久久一区 | 日韩午夜电影 | 特级毛片www| 日韩视频在线观看视频 | 欧美日韩一区在线观看 | 久久久久久久国产 | av免费在线播放 | 精品欧美乱码久久久久久 | 久久99精品国产麻豆婷婷洗澡 | 成人精品久久久 | 国产成人久久精品77777 | 91精品电影| 亚洲精品在线视频 | 天堂一区 | 欧美精品综合 | 日韩一区二区三区在线观看 | 在线区| 天天干天天操天天干 | 久草热8精品视频在线观看 黄色片网站视频 | 精品久久久久久久久久久久 | 午夜精品久久久久久久久 | 亚洲国产精品久久 | 日韩成人国产 | www.日韩.com | 91精品国产91久久综合桃花 | 国产中文字幕在线播放 | 一区二区中文 | 国产福利一区二区三区视频 | 亚洲视频一区二区 | 国产综合一区二区 | 欧美a在线| 爱免费视频| 国产日韩在线播放 | 久久久亚洲一区 | 欧美日韩在线精品 | 国产综合99 | 91亚洲日本 | 精品久久久久香蕉网 | 中文字幕一区二区在线观看 | 一区视频在线 | 动漫泳衣美女 | 九九亚洲视频 | 精品久久久久久久久久久 | 日批免费观看视频 | 亚洲一一在线 | 欧美成人激情视频 | 国产999精品久久久久久 | a在线观看| 国产欧美精品一区二区色综合朱莉 | 国产精品久久久久久吹潮 | 亚洲激情精品 | 亚洲精选久久 | 国产精品久久嫩一区二区 免费 | 国产毛片在线看 | 亚洲欧美日韩国产综合精品二区 | 国产欧美一区二区视频 | 国产精品jizz在线观看麻豆 | 99热69| 国产精品一区一区 | 中国黄色毛片 大片 | 国产成人一区 | 久草视频在线播放 | 一区二区三区福利视频 | 免费v片在线观看 | 精品在线一区二区 | 亚洲视频三区 | 亚洲一区二区中文字幕在线观看 | 亚洲二区在线观看 | 天天干天天操 | 亚洲一区二区 | 黄色av网站在线观看 | 国产精品视频久久 | 韩国精品一区 | 国产乱人伦av在线a jizz久久久 www.亚洲 | 亚洲综合大片69999 | 精品国产乱码久久久久久久软件 | 天堂久久久久久 | 天天操天天碰 | 久热精品视频在线播放 | 成人中文字幕在线 | 午夜私人视频 | 亚洲 欧美 另类 综合 偷拍 | 日本亚洲欧美 | 国产一级特黄aaa大片评分 | 北条麻妃一区二区三区在线观看 | 国产精品日日做人人爱 | 一区二区三区在线播放 | 亚洲精品在线播放 | 毛片在线视频 | 精品一区二区6 | 99福利视频| 精品一二区| 日韩欧美国产一区二区三区 | 中文一区 | 国产成人片 | 91精品久久久久久久久久入口 | 草草视频网站 | 色就是色欧美 | 国产一区二区 | 日本福利在线观看 | 韩国成人精品a∨在线观看 国产伊人av | 成人免费视频网站 | 午夜视频在线观看网站 | 亚洲欧美激情精品一区二区 | 日韩超级大片免费看国产国产播放器 | 日韩影院在线 | 亚洲一区二区三区四区五区中文 | 在线看片成人 | 欧美激情第二页 | 女人高潮特级毛片 | 一区二区在线免费观看 | 日韩和的一区二区 | va在线 | 欧美日韩亚洲在线 | 激情久久av一区av二区av三区 | 草草网站 | 一级片欧美 | 亚洲一区 日韩精品 中文字幕 | 露娜同人18av黄漫网站 | 久热中文 | 国产成人a亚洲精品 | 久久免费视频在线 | 成人a在线视频免费观看 | 在线免费观看毛片 | 国产一区二区三区视频在线观看 | 91av免费在线观看 | 国产日韩欧美综合 | av午夜电影| 亚洲三级在线 | 久久99影视 | 99久久久| 中文字幕精品一区 | 黄色一级毛片 | www日本高清视频 | 国模精品视频一区二区 | 亚洲第一黄色 | 亚洲高清视频一区 | 欧美九九九 | 操视频网站 | 国产精品免费看 | 亚洲综合无码一区二区 | 欧美日韩亚洲一区二区 | 成人黄色a | 色综合网站 | zzz444成人天堂7777 | 亚洲一区中文 | 欧美日韩福利 | 91精品国产综合久久久久久软件 | 国产激情网站 | 日韩欧美视频 | 亚洲综合大片69999 | 日韩网站免费观看 | 日韩精品久久久 | 特黄一级 | av天天网 | 久久午夜电影 | 日本午夜视频 | 日韩免费 | 在线观看亚洲一区二区 | 91中文字幕在线观看 | 欧洲视频一区二区三区 | 精品在线视频一区 | 综合久久网 | 国产在线一区二区三区 | 久久草在线视频 | 亚洲国产免费 | 青草视频在线免费观看 | 97超碰人人 | 精品国产乱码一区二区三区 | 国产区91 | 欧美色综合一区二区三区 | 免费视频二区 | 在线观看午夜免费视频 | 黄色网在线看 | 欧美视频网站 | 一区二区三区在线看 | 亚洲国产精品久久久 | 99热在线观看免费 | 国产日韩欧美一区 | 中文字幕天天操 | 午夜在线影院 | 欧美精品一区二区三区蜜臀 | 国产精品日产欧美久久久久 | 日日综合| 欧美一级免费观看 | 一区不卡| 杏导航aⅴ福利网站 | 99精品久久久久久久免费看蜜月 | 亚洲av毛片一区二二区三三区 | 亚洲精品一区二区在线观看 | 午夜爽视频 | 久在线 | 精产国产伦理一二三区 | 四虎影院免费看 | 久久99精品一区二区三区三区 | 99久久夜色精品国产亚洲1000部 | 日韩精品1区 | 天天澡天天狠天天天做 | 欧美一级二级三级视频 | 久久久国产精品入口麻豆 | 91污在线 | 国产精品一区免费在线观看 | 国产成人高清精品免费5388 | 亚洲一区二区三区四区五区中文 | 成人精品一区 | 亚洲精品www | 久久一区| 国产一区二区久久 | 久久久久久午夜 | 国产乱码一区二区三区 | 亚洲成人精品影视 |