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

分布式服務(wù)限流實(shí)戰(zhàn),已經(jīng)為你排好坑了

開發(fā) 架構(gòu) 分布式
由于API接口無(wú)法控制調(diào)用方的行為,因此當(dāng)遇到瞬時(shí)請(qǐng)求量激增時(shí),會(huì)導(dǎo)致接口占用過多服務(wù)器資源,使得其他請(qǐng)求響應(yīng)速度降低或是超時(shí),更有甚者可能導(dǎo)致服務(wù)器宕機(jī)。

[[273022]]

一、限流的作用

由于API接口無(wú)法控制調(diào)用方的行為,因此當(dāng)遇到瞬時(shí)請(qǐng)求量激增時(shí),會(huì)導(dǎo)致接口占用過多服務(wù)器資源,使得其他請(qǐng)求響應(yīng)速度降低或是超時(shí),更有甚者可能導(dǎo)致服務(wù)器宕機(jī)。

限流(Rate limiting)指對(duì)應(yīng)用服務(wù)的請(qǐng)求進(jìn)行限制,例如某一接口的請(qǐng)求限制為100個(gè)每秒,對(duì)超過限制的請(qǐng)求則進(jìn)行快速失敗或丟棄。

限流可以應(yīng)對(duì):

  • 熱點(diǎn)業(yè)務(wù)帶來(lái)的突發(fā)請(qǐng)求;
  • 調(diào)用方bug導(dǎo)致的突發(fā)請(qǐng)求;
  • 惡意攻擊請(qǐng)求。

因此,對(duì)于公開的接口應(yīng)該采取限流措施。

二、為什么要分布式限流

當(dāng)應(yīng)用為單點(diǎn)應(yīng)用時(shí),只要應(yīng)用進(jìn)行了限流,那么應(yīng)用所依賴的各種服務(wù)也都得到了保護(hù)。

但線上業(yè)務(wù)出于各種原因考慮,多是分布式系統(tǒng),單節(jié)點(diǎn)的限流僅能保護(hù)自身節(jié)點(diǎn),但無(wú)法保護(hù)應(yīng)用依賴的各種服務(wù),并且在進(jìn)行節(jié)點(diǎn)擴(kuò)容、縮容時(shí)也無(wú)法準(zhǔn)確控制整個(gè)服務(wù)的請(qǐng)求限制。

而如果實(shí)現(xiàn)了分布式限流,那么就可以方便地控制整個(gè)服務(wù)集群的請(qǐng)求限制,且由于整個(gè)集群的請(qǐng)求數(shù)量得到了限制,因此服務(wù)依賴的各種資源也得到了限流的保護(hù)。

三、限流的算法

實(shí)現(xiàn)限流有很多辦法,在程序中時(shí)通常是根據(jù)每秒處理的事務(wù)數(shù)(Transaction per second)來(lái)衡量接口的流量。

本文介紹幾種常用的限流算法:

  • 固定窗口計(jì)數(shù)器;
  • 滑動(dòng)窗口計(jì)數(shù)器;
  • 漏桶;
  • 令牌桶。

1、固定窗口計(jì)數(shù)器算法

固定窗口計(jì)數(shù)器算法概念如下:

  • 將時(shí)間劃分為多個(gè)窗口;
  • 在每個(gè)窗口內(nèi)每有一次請(qǐng)求就將計(jì)數(shù)器加一;
  • 如果計(jì)數(shù)器超過了限制數(shù)量,則本窗口內(nèi)所有的請(qǐng)求都被丟棄當(dāng)時(shí)間到達(dá)下一個(gè)窗口時(shí),計(jì)數(shù)器重置。

固定窗口計(jì)數(shù)器是最為簡(jiǎn)單的算法,但這個(gè)算法有時(shí)會(huì)讓通過請(qǐng)求量允許為限制的兩倍。考慮如下情況:限制1秒內(nèi)最多通過5個(gè)請(qǐng)求,在第一個(gè)窗口的最后半秒內(nèi)通過了5個(gè)請(qǐng)求,第二個(gè)窗口的前半秒內(nèi)又通過了5個(gè)請(qǐng)求。這樣看來(lái)就是在1秒內(nèi)通過了10個(gè)請(qǐng)求。

2、滑動(dòng)窗口計(jì)數(shù)器算法

滑動(dòng)窗口計(jì)數(shù)器算法概念如下:

  • 將時(shí)間劃分為多個(gè)區(qū)間;
  • 在每個(gè)區(qū)間內(nèi)每有一次請(qǐng)求就將計(jì)數(shù)器加一維持一個(gè)時(shí)間窗口,占據(jù)多個(gè)區(qū)間;
  • 每經(jīng)過一個(gè)區(qū)間的時(shí)間,則拋棄最老的一個(gè)區(qū)間,并納入最新的一個(gè)區(qū)間;
  • 如果當(dāng)前窗口內(nèi)區(qū)間的請(qǐng)求計(jì)數(shù)總和超過了限制數(shù)量,則本窗口內(nèi)所有的請(qǐng)求都被丟棄。

滑動(dòng)窗口計(jì)數(shù)器是通過將窗口再細(xì)分,并且按照時(shí)間"滑動(dòng)",這種算法避免了固定窗口計(jì)數(shù)器帶來(lái)的雙倍突發(fā)請(qǐng)求,但時(shí)間區(qū)間的精度越高,算法所需的空間容量就越大。

3、漏桶算法

漏桶算法概念如下:

將每個(gè)請(qǐng)求視作"水滴"放入"漏桶"進(jìn)行存儲(chǔ);

"漏桶"以固定速率向外"漏"出請(qǐng)求來(lái)執(zhí)行如果"漏桶"空了則停止"漏水";

如果"漏桶"滿了則多余的"水滴"會(huì)被直接丟棄。

漏桶算法多使用隊(duì)列實(shí)現(xiàn),服務(wù)的請(qǐng)求會(huì)存到隊(duì)列中,服務(wù)的提供方則按照固定的速率從隊(duì)列中取出請(qǐng)求并執(zhí)行,過多的請(qǐng)求則放在隊(duì)列中排隊(duì)或直接拒絕。

漏桶算法的缺陷也很明顯,當(dāng)短時(shí)間內(nèi)有大量的突發(fā)請(qǐng)求時(shí),即便此時(shí)服務(wù)器沒有任何負(fù)載,每個(gè)請(qǐng)求也都得在隊(duì)列中等待一段時(shí)間才能被響應(yīng)。

4、令牌桶算法

令牌桶算法概念如下:

  • 令牌以固定速率生成;
  • 生成的令牌放入令牌桶中存放,如果令牌桶滿了則多余的令牌會(huì)直接丟棄,當(dāng)請(qǐng)求到達(dá)時(shí),會(huì)嘗試從令牌桶中取令牌,取到了令牌的請(qǐng)求可以執(zhí)行;
  • 如果桶空了,那么嘗試取令牌的請(qǐng)求會(huì)被直接丟棄。

令牌桶算法既能夠?qū)⑺械恼?qǐng)求平均分布到時(shí)間區(qū)間內(nèi),又能接受服務(wù)器能夠承受范圍內(nèi)的突發(fā)請(qǐng)求,因此是目前使用較為廣泛的一種限流算法。

四、代碼實(shí)現(xiàn)

作為如此重要的功能,在Java中自然有很多實(shí)現(xiàn)限流的類庫(kù),例如Google的開源項(xiàng)目guava提供了RateLimiter類,實(shí)現(xiàn)了單點(diǎn)的令牌桶限流。

而分布式限流常用的則有Hystrix、resilience4j、Sentinel等框架,但這些框架都需引入第三方的類庫(kù),對(duì)于國(guó)企等一些保守的企業(yè),引入外部類庫(kù)都需要經(jīng)過層層審批,較為麻煩。

分布式限流本質(zhì)上是一個(gè)集群并發(fā)問題,而Redis作為一個(gè)應(yīng)用廣泛的中間件,又擁有單進(jìn)程單線程的特性,天然可以解決分布式集群的并發(fā)問題。本文簡(jiǎn)單介紹一個(gè)通過Redis實(shí)現(xiàn)單次請(qǐng)求判斷限流的功能。

1、腳本編寫

經(jīng)過上面的對(duì)比,最適合的限流算法就是令牌桶算法。而為實(shí)現(xiàn)限流算法,需要反復(fù)調(diào)用Redis查詢與計(jì)算,一次限流判斷需要多次請(qǐng)求較為耗時(shí)。因此我們采用編寫Lua腳本運(yùn)行的方式,將運(yùn)算過程放在Redis端,使得對(duì)Redis進(jìn)行一次請(qǐng)求就能完成限流的判斷。

令牌桶算法需要在Redis中存儲(chǔ)桶的大小、當(dāng)前令牌數(shù)量,并且實(shí)現(xiàn)每隔一段時(shí)間添加新的令牌。最簡(jiǎn)單的辦法當(dāng)然是每隔一段時(shí)間請(qǐng)求一次Redis,將存儲(chǔ)的令牌數(shù)量遞增。

但實(shí)際上我們可以通過對(duì)限流兩次請(qǐng)求之間的時(shí)間和令牌添加速度來(lái)計(jì)算得出上次請(qǐng)求之后到本次請(qǐng)求時(shí),令牌桶應(yīng)添加的令牌數(shù)量。因此我們?cè)赗edis中只需要存儲(chǔ)上次請(qǐng)求的時(shí)間和令牌桶中的令牌數(shù)量,而桶的大小和令牌的添加速度可以通過參數(shù)傳入實(shí)現(xiàn)動(dòng)態(tài)修改。

由于第一次運(yùn)行腳本時(shí)默認(rèn)令牌桶是滿的,因此可以將數(shù)據(jù)的過期時(shí)間設(shè)置為令牌桶恢復(fù)到滿所需的時(shí)間,及時(shí)釋放資源。

編寫完成的Lua腳本如下:

  1. local ratelimit_info = redis.pcall('HMGET',KEYS[1],'last_time','current_token'
  2. local last_time = ratelimit_info[1] 
  3. local current_token = tonumber(ratelimit_info[2]) 
  4. local max_token = tonumber(ARGV[1]) 
  5. local token_rate = tonumber(ARGV[2]) 
  6. local current_time = tonumber(ARGV[3]) 
  7. local reverse_time = 1000/token_rate 
  8. if current_token == nil then 
  9.   current_token = max_token 
  10.   last_time = current_time 
  11. else 
  12.   local past_time = current_time-last_time 
  13.   local reverse_token = math.floor(past_time/reverse_time) 
  14.   current_token = current_token+reverse_token 
  15.   last_time = reverse_time*reverse_token+last_time 
  16.   if current_token>max_token then 
  17.     current_token = max_token 
  18.   end 
  19. end 
  20. local result = 0 
  21. if(current_token>0) then 
  22.   result = 1 
  23.   current_token = current_token-1 
  24. end  
  25. redis.call('HMSET',KEYS[1],'last_time',last_time,'current_token',current_token) 
  26. redis.call('pexpire',KEYS[1],math.ceil(reverse_time*(max_token-current_token)+(current_time-last_time))) 
  27. return result 

2、執(zhí)行限流

這里使用Spring Data Redis來(lái)進(jìn)行Redis腳本的調(diào)用。

編寫Redis腳本類:

  1. public class RedisReteLimitScript implements RedisScript<String> {  
  2.    private static final String SCRIPT =  
  3.       "local ratelimit_info = redis.pcall('HMGET',KEYS[1],'last_time','current_token') local last_time = ratelimit_info[1] local current_token = tonumber(ratelimit_info[2]) local max_token = tonumber(ARGV[1]) local token_rate = tonumber(ARGV[2]) local current_time = tonumber(ARGV[3]) local reverse_time = 1000/token_rate if current_token == nil then current_token = max_token last_time = current_time else local past_time = current_time-last_time; local reverse_token = math.floor(past_time/reverse_time) current_token = current_token+reverse_token; last_time = reverse_time*reverse_token+last_time if current_token>max_token then current_token = max_token end end local result = '0' if(current_token>0) then result = '1' current_token = current_token-1 end redis.call('HMSET',KEYS[1],'last_time',last_time,'current_token',current_toke  redis.call('pexpire',KEYS[1],math.ceil(reverse_time*(max_tokencurrent_token)+(current_time-last_time))) return result";  
  4.  
  5.   @Override   public String getSha1() {  
  6.     return DigestUtils.sha1Hex(SCRIPT);  
  7.   }  
  8.  
  9.   @Override   public Class<String> getResultType() {     return String.class;  
  10.   }  
  11.  
  12.   @Override   public String getScriptAsString() {     return SCRIPT;  
  13.   }  
  14. }  

通過RedisTemplate對(duì)象執(zhí)行腳本:

  1. public boolean rateLimit(String keyint maxint rate) { 
  2.     List<String> keyList = new ArrayList<>(1); 
  3.     keyList.add(key); 
  4.     return "1".equals(stringRedisTemplate 
  5.         .execute(new RedisReteLimitScript(), keyList, Integer.toString(max), Integer.toString(rate), 
  6.             Long.toString(System.currentTimeMillis()))); 
  7.   }  

rateLimit方法傳入的key為限流接口的ID,max為令牌桶的最大大小,rate為每秒鐘恢復(fù)的令牌數(shù)量,返回的boolean即為此次請(qǐng)求是否通過了限流。為了測(cè)試Redis腳本限流是否可以正常工作,我們編寫一個(gè)單元測(cè)試進(jìn)行測(cè)試看看。

  1. @Autowired 
  2.   private RedisManager redisManager; 
  3.  
  4.   @Test 
  5.   public void rateLimitTest() throws InterruptedException { 
  6.     String key = "test_rateLimit_key"
  7.     int max = 10;  //令牌桶大小 
  8.     int rate = 10; //令牌每秒恢復(fù)速度 
  9.     AtomicInteger successCount = new AtomicInteger(0); 
  10.     Executor executor = Executors.newFixedThreadPool(10); 
  11.     CountDownLatch countDownLatch = new CountDownLatch(30); 
  12.     for (int i = 0; i < 30; i++) { 
  13.       executor.execute(() -> { 
  14.         boolean isAllow = redisManager.rateLimit(keymax, rate); 
  15.         if (isAllow) { 
  16.           successCount.addAndGet(1); 
  17.         } 
  18.         log.info(Boolean.toString(isAllow)); 
  19.         countDownLatch.countDown(); 
  20.       }); 
  21.     } 
  22.     countDownLatch.await(); 
  23.     log.info("請(qǐng)求成功{}次", successCount.get()); 
  24.   } 

設(shè)置令牌桶大小為10,令牌桶每秒恢復(fù)10個(gè),啟動(dòng)10個(gè)線程在短時(shí)間內(nèi)進(jìn)行30次請(qǐng)求,并輸出每次限流查詢的結(jié)果。日志輸出:

  1. [19:12:50,283]true  
  2. [19:12:50,284]true  
  3. [19:12:50,284]true  
  4. [19:12:50,291]true  
  5. [19:12:50,291]true  
  6. [19:12:50,291]true  
  7. [19:12:50,297]true  
  8. [19:12:50,297]true  
  9. [19:12:50,298]true  
  10. [19:12:50,305]true  
  11. [19:12:50,305]false  
  12. [19:12:50,305]true  
  13. [19:12:50,312]false  
  14. [19:12:50,312]false  
  15. [19:12:50,312]false  
  16. [19:12:50,319]false  
  17. [19:12:50,319]false  
  18. [19:12:50,319]false  
  19. [19:12:50,325]false  
  20. [19:12:50,325]false  
  21. [19:12:50,326]false  
  22. [19:12:50,380]false  
  23. [19:12:50,380]false  
  24. [19:12:50,380]false  
  25. [19:12:50,387]false  
  26. [19:12:50,387]false  
  27. [19:12:50,387]false  
  28. [19:12:50,392]false  
  29. [19:12:50,392]false  
  30. [19:12:50,392]false  
  31. [19:12:50,393]請(qǐng)求成功11次 

可以看到,在0.1秒內(nèi)請(qǐng)求的30次請(qǐng)求中,除了初始的10個(gè)令牌以及隨時(shí)間恢復(fù)的1個(gè)令牌外,剩下19個(gè)沒有取得令牌的請(qǐng)求均返回了false,限流腳本正確的將超過限制的請(qǐng)求給判斷出來(lái)了,業(yè)務(wù)中此時(shí)就可以直接返回系統(tǒng)繁忙或接口請(qǐng)求太過頻繁等提示。

3、開發(fā)中遇到的問題

1)Lua變量格式

Lua中的String和Number需要通過tonumber()和tostring()進(jìn)行轉(zhuǎn)換。

2)Redis入?yún)?/strong>

Redis的pexpire等命令不支持小數(shù),但Lua的Number類型可以存放小數(shù),因此Number類型傳遞給 Redis時(shí)最好通過math.ceil()等方式轉(zhuǎn)換以避免存在小數(shù)導(dǎo)致命令失敗。

3)Time命令

由于Redis在集群下是通過復(fù)制腳本及參數(shù)到所有節(jié)點(diǎn)上,因此無(wú)法在具有不確定性的命令后面執(zhí)行寫入命令,因此只能請(qǐng)求時(shí)傳入時(shí)間而無(wú)法使用Redis的Time命令獲取時(shí)間。

3.2版本之后的Redis腳本支持redis.replicate_commands(),可以改為使用Time命令獲取當(dāng)前時(shí)間。

4)潛在的隱患

由于此Lua腳本是通過請(qǐng)求時(shí)傳入的時(shí)間做計(jì)算,因此務(wù)必保證分布式節(jié)點(diǎn)上獲取的時(shí)間同步,如果時(shí)間不同步會(huì)導(dǎo)致限流無(wú)法正常運(yùn)作。

作者介紹

段然,甜橙金融創(chuàng)新中心開發(fā)工程師,目前負(fù)責(zé)公司平臺(tái)化建設(shè)及媒介能力聚合。

責(zé)任編輯:武曉燕 來(lái)源: DBAplus社群
相關(guān)推薦

2019-08-27 08:30:19

分布式服務(wù)限流

2019-05-28 08:56:40

PythonCPUThread

2023-05-29 14:07:00

Zuul網(wǎng)關(guān)系統(tǒng)

2018-06-28 08:18:56

Ceph運(yùn)維存儲(chǔ)

2024-04-08 11:04:03

2022-01-12 12:46:32

Go限流保障

2022-06-18 23:03:05

Seata分布式事務(wù)

2010-01-21 11:51:11

2018-06-11 11:12:09

秒殺限流分布式

2018-06-19 09:35:51

分布式系統(tǒng)限流

2023-07-11 10:24:00

分布式限流算法

2023-01-13 07:39:07

2019-08-05 07:58:01

分布式架構(gòu)系統(tǒng)

2012-06-06 09:30:07

2012-06-06 11:29:15

2022-12-21 08:40:05

限流器分布式限流

2023-04-06 08:52:54

Sentinel分布式系統(tǒng)

2013-07-23 10:24:00

2025-05-09 01:00:00

分布式限流高并發(fā)

2016-11-02 12:06:27

分布式系統(tǒng)大數(shù)據(jù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

日韩高清在线观看| 欧美黑人巨大videos精品| 中文字幕亚洲在| 操人视频欧美| 欧美国产成人精品一区二区三区 | 国产精品久久精品国产| 国产黄网在线观看| 亚洲精品久久久| 日韩电影免费观看中文字幕| 亚洲免费黄色网| japanese色国产在线看视频| 国产精品欧美久久久久无广告 | 久久久爽爽爽美女图片| 我不卡一区二区| 国产成人一二片| 欧美日韩久久一区二区| 人人妻人人添人人爽欧美一区| 91看片在线观看| 91一区二区在线观看| 亚洲自拍小视频| 黄色网址中文字幕| 亚洲精品社区| 久久69精品久久久久久久电影好| 黄色av免费播放| 一道本一区二区三区| 欧美成人vps| 亚洲一级片免费观看| 久久天堂av| 欧美日韩免费区域视频在线观看| 99精品一级欧美片免费播放| 国产三级在线免费| 91亚洲永久精品| 国产精品一区二区你懂得| 国产欧美日韩成人| 老汉av免费一区二区三区 | 亚洲免费黄色网址| 国内揄拍国内精品久久| 久久手机免费视频| 亚洲精品自拍视频在线观看| 精品国产不卡| 亚洲欧美一区二区三区情侣bbw| 秘密基地免费观看完整版中文 | 国产丝袜一区二区| 日本人添下边视频免费| 日韩激情欧美| 精品人伦一区二区色婷婷| 久久久久久久久久毛片| 四虎国产精品免费久久5151| 欧美午夜精品一区二区三区| 丁香婷婷激情网| 日韩精品99| 91福利国产精品| 国产精品免费成人| 台湾佬成人网| 欧美吻胸吃奶大尺度电影| 国产福利一区视频| 国产电影一区二区三区爱妃记| 色av成人天堂桃色av| 亚洲精品中文字幕无码蜜桃| 免费电影日韩网站| 欧美亚洲自拍偷拍| 中文字幕22页| 日本伊人久久| 亚洲国产欧美在线成人app| 国产chinese中国hdxxxx| 精品综合久久88少妇激情| 亚洲国产高清福利视频| 成年人在线观看av| 欧美天天综合| 久久久精品一区| 国产日韩欧美在线观看视频| 91亚洲成人| 久久久久久69| 亚洲欧美自拍视频| 久草在线在线精品观看| 99精品在线直播| 色丁香婷婷综合久久| 久久免费美女视频| 午夜在线视频免费观看| 成人三级小说| 欧美午夜免费电影| 师生出轨h灌满了1v1| 天堂99x99es久久精品免费| 亚洲午夜精品久久久久久性色 | caopo在线| 亚洲v精品v日韩v欧美v专区| 亚洲人成无码www久久久| 爱情电影网av一区二区| 亚洲成人动漫在线播放| 欧美老熟妇乱大交xxxxx| 国产精品99在线观看| 久久人人爽国产| 中文字幕激情视频| 成人黄色网址在线观看| 亚洲欧美综合一区| av资源在线| 欧美顶级少妇做爰| 疯狂揉花蒂控制高潮h| 久久久久久久久久久久久久| 91av在线播放| 国产人妻精品一区二区三| 99精品欧美一区二区三区综合在线| 日韩久久久久久久久久久久久| 欧美人与禽性xxxxx杂性| 在线精品亚洲一区二区不卡| 激情小说欧美色图| 大片网站久久| 9.1国产丝袜在线观看| www.久久色| 日本一区二区成人| 国产aaa一级片| 在线综合色站| 久久久av电影| 中文字幕日本人妻久久久免费| av成人免费在线观看| 一区二区三区四区免费观看| 日本另类视频| 亚洲女人天堂视频| 久久视频免费在线观看| 国产呦萝稀缺另类资源| 日韩一二三区不卡在线视频| 日本在线啊啊| 精品三级av在线| 成年人午夜剧场| 极品美女销魂一区二区三区| 欧洲精品在线一区| 国产色播av在线| 欧美精品一区二区三区视频 | 日韩欧美成人精品| 少妇被狂c下部羞羞漫画| 欧美特黄a级高清免费大片a级| 成人欧美一区二区三区在线 | 亚洲精品国产suv一区| 国产精品超碰97尤物18| 男操女免费网站| 精品久久久久中文字幕小说| 国产成人在线视频| 日韩av成人| 一道本成人在线| 波多野结衣a v在线| 午夜亚洲性色福利视频| 精品欧美一区二区精品久久| 国产传媒在线| 亚洲国产成人精品久久| 日韩少妇裸体做爰视频| av不卡在线播放| 国内自拍在线观看| 丝袜美腿综合| 国产精品1234| 日本美女高清在线观看免费| 这里只有精品99re| 中国美女黄色一级片| 激情综合网激情| 欧美一级中文字幕| 极品国产人妖chinesets亚洲人妖| 欧美激情久久久久久| 狠狠综合久久av一区二区| 午夜在线成人av| 亚洲精品国产91| 日本成人在线视频网站| 一区二区视频在线播放| 成人免费观看49www在线观看| 欧美另类在线观看| 日本黄色一区二区三区| 欧美视频在线观看免费| 一区二区三区伦理片| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲综合五月天| 美女日韩一区| 欧美亚洲在线视频| aaa在线免费观看| 欧美一级爆毛片| 午夜精品久久久久久久久久久久久蜜桃 | 欧美视频成人| 欧美婷婷久久| 四虎地址8848精品| 久久久久久美女| 国产在线视频网站| 91精品在线一区二区| 日本天堂网在线观看| 国产日韩欧美精品一区| 免费看的av网站| 久久精品一区二区国产| 一区二区三区四区视频在线观看 | 国产丝袜视频一区| 一区二区三区免费在线视频| 亚洲一区免费在线观看| 免费看黄色的视频| 国产精品99久| 欧美 国产 小说 另类| 97精品中文字幕| 狠狠色综合色区| 96视频在线观看欧美| 2020久久国产精品| 久久久久久国产精品免费无遮挡| 亚洲精品电影网| 国产精品毛片一区视频播| 精品久久久久久久久久久| 亚洲一级理论片| 97久久超碰国产精品电影| 91精品999| 噜噜噜在线观看免费视频日韩 | 国产一二三四在线| 国产欧美一区二区三区在线老狼| 精品国产乱码久久久久夜深人妻| 日本成人超碰在线观看| 91丨porny丨探花| 天天揉久久久久亚洲精品| 久久久久se| 97久久精品| 国产这里只有精品| 国产超碰精品| 97视频在线播放| 午夜小视频在线观看| 色妞欧美日韩在线| 精品av中文字幕在线毛片| 精品国产亚洲一区二区三区在线观看| 中文字幕一区二区三区波野结| 天涯成人国产亚洲精品一区av| 国产十六处破外女视频| 国产精品嫩草99a| 亚洲精品午夜视频| 99国产精品久| 波多野结衣加勒比| 国产suv精品一区二区6| 99视频在线观看视频| 日韩avvvv在线播放| 日本精品一区二区三区四区| aa国产精品| 欧美视频免费看欧美视频| 欧美女激情福利| 手机看片日韩国产| 天天精品视频| 大地资源第二页在线观看高清版| 日韩夫妻性生活xx| 五月天亚洲综合情| 日韩欧美字幕| 亚洲欧洲一区二区| 国产高清一区| 麻豆中文字幕在线观看| 99精品在线观看| 一区二区精品在线观看| 欧美gayvideo| 天天干天天色天天爽| 亚洲二区三区不卡| 国产精品夜夜夜爽张柏芝| 国产二区精品| 成人国产在线看| 91精品综合| 国产精品av免费观看| 激情欧美丁香| 精品中文字幕av| 日本少妇一区二区| 久久撸在线视频| 激情成人综合网| 欧美人与性动交α欧美精品| 国产成人av电影在线播放| 涩视频在线观看| 91蜜桃在线观看| 黄色片网站免费| 亚洲视频在线观看一区| 欧美三级小视频| 婷婷综合另类小说色区| 亚洲男人第一av| 在线精品视频免费观看| 国产精品无码专区av免费播放| 日韩欧美国产精品一区| 国产小视频免费观看| 亚洲老板91色精品久久| 99免在线观看免费视频高清| 欧美成人精品激情在线观看 | 欧美日韩另类在线| 中文字幕日韩经典| 欧美一级欧美三级在线观看| 人妻少妇一区二区三区| 亚洲欧洲日产国产网站| 免费黄网在线观看| 国自在线精品视频| 99riav视频一区二区| 91久久国产自产拍夜夜嗨| 欧美a级网站| 亚洲精品永久www嫩草| 激情久久久久久| 狠狠躁狠狠躁视频专区| 国产成人在线视频网址| 欧美 日本 国产| 亚洲色图清纯唯美| 天码人妻一区二区三区在线看| 欧美挠脚心视频网站| 色一情一乱一区二区三区| 一本色道久久88精品综合| 日韩专区av| 国产精品久久久久国产a级| 亚洲福利合集| 亚洲一区二区三区四区中文| 亚洲精品国产日韩| 日韩成人精品视频在线观看| 91免费看`日韩一区二区| 欧美激情精品久久久久久免费 | av动漫免费看| 国产精品白丝av| 日本精品在线观看视频| 亚洲一区二区三区中文字幕| 伊人久久成人网| 日韩电影免费观看中文字幕| 福利视频在线| 国产精品高精视频免费| 欧美亚洲国产日韩| 亚洲小视频在线播放| 日韩在线观看一区二区| 手机在线看片日韩| 亚洲黄色av一区| 一区二区www| 亚洲天堂成人在线| 麻豆免费版在线观看| 99久久精品久久久久久ai换脸| 日韩精品免费| 日本久久久精品视频| 成人丝袜18视频在线观看| 波多野结衣在线网址| 欧美三级电影网站| 国产69精品久久app免费版| 91国内揄拍国内精品对白| 亚洲一区电影| 国产树林野战在线播放| 精品综合免费视频观看| 亚洲精品视频网址| 色综合色综合色综合色综合色综合 | 久久久无码一区二区三区| 欧美日韩电影在线| 国产特黄在线| 国产精品久久久久久亚洲影视| 天堂综合网久久| 日韩免费视频播放| 99久久免费精品高清特色大片| 国产精品.www| 亚洲国产高清高潮精品美女| 2018av在线| 国产综合第一页| 亚洲激情网站| 真人bbbbbbbbb毛片| 懂色av影视一区二区三区| 亚洲 国产 欧美 日韩| 5566成人精品视频免费| 免费看日本一区二区| 日本三级免费观看| 久久精品在这里| 久久久久久久久久一级| 中文字幕亚洲情99在线| 国产成人亚洲一区二区三区| 成人手机视频在线| 国产乱码精品一区二区三区五月婷| 成人涩涩小片视频日本| 日韩欧美中文一区二区| 黄页在线观看免费| 老牛影视免费一区二区| 毛片一区二区| 青青青视频在线播放| 91麻豆精品国产91久久久| 亚洲欧美成人影院| 国产日产精品一区二区三区四区 | 亚洲国产一区二区三区| 午夜视频在线播放| 国产精品igao视频| 91亚洲国产成人久久精品| 少妇高潮一69aⅹ| 欧美日韩国产综合新一区| 二区三区在线| 亚洲r级在线观看| 激情视频一区二区三区| 蜜桃精品成人影片| 欧美三片在线视频观看| 91网址在线观看| 麻豆91av| 国精产品一区一区三区mba视频| 久草网在线观看| 亚洲免费福利视频| av在线播放一区二区| 黄色成人在线看| 国产精品第五页| 秋霞视频一区二区| 国产精品久久一区主播| 午夜国产精品视频| 黄免费在线观看| 欧美成人一区二区三区片免费 | 国产日韩欧美高清免费| 国产一区二区三区四区在线| 欧美www视频| 日韩av电影资源网| 色欲色香天天天综合网www| 日本一区二区不卡视频| 欧美视频一二区| 成人黄色免费网站在线观看| 国产日韩1区| 青娱乐av在线| www.久久久久久.com| 欧美激情极品| 香蕉视频在线观看黄| 色综合久久久网| а√天堂中文在线资源8|