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

限流,永遠都不是一件簡單的事!

網絡 通信技術
隨著微服務的流行,服務之間的穩定性變得越發重要,往往我們會花很多經歷在維護服務的穩定性上,限流和熔斷降級是我們最常用的兩個手段。前段時間在群里有些小伙伴對限流的使用些疑問,再加上最近公司大促也做了限流相關的事,所以在這里總結一下寫寫自己對限流的一些看法。

[[354146]]

本文轉載自微信公眾號「 咖啡拿鐵」,作者 咖啡拿鐵。轉載本文請聯系 咖啡拿鐵公眾號。

 背景

隨著微服務的流行,服務之間的穩定性變得越發重要,往往我們會花很多經歷在維護服務的穩定性上,限流和熔斷降級是我們最常用的兩個手段。前段時間在群里有些小伙伴對限流的使用些疑問,再加上最近公司大促也做了限流相關的事,所以在這里總結一下寫寫自己對限流的一些看法。

剛才說了限流是我們保證服務穩定性的手段之一,但是他并不是所有場景的穩定性都能保證,和他名字一樣他只能在大流量或者突發流量的場景下才能發揮出自己的作用。比如我們的系統最高支持100QPS,但是突然有1000QPS請求打了進來,可能這個時候系統就會直接掛掉,導致后面一個請求都處理不了,但是如果我們有限流的手段,無論他有多大的QPS,我們都只處理100QPS的請求,其他請求都直接拒絕掉,雖然有900的QPS的請求我們拒絕掉了,但是我們的系統沒有掛掉,我們系統仍然可以不斷的處理后續的請求,這個是我們所期望的。有同學可能會說,現在都上的云了,服務的動態伸縮應該是特別簡單的吧,如果我們發現流量特別大的時候,自動擴容機器到可以支撐目標QPS那不就不需要限流了嗎?其實有這個想法的同學應該還挺多的,有些同學可能被一些吹牛的文章給唬到了,所以才會這么想,這個想法在特別理想化的時候是可以實現的,但是在現實中其實有下面幾個問題:

  • 擴容是需要時間。擴容簡單來說就是搞一個新的機器,然后重新發布代碼,做java的同學應該是知道發布成功一個代碼的時間一般不是以秒級計算,而是以分鐘級別計算,有時候你擴容完成,說不定流量尖峰都過去了。
  • 擴容到多少是個特別復雜的問題。擴容幾臺機器這個是比較復雜的,需要大量的壓測計算,以及整條鏈路上的一個擴容,如果擴容了你這邊的機器之后,其他團隊的機器沒有擴容可能最后還是有瓶頸這個也是一個問題。

所以單純的擴容是解決不了這個問題的,限流仍然是我們必須掌握的技能!

基本原理

想要掌握好限流,就需要先掌握他的一些基本算法,限流的算法基本上分為三種,計數器,漏斗,令牌桶,其他的一些都是在這些基礎上進行演變而來。

計數器算法

首先我們來說一下計數器算法,這個算法比較簡單粗暴,我們只需要一個累加變量,然后每隔一秒鐘去刷新這個累加變量,然后再判斷這個累加變量是否大于我們的最大QPS。

  1. int curQps = 0; 
  2.     long lastTime = System.currentTimeMillis(); 
  3.     int maxQps = 100; 
  4.     Object lock = new Object(); 
  5.     boolean check(){ 
  6.         synchronized (lock){ 
  7.             long now = System.currentTimeMillis(); 
  8.             if (now - lastTime > 1000){ 
  9.                 lastTime = now; 
  10.                 curQps = 0; 
  11.             } 
  12.             curQps++; 
  13.             if (curQps > maxQps){ 
  14.                 return false
  15.             } 
  16.         } 
  17.         return true
  18.     } 

這個代碼比較簡單,我們定義了當前的qps,以及上一次刷新累加變量的時間,還有我們的最大qps和我們的lock鎖,我們每次檢查的時候,都需要判斷是否需要刷新,如果需要刷新那么需要把時間和qps都進行重置,然后再進行qps的累加判斷。

這個算法因為太簡單了所以帶來的問題也是特別明顯,如果我們最大的qps是100,在0.99秒的時候來了100個請求,然后在1.01秒的時候又來了100個請求,這個是可以通過我們的程序的,但是我們其實在0.03秒之內通過了200個請求,這個肯定不符合我們的預期,因為很有可能這200個請求直接就會將我們機器給打掛。

滑動窗口計數器

為了解決上面的臨界的問題,我們這里可以使用滑動窗口來解決這個問題:

如上圖所示,我們將1s的普通計數器,分成了5個200ms,我們統計的當前qps都需要統計最近的5個窗口的所有qps,再回到剛才的問題,0.99秒和1.01秒其實都在我們的最近5個窗口之內,所以這里不會出現剛才的臨界的突刺問題。

其實換個角度想,我們普通的計數器其實就是窗口數量為1的滑動窗口計數器,只要我們分的窗口越多,我們使用計數器方案的時候統計就會越精確,但是相對來說維護的窗口的成本就會增加,等會我們介紹sentinel的時候會詳細介紹他是怎么實現滑動窗口計數的。

漏斗算法

解決計數器中臨界的突刺問題也可以通過漏斗算法來實現,如下圖所示:

在漏斗算法中我們需要關注漏桶和勻速流出,不論流量有多大都會先到漏桶中,然后以均勻的速度流出。如何在代碼中實現這個勻速呢?比如我們想讓勻速為100q/s,那么我們可以得到每流出一個流量需要消耗10ms,類似一個隊列,每隔10ms從隊列頭部取出流量進行放行,而我們的隊列也就是漏桶,當流量大于隊列的長度的時候,我們就可以拒絕超出的部分。

漏斗算法同樣的也有一定的缺點:無法應對突發流量(和上面的臨界突刺不一樣,不要混淆)。比如一瞬間來了100個請求,在漏桶算法中只能一個一個的過去,當最后一個請求流出的時候時間已經過了一秒了,所以漏斗算法比較適合請求到達比較均勻,需要嚴格控制請求速率的場景。

令牌桶算法

為了解決突發流量情況,我們可以使用令牌桶算法,如下圖所示:

這個圖上需要關注三個階段:

  • 生產令牌:我們在這里同樣的還是假設最大qps是100,那么我們從漏斗的每10ms過一個流量轉化成每10ms生產一個令牌,直到達到最大令牌。
  • 消耗令牌:我們每一個流量都會消耗令牌桶,這里的消耗的規則可以多變,既可以是簡單的每個流量消耗一個令牌,又可以是根據不同的流量數據包大小或者流量類型來進行不同的消耗規則,比如查詢的流量消耗1個令牌,寫入的流量消耗2個令牌。
  • 判斷是否通過:如果令牌桶足夠那么我們就允許流量通過,如果不足夠可以等待或者直接拒絕,這個就可以采用漏斗那種用隊列來控制。

單機限流

上面我們已經介紹了限流的一些基本算法,我們把這些算法應用到我們的分布式服務中又可以分為兩種,一個是單機限流,一個是集群限流。單機限流指的是每臺機器各自做自己的限流,互不影響。我們接下來看看單機限流怎么去實現呢?

guava

guava是谷歌開源的java核心工具庫,里面包括集合,緩存,并發等好用的工具,當然也提供了我們這里所需要的的限流的工具,核心類就是RateLimiter。

  1. //  RateLimiter rateLimiter = RateLimiter.create(100, 500, TimeUnit.MILLISECONDS); 預熱的rateLimit 
  2.     RateLimiter rateLimiter = RateLimiter.create(100); // 簡單的rateLimit 
  3.     boolean limitResult = rateLimiter.tryAcquire(); 

使用方式比較簡單,如上面代碼所示,我們只需要構建一個RateLimiter,然后再調用tryAcquire方法,如果返回為true代表我們此時流量通過,相反則被限流。在guava中RateLimiter也分為兩種,一個是普通的令牌桶算法的實現,還有一個是帶有預熱的RateLimiter,可以讓我們令牌桶的釋放速度逐步增加直到最大,這個帶有預熱的在sentinel也有,這個可以在一些冷系統中比如數據庫連接池沒有完全填滿,還在不斷初始化的場景下使用。

在這里只簡單的介紹一下guava的令牌桶怎么去實現的:

普通的令牌桶創建了一個SmoothBursty的類,這個類也就是我們實現限流的關鍵,具體怎么做限流的在我們的tryAcquire中:

這里分為四步:

  • Step1: 加上一個同步鎖,需要注意一下這里在sentinel中并沒有加鎖這個環節,在guava中是有這個的,后續也會將sentinel的一些問題。
  • Step2: 判斷是否能申請令牌桶,如果桶內沒有足夠的令牌并且等待時間超過我們的timeout,這里我們就不進行申請了。
  • Step3: 申請令牌并獲取等待時間,在我們tryAcquire中的timeout參數就是就是我們的最大等待時間,如果我們只是調用tryAcquire(),不會出現等待,第二步的時候已經快速失敗了。
  • Step4: sleep等待的時間。

扣除令牌的方法具體在reserverEarliestAvailable方法中:

這里雖然看起來過程比較多,但是如果我們只是調用tryAcquire(),就只需要關注兩個紅框:

  • Step1: 根據當前最新時間發放token,在guava中沒有采用使用其他線程異步發放token的方式,把token的更新放在了我們每次調用限流方法中,這個設計可以值得學習一下,很多時候不一定需要異步線程去執行也可以達到我們想要的目的,并且也沒有異步線程的復雜。
  • Step2: 扣除令牌,這里我們已經在canAcquire中校驗過了,令牌一定能扣除成功。

guava的限流目前就提供了這兩種方式的限流,很多中間件或者業務服務都把guava的限流作為自己的工具,但是guava的方式比較局限,動態改變限流,以及更多策略的限流都不支持,所以我們接下來介紹一下sentinel。

sentinel

sentinel是阿里巴巴開源的分布式服務框架的輕量級流量控制框架,承接了阿里巴巴近 10 年的雙十一大促流量的核心場景,他的核心是流量控制但是不局限于流量控制,還支持熔斷降級,監控等等。

使用sentinel的限流稍微比guava復雜很多,下面寫了一個最簡單的代碼:

  1. String KEY = "test"
  2.         // ============== 初始化規則 ========= 
  3.         List<FlowRule> rules = new ArrayList<FlowRule>(); 
  4.         FlowRule rule1 = new FlowRule(); 
  5.         rule1.setResource(KEY); 
  6.         // set limit qps to 20 
  7.         rule1.setCount(20); 
  8.         rule1.setGrade(RuleConstant.FLOW_GRADE_QPS); 
  9.         rule1.setLimitApp("default"); 
  10.         rules.add(rule1); 
  11.         rule1.setControlBehavior(CONTROL_BEHAVIOR_DEFAULT); 
  12.         FlowRuleManager.loadRules(rules); 
  13.         // ================ 限流判定 =========== 
  14.         Entry entry = null
  15.  
  16.         try { 
  17.             entry = SphU.entry(KEY); 
  18.             // do something 
  19.  
  20.         } catch (BlockException e1) { 
  21.             // 限流會拋出BlockException 異常 
  22.         }finally { 
  23.             if (entry != null) { 
  24.                 entry.exit(); 
  25.             } 
  26.         } 
  • Step1:在sentinel中比較強調Resource這個概念,我們所保護的或者說所作用于都是基于Resource來說,所以我們首先需要確定我們的Resource的key,這里我們簡單的設置為test了。
  • Step2:然后我們初始化我們這個Resource的一個限流規則,我們這里選擇的是針對QPS限流并且策略選擇的是默認,這里默認的話就是使用的滑動窗口版的計數器,然后加載到全局的規則管理器里面,整個規則的設置和guava的差別比較大。
  • Step3: 在sentinel第二個比較重要的概念就是Entry,Entry表示一次資源操作,內部會保存當前invocation信息,在finally的時候需要對entry進行退出。我們執行限流判定的時候實際上也就是獲取Entry,SphU.entry也就是我們執行我們上面限流規則的關鍵,這里和guava不一樣如果被限流了,就會拋出BlockException,我們在進行限流的處理。

雖然sentinel的使用整體比guava復雜很多,但是算法的可選比guava的限流也多一點。

基于并發數(線程數)

我們之前介紹的都是基于QPS的,在sentinel中提供了基于并發數的策略,效果類似于信號量隔離,當我們需要讓業務線程池不被慢調用耗盡,我們就可以使用這種模式。

通常來說我們同一個服務提供的http接口都是使用的一個線程池,比如我們使用的tomcat-web服務器那么我們就會有個tomcat的業務線程池,如果在http中有兩個方法A和B,B的速度相對來說比較快,A的速度相對來說比較慢,如果大量的調用A這個方法,由于A的速度太慢,線程得不到釋放,有可能導致線程池被耗盡,另一個方法B就得不到線程。這個場景我們之前有遇到過直接導致整個服務所接收的請求全部被拒絕。有的同學說限制A的QPS不是就可以了嗎,要注意的是QPS是每秒的,如果我們這個A接口的耗時大于1s,那么下一波A來了之后QPS是要重新計算的。

基于這個就提供了基于并發數的限流,我們設置Grade為FLOW_GRADE_THREAD,就可以實現這個限流模式。

基于QPS

基于QPS的限流sentinel也提供了4種策略:

  • 默認策略:設置Behavior為CONTROL_BEHAVIOR_DEFAULT,這個模式是滑動窗口計數器模式。這種方式適用于對系統處理能力確切已知的情況下,比如通過壓測確定了系統的準確水位時。
  • Warm Up:設置為Behavior為CONTROL_BEHAVIOR_WARM_UP,類似之前guava中介紹的warmup。預熱啟動方式。當系統長期處于低水位的情況下,當流量突然增加時,直接把系統拉升到高水位可能瞬間把系統壓垮。這個模式下QPS的曲線圖如下:

  • 勻速排隊:設置Behavior為CONTROL_BEHAVIOR_RATE_LIMITER,這個模式其實就是漏斗算法,優缺點之前也講解過了
  • Warm Up + 勻速排隊:設置Behavior為CONTROL_BEHAVIOR_WARM_UP_RATE_LIMITER,之前warm up到高水位之后使用的是滑動窗口的算法限流,這個模式下繼續使用勻速排隊的算法。

基于調用關系

sentinel提供了更為復雜的一種限流,可以基于調用關系去做更為靈活的限流:

  • 根據調用方限流:調用方的限流使用比較復雜,需要調用ContextUtil.enter(resourceName, origin),origin就是我們的調用方標識,然后在我們的rule設置參數的時候,對limitApp進行設置就可以進行對調用方的限流:
    • 設置為default,默認對所有調用方都限流。
    • 設置為{some_origin_name},代表對特定的調用者才限流。
    • 設置為other,會對配置的一個referResource參數代表的調用者除外的進行限流。

關聯流量控制:在sentinel中也支持,兩個有關聯的資源可以互相影響流量控制,比如有兩個接口都使用的是同一個資源,一個接口比較重要,另外一個接口不是那么重要,我們可以設置一個規則當重要的接口大量訪問的時候,就可以對另外一個不重要接口進行限流,防止這個接口突然出現流量影響重要的接口。

sentinel的一些問題

sentinel雖然提供了這么多算法,但是也有一些問題:

  • 首先來說sentinel上手比較難,對比guava的兩行代碼來說,使用sentinel需要了解一些名詞,然后針對這些名詞再來使用,雖然sentinel提供了一些注解來幫助我們簡化使用,但是整體來說還是比guava要復雜。
  • sentinel有一定的運維成本,sentinel的使用往往需要搭建sentinel的server后臺,對比guava的開箱即用來說,有一定的運維成本。
  • sentinel的限流統計有一定的并發問題,在sentinel的源碼中是沒有加鎖的地方的,極端情況下如果qps限制的是10,如果有100個同時過限流的邏輯,這個時候都會通過,而guava不會發生這樣的情況。

這些問題基本上都是和guava的限流來比較的,畢竟sentinel的功能更多,付出的成本相對來說也會更多。

集群限流

之前說的所有限流都是單機限流,但是我們現在都是微服務集群的架構模式,通常一個服務會有多臺機器,比如有一個訂單服務,這個服務有10臺機器,那么我們想做整個集群限流到500QPS,我們應該怎么去做呢?這個很簡單,直接每臺機器都限流50就好了,50*10就是500,但是在現實環境中會出現負載不均衡的情況,在微服務調用的時候負載均衡的算法多種多樣,比如同機房優先,輪訓,隨機等算法,這些算法都有可能導致我們的負載不是特別的均衡,就會導致我們整個集群的QPS可能有沒有500,甚至在400的時候就被限流了,這個是我們真實場景中所遇到過的。既然單機限流有問題,那么我們應該設計一個更加完善的集群限流的方案

Redis

這個方案不依賴限流的框架,我們整個集群使用同一個redis即可,需要自己封裝一下限流的邏輯,這里我們使用最簡單的計數器去設計,我們將我們的系統時間以秒為單位作為key,設置到redis里面(可以設置一定的過期時間用于空間清理),利用redis的int原子加法,每來一個請求都進行+1,然后再判斷當前值是否超過我們限流的最大值。

redis的方案實現起來整體來說比較簡單,但是強依賴我們的系統時間,如果不同機器之間的系統時間有偏差限流就有可能不準確。

sentinel

在sentinel中提供了集群的解決方案,這個對比其他的一些限流框架是比較有特色的。在sentinel中提供了兩種模式:

  • 獨立模式:限流服務作為單獨的server進行部署,如下圖所示,所有的應用都向單獨部署的token-server進行獲取token,這種模式適用于跨服務之間的全局限流,比如下面圖中,A和B都會去token-server去拿,這個場景一般來說比較少,更多的還是服務內集群的限流比較多。
  • 內嵌模式:在內嵌模式下,我們會把server部署到我們應用實例中,我們也可以通過接口轉換我們的server-client身份,當然我們可以自己引入一些zk的一些邏輯設置讓我們的leader去當server,機器掛了也可以自動切換。這種比較適合同一個服務集群之間的限流,靈活性比較好,但是要注意的是大量的token-server的訪問也有可能影響我們自己的機器。

當然sentinel也有一些兜底的策略,如果token-server掛了我們可以退化成我們單機限流的模式,不會影響我們正常的服務。

實戰

我們上面已經介紹了很多限流的工具,但是很多同學對怎么去限流仍然比較迷惑。我們如果對一個場景或者一個資源做限流的話有下面幾個點需要確認一下:

  • 什么地方去做限流
  • 限多少流
  • 怎么去選擇工具

什么地方去做限流

這個問題比較復雜,很多公司以及很多團隊的做法都不相同,在美團的時候搞了一波SOA,那個時候我記得所有的服務所有的接口都需要做限流,叫每個團隊去給接口評估一個合理的QPS上限,這樣做理論上來說是對的,我們每個接口都應該給與一個上限,防止把整體系統拖垮,但是這樣做的成本是非常之高的,所以大部分公司還是選擇性的去做限流。

首先我們需要確定一些核心的接口,比如電商系統中的下單,支付,如果流量過大那么電商系統中的路徑就有問題,比如像對賬這種邊緣的接口(不影響核心路徑),我們可以不設置限流。

其次我們不一定只在接口層才做限流,很多時候我們直接在網關層把限流做了,防止流量進一步滲透到核心系統中。當然前端也能做限流,當前端捕獲到限流的錯誤碼之后,前端可以提示等待信息,這個其實也算是限流的一部分。其實當限流越在下游觸發我們的資源的浪費就越大,因為在下游限流之前上游已經做了很多工作了,如果這時候觸發限流那么之前的工作就會白費,如果涉及到一些回滾的工作還會加大我們的負擔,所以對于限流來說應該是越上層觸發越好。

限多少流

限多少流這個問題大部分的時候可能就是一個歷史經驗值,我們可以通過日常的qps監控圖,然后再在這個接觸上加一點冗余的QPS可能這個就是我們的限流了。但是有一個場景需要注意,那就是大促(這里指的是電商系統里面的場景,其他系統類比流量較高的場景)的時候,我們系統的流量就會突增,再也不是我們日常的QPS了,這種情況下,往往需要我們在大促之前給我們系統進行全鏈路壓測,壓測出一個合理的上限,然后限流就基于這個上限去設置。

怎么去選擇工具

一般來說大一點的互聯網公司都有自己的統一限流的工具這里直接采用就好。對于其他情況的話,如果沒有集群限流或者熔斷這些需求,我個人覺得選擇RateLimter是一個比較不錯的選擇,應該其使用比較簡單,基本沒有學習成本,如果有其他的一些需求我個人覺得選擇sentinel,至于hytrix的話我個人不推薦使用,因為這個已經不再維護了。

總結

限流雖然只有兩個字,但是真正要理解限流,做好限流,是一件非常不容易的事,對于我個人而已,這篇文章也只是一些淺薄的見識,如果大家有什么更好的意見可以關注我的公眾號留言進行討論。 

 

責任編輯:武曉燕 來源: 咖啡拿鐵
相關推薦

2024-12-10 08:34:28

2015-06-12 10:01:25

程序員代碼

2010-09-13 11:04:03

編程

2021-05-17 10:27:42

地址虛擬邏輯

2013-05-30 08:48:30

團隊

2021-05-16 15:49:12

數字化轉型IT技術

2020-11-18 14:13:48

手機iPhone三星

2021-04-29 16:00:54

數字化信息化IT項目

2016-01-22 11:51:36

測試浪費時間

2019-11-14 19:03:51

人工智能設計無人駕駛

2011-10-14 19:58:04

C語言

2015-11-13 11:15:40

SELinuxFedoraLinux

2014-10-29 15:04:05

觸控科技陳昊芝

2025-10-31 10:00:54

2025-10-11 06:05:00

2022-06-08 12:29:24

編程語言JavaPython

2020-04-06 14:09:36

存儲閃存技術

2022-04-28 23:19:58

元宇宙NFT數字資產

2020-01-10 14:56:54

存儲技術容器

2017-08-14 15:34:14

廣州
點贊
收藏

51CTO技術棧公眾號

91视频久久| 国产精品一区二区小说| 中文字字幕在线观看| 亚洲免费二区| 日韩高清中文字幕| 亚洲视频在线a| 亚洲综合影视| 奇米影视一区二区三区小说| 欧美国产第一页| 97超碰在线资源| 91精品一久久香蕉国产线看观看| 五月激情综合婷婷| 欧美日本韩国一区二区三区| a在线观看免费| 欧美在线网站| 亚洲一区二区精品| 国产精品亚洲二区在线观看 | 人成网站在线观看| 日韩和欧美一区二区三区| 欧美成人剧情片在线观看| 草草影院第一页| 国产福利一区二区精品秒拍| 色综合久久久久综合体| 全黄性性激高免费视频| 午夜性色福利视频| 国产成人一区二区精品非洲| 国产精品一区专区欧美日韩| 五月婷婷亚洲综合| 狠狠爱成人网| 久久精品最新地址| 国产美女免费无遮挡| 91成人在线精品视频| 欧美久久久一区| 国产又黄又猛又粗| 成人影院大全| 欧美性生交xxxxxdddd| 一区二区在线高清视频| 欧洲av在线播放| 国产91高潮流白浆在线麻豆 | 在线观看日韩中文字幕| 狠狠入ady亚洲精品| 久久手机精品视频| 亚洲久久久久久久| 国产91久久精品一区二区| 亚洲二区在线播放视频| 亚洲国产精品狼友在线观看| 麻豆精品久久| 日韩欧美电影一区| 巨乳女教师的诱惑| 日本免费精品| 欧美v国产在线一区二区三区| 日韩av片免费观看| 久久天堂av| 亚洲v中文字幕| 国产美女网站在线观看| 理论不卡电影大全神| 亚洲黄色小视频| 亚洲不卡中文字幕| 天堂中文在线官网| 97久久精品人人做人人爽50路| 国外成人免费视频| 欧美特级特黄aaaaaa在线看| 成人免费黄色大片| 精品免费日产一区一区三区免费| 亚洲av无码片一区二区三区| 美腿丝袜一区二区三区| 69久久夜色精品国产69| 男人天堂1024| 天天综合视频在线观看| 欧美国产欧美亚州国产日韩mv天天看完整 | 日韩欧美手机在线| 免费黄色在线视频网站| 国产女同互慰高潮91漫画| 一区二区三区国| 超碰caoporn久久| 亚洲高清视频的网址| 青青青在线播放| 丁香久久综合| 欧美一区二区三区在线看| av中文字幕网址| 岛国精品在线| 亚洲高清久久久久久| 四虎永久免费在线观看| 香港欧美日韩三级黄色一级电影网站| 超碰97人人做人人爱少妇| 国产精品精品软件男同| 黄色成人av网站| 国产精品九九九| 国产视频aaa| 不卡视频免费播放| 日韩av不卡播放| 在线中文字幕视频观看| 欧美日韩精品国产| 日韩欧美xxxx| 日韩a**中文字幕| 777奇米四色成人影色区| 日本特黄在线观看| 婷婷激情久久| www.xxxx欧美| 国产精品免费av一区二区| 久久国产免费看| 精品一区二区国产| 老司机在线看片网av| 精品国产乱码久久久久久虫虫漫画 | 国产精品一卡| 亚洲xxx视频| 亚洲人午夜射精精品日韩| 亚洲欧洲美洲综合色网| 春日野结衣av| 一区二区视频| 久久亚洲国产精品| 国产综合精品视频| 久88久久88久久久| 欧美xxxx黑人又粗又长密月| 婷婷在线播放| 欧美在线免费观看视频| 手机av在线网| 国产综合久久久| 国内精品一区二区三区| 国产女人高潮的av毛片| 国产日韩欧美精品在线| 很污的网站在线观看| 久久国产精品免费一区二区三区| 在线丨暗呦小u女国产精品| 黄色片免费观看视频| 成人免费视频视频在线观看免费| 日韩国产精品一区二区| 日本在线播放一二三区| 日韩欧美国产电影| 少妇影院在线观看| 狠狠网亚洲精品| 亚洲最大免费| 精品69视频一区二区三区| 亚洲图片在线综合| 天天干天天操天天爱| 成人a区在线观看| 国产爆乳无码一区二区麻豆| 国产乱子精品一区二区在线观看| 日韩h在线观看| 久久网中文字幕| 成人一级视频在线观看| 免费看日本黄色| 亚洲国产高清在线观看| 久久中文字幕在线| 国产又粗又猛又色又| 国产午夜精品在线观看| 一本久道综合色婷婷五月| 亚洲最好看的视频| 国产成人精品久久二区二区| 美女毛片在线看| 欧美曰成人黄网| 女教师淫辱の教室蜜臀av软件| 美日韩一区二区三区| 亚洲一卡二卡三卡| 亚洲第一会所001| 色噜噜久久综合伊人一本| 中文字幕第三页| 日韩美女久久久| 凹凸日日摸日日碰夜夜爽1| 国产一区二区三区四区五区| 国产精品视频内| 中国日本在线视频中文字幕| 欧美精品色一区二区三区| 香蕉久久久久久久| 国产乱子轮精品视频| 国产夫妻自拍一区| 菁菁伊人国产精品| 8090成年在线看片午夜| 色欲久久久天天天综合网| 欧美香蕉大胸在线视频观看 | 国产精品一国产精品| 国产成人啪精品视频免费网| 日本电影全部在线观看网站视频| 91精品国产欧美一区二区| tube国产麻豆| 99久久久免费精品国产一区二区| 99er在线视频| 97久久综合区小说区图片区| 91超碰中文字幕久久精品| 电影在线一区| 日韩欧美另类在线| 青青青国产在线| 国产精品久久久久国产精品日日 | 国产精品综合在线| 亚洲国产精品一区二区久久 | 午夜精品一区二区三区国产| 国产91色在线|亚洲| 羞羞影院欧美| 久久综合电影一区| 天堂中文字幕av| 欧美福利电影网| 中文字幕亚洲精品在线| 91视视频在线直接观看在线看网页在线看| 超碰在线人人爱| 一本一道久久a久久精品蜜桃| 久久伦理网站| 精品国产一级| 78m国产成人精品视频| 国产视频网址在线| 欧美色爱综合网| 国产一级特黄a高潮片| 中文字幕精品综合| 亚洲成av人片在线观看无| 久久成人综合网| 日本福利视频一区| 91精品国产91久久久久久黑人| 精品久久久久久一区| 高清国产一区二区三区四区五区| 8x拔播拔播x8国产精品| 91麻豆一二三四在线| 亚洲少妇中文在线| 欧美一级一区二区三区| 欧美亚洲国产一卡| 国产精品一区二区三区四| 一区二区三区鲁丝不卡| 天天色天天综合| 久久精品欧美日韩| 91黄色免费视频| 国产成人亚洲精品青草天美| 日本三级黄色网址| 欧美专区在线| 国产精品12345| 欧美在线亚洲| 强开小嫩苞一区二区三区网站| 日韩系列在线| 国产精华一区| 欧美性生活一级| 欧美一区第一页| 国产丝袜精品丝袜| 亚洲午夜av久久乱码| 日本激情视频网站| 精品成人一区二区三区四区| 国产有码在线观看| 欧美日韩日本视频| 中文字幕在线播放不卡| 欧美性色欧美a在线播放| 亚洲自拍一区在线观看| 欧美性猛交xxxx免费看| 久久一区二区三区视频| 欧美日韩午夜剧场| 国产情侣自拍av| 欧美性猛交xxx| 午夜精品一区二| 亚洲国产视频一区二区| 俄罗斯毛片基地| 国产精品久久久久婷婷| 波多野结衣一二三四区| 国产免费成人在线视频| 免费观看av网站| 久久久久久久综合色一本| 添女人荫蒂视频| www..com久久爱| 性久久久久久久久久久| 国产剧情在线观看一区二区| 亚洲性图一区二区| 久久久久久一区二区| 国产3p露脸普通话对白| 亚洲一区二区三区高清不卡| 黄色一级片黄色| 99成人在线| 亚洲人成色77777| 日韩精品五月天| 亚洲黄色av片| 国产精品亚洲人在线观看| 污视频在线观看免费网站| 成人免费观看av| 六月婷婷七月丁香| 久久精品人人做人人综合| 亚洲色图日韩精品| 一区二区三区日韩欧美| 久久精品国产av一区二区三区| 亚洲综合久久av| 五月天婷婷网站| 日本福利一区二区| 亚洲综合成人av| 日韩一区二区影院| 色中色在线视频| 中文字幕亚洲精品| 国精产品一区| 欧美一级视频在线观看| 日日夜夜亚洲精品| 不卡的av一区| 国产一区二区欧美| 欧美日韩国产综合在线| 7777精品伊久久久大香线蕉语言 | 欧美日韩国产在线观看| 国产一区二区波多野结衣| 欧美xxxxxxxx| av资源网站在线观看| 欧美俄罗斯性视频| 午夜欧美巨大性欧美巨大 | 久久久国产视频91| 俺来俺也去www色在线观看| 2019av中文字幕| 亚洲在线资源| 欧美视频1区| 国产精品videosex极品| 国产a级一级片| 国产一区二区美女诱惑| 精品人妻互换一区二区三区| 亚洲精品乱码久久久久久黑人| 日本特黄一级片| 91精品国产aⅴ一区二区| 青青草超碰在线| 超碰日本道色综合久久综合| 日韩影片中文字幕| 成人在线免费网站| 国产精品久久观看| 欧美三级午夜理伦三级| 丁香亚洲综合激情啪啪综合| 亚洲精品视频网址| 亚洲男人的天堂网| 中文字幕制服诱惑| 亚洲人成毛片在线播放| 丁香影院在线| 亚洲最大成人网色| 视频在线不卡免费观看| 色诱视频在线观看| 国产成人自拍网| 农村老熟妇乱子伦视频| 一本一道波多野结衣一区二区| 亚洲毛片欧洲毛片国产一品色| 精品日韩在线观看| 黄色网在线免费看| 国产精品色午夜在线观看| 91欧美日韩在线| 亚洲区成人777777精品| 免费看黄裸体一级大秀欧美| 污污内射在线观看一区二区少妇 | 久草视频在线观| 精品久久久三级丝袜| 超鹏97在线| 91视频免费在线观看| 一区二区三区四区日韩| chinese少妇国语对白| 久久综合色播五月| 国产成人在线视频观看| 精品人在线二区三区| 国产婷婷视频在线| 国产99视频在线观看| 免费精品国产的网站免费观看| 欧美 日韩 国产 高清| av在线不卡网| 日本少妇久久久| 亚洲精品xxx| 自拍在线观看| 久久99精品久久久久久秒播放器| 日韩午夜免费视频| 欧美日韩人妻精品一区在线| 亚洲主播在线播放| 欧美在线 | 亚洲| 欧美一区二区三区精品电影| 亚洲日本va中文字幕| 日本中文字幕在线视频观看| 成人h动漫精品| 一本一道无码中文字幕精品热| 亚洲电影成人av99爱色| 亚洲永久av| 日本一区二区三区免费观看| 亚洲一卡久久| 蜜乳av中文字幕| 欧美片网站yy| 中中文字幕av在线| 国产传媒一区二区| 亚洲永久视频| 国产无遮挡在线观看| 欧美一区二区福利视频| 国产极品人妖在线观看| 久久国产日韩欧美| 欧美aⅴ一区二区三区视频| 色婷婷av777| 欧美高清dvd| 国产v日韩v欧美v| 日日噜噜噜噜夜夜爽亚洲精品| 日本不卡123| 妖精视频在线观看免费| 日韩欧美激情在线| 日韩激情电影| 亚洲午夜精品福利| 成人精品小蝌蚪| 中文字幕+乱码+中文| 欧美日韩电影在线观看| 欧美日韩一区二区三区四区不卡 | www.色综合| 久久a爱视频| 天天干在线影院| 亚洲精品大片www| 撸视在线观看免费视频| 国产日韩亚洲欧美| 国产精品久久| 日本爱爱爱视频| 日韩欧美中文字幕制服| 向日葵视频成人app网址| 日本视频一区二区在线观看| 国精品**一区二区三区在线蜜桃 | 久久久久9999| 欧美久久高跟鞋激| 日韩深夜视频| 麻豆传媒网站在线观看| 日本一区二区三区国色天香|