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

Hystrix 實現資源隔離的“兩把利器”

開發 架構
小型電商網站的頁面展示采用頁面全量靜態化的思想。數據庫中存放了所有的商品信息,頁面靜態化系統,將數據填充進靜態模板中,形成靜態化頁面,推入 Nginx 服務器。

[[312493]]

小型電商網站的商品詳情頁系統架構

小型電商網站的頁面展示采用頁面全量靜態化的思想。數據庫中存放了所有的商品信息,頁面靜態化系統,將數據填充進靜態模板中,形成靜態化頁面,推入 Nginx 服務器。用戶瀏覽網站頁面時,取用一個已經靜態化好的 html 頁面,直接返回回去,不涉及任何的業務邏輯處理。 

Hystrix 實現資源隔離的“兩把利器”

下面是頁面模板的簡單 Demo 。

  1. <html> <body> 商品名稱:#{productName}<br> 商品價格:#{productPrice}<br> 商品描述:#{productDesc} </body></html> 

這樣做,好處在于,用戶每次瀏覽一個頁面,不需要進行任何的跟數據庫的交互邏輯,也不需要執行任何的代碼,直接返回一個 html 頁面就可以了,速度和性能非常高。

對于小網站,頁面很少,很實用,非常簡單,Java 中可以使用 velocity、freemarker、thymeleaf 等等,然后做個 cms 頁面內容管理系統,模板變更的時候,點擊按鈕或者系統自動化重新進行全量渲染。

壞處在于,僅僅適用于一些小型的網站,比如頁面的規模在幾十到幾萬不等。對于一些大型的電商網站,億級數量的頁面,你說你每次頁面模板修改了,都需要將這么多頁面全量靜態化,靠譜嗎?每次渲染花個好幾天時間,那你整個網站就廢掉了。

大型電商網站的商品詳情頁系統架構

大型電商網站商品詳情頁的系統設計中,當商品數據發生變更時,會將變更消息壓入 MQ 消息隊列中。緩存服務從消息隊列中消費這條消息時,感知到有數據發生變更,便通過調用數據服務接口,獲取變更后的數據,然后將整合好的數據推送至 redis 中。Nginx 本地緩存的數據是有一定的時間期限的,比如說 10 分鐘,當數據過期之后,它就會從 redis 獲取到最新的緩存數據,并且緩存到自己本地。

用戶瀏覽網頁時,動態將 Nginx 本地數據渲染到本地 html 模板并返回給用戶。 

Hystrix 實現資源隔離的“兩把利器”

雖然沒有直接返回 html 頁面那么快,但是因為數據在本地緩存,所以也很快,其實耗費的也就是動態渲染一個 html 頁面的性能。如果 html 模板發生了變更,不需要將所有的頁面重新靜態化,也不需要發送請求,沒有網絡請求的開銷,直接將數據渲染進最新的 html 頁面模板后響應即可。

在這種架構下,我們需要保證系統的高可用性。

如果系統訪問量很高,Nginx 本地緩存過期失效了,redis 中的緩存也被 LRU 算法給清理掉了,那么會有較高的訪問量,從緩存服務調用商品服務。但如果此時商品服務的接口發生故障,調用出現了延時,緩存服務全部的線程都被這個調用商品服務接口給耗盡了,每個線程去調用商品服務接口的時候,都會卡住很長時間,后面大量的請求過來都會卡在那兒,此時緩存服務沒有足夠的線程去調用其它一些服務的接口,從而導致整個大量的商品詳情頁無法正常顯示。

這其實就是一個商品接口服務故障導致緩存服務資源耗盡的現象。

基于 Hystrix 線程池技術

上文提到,如果從 Nginx 開始,緩存都失效了,Nginx 會直接通過緩存服務調用商品服務獲取最新商品數據(我們基于電商項目做個討論),有可能出現調用延時而把緩存服務資源耗盡的情況。這里,我們就來說說,怎么通過 Hystrix 線程池技術實現資源隔離。

資源隔離,就是說,你如果要把對某一個依賴服務的所有調用請求,全部隔離在同一份資源池內,不會去用其它資源了,這就叫資源隔離。哪怕對這個依賴服務,比如說商品服務,現在同時發起的調用量已經到了 1000,但是分配給商品服務線程池內就 10 個線程,最多就只會用這 10 個線程去執行。不會因為對商品服務調用的延遲,將 Tomcat 內部所有的線程資源全部耗盡。

Hystrix 進行資源隔離,其實是提供了一個抽象,叫做 Command。這也是 Hystrix 最最基本的資源隔離技術。

利用 HystrixCommand 獲取單條數據

我們通過將調用商品服務的操作封裝在 HystrixCommand 中,限定一個 key,比如下面的 GetProductInfoCommandGroup,在這里我們可以簡單認為這是一個線程池,每次調用商品服務,就只會用該線程池中的資源,不會再去用其它線程資源了。

  1. public class GetProductInfoCommand extends HystrixCommand<ProductInfo> { 
  2.  private Long productId; 
  3.  public GetProductInfoCommand(Long productId) { super(HystrixCommandGroupKey.Factory.asKey("GetProductInfoCommandGroup")); this.productId = productId; } 
  4.  @Override protected ProductInfo run() { String url = "http://localhost:8081/getProductInfo?productId=" + productId; // 調用商品服務接口 String response = HttpClientUtils.sendGetRequest(url); return JSONObject.parseObject(response, ProductInfo.class); }} 

我們在緩存服務接口中,根據 productId 創建 Command 并執行,獲取到商品數據。

  1. @RequestMapping("/getProductInfo")@ResponseBodypublic String getProductInfo(Long productId) { HystrixCommand<ProductInfo> getProductInfoCommand = new GetProductInfoCommand(productId); 
  2.  // 通過command執行,獲取最新商品數據 ProductInfo productInfo = getProductInfoCommand.execute(); System.out.println(productInfo); return "success";} 

上面執行的是 execute() 方法,其實是同步的。也可以對 command 調用 queue() 方法,它僅僅是將 command 放入線程池的一個等待隊列,就立即返回,拿到一個 Future 對象,后面可以繼續做其它一些事情,然后過一段時間對 Future 調用 get() 方法獲取數據。這是異步的。

利用 HystrixObservableCommand 批量獲取數據

只要是獲取商品數據,全部都綁定到同一個線程池里面去,我們通過 HystrixObservableCommand 的一個線程去執行,而在這個線程里面,批量把多個 productId 的 productInfo 拉回來。

  1. public class GetProductInfosCommand extends HystrixObservableCommand<ProductInfo> { 
  2.  private String[] productIds; 
  3.  public GetProductInfosCommand(String[] productIds) { // 還是綁定在同一個線程池 super(HystrixCommandGroupKey.Factory.asKey("GetProductInfoGroup")); this.productIds = productIds; } 
  4.  @Override protected Observable<ProductInfo> construct() { return Observable.unsafeCreate((Observable.OnSubscribe<ProductInfo>) subscriber -> { 
  5.  for (String productId : productIds) { // 批量獲取商品數據 String url = "http://localhost:8081/getProductInfo?productId=" + productId; String response = HttpClientUtils.sendGetRequest(url); ProductInfo productInfo = JSONObject.parseObject(response, ProductInfo.class); subscriber.onNext(productInfo); } subscriber.onCompleted(); 
  6.  }).subscribeOn(Schedulers.io()); }} 

在緩存服務接口中,根據傳來的 id 列表,比如是以 , 分隔的 id 串,通過上面的 HystrixObservableCommand,執行 Hystrix 的一些 API 方法,獲取到所有商品數據。

  1. public String getProductInfos(String productIds) { String[] productIdArray = productIds.split(","); HystrixObservableCommand<ProductInfo> getProductInfosCommand = new GetProductInfosCommand(productIdArray); Observable<ProductInfo> observable = getProductInfosCommand.observe(); 
  2.  observable.subscribe(new Observer<ProductInfo>() { @Override public void onCompleted() { System.out.println("獲取完了所有的商品數據"); } 
  3.  @Override public void onError(Throwable e) { e.printStackTrace(); } 
  4.  /** * 獲取完一條數據,就回調一次這個方法 * @param productInfo */ @Override public void onNext(ProductInfo productInfo) { System.out.println(productInfo); } }); return "success";} 

我們回過頭來,看看 Hystrix 線程池技術是如何實現資源隔離的。 

Hystrix 實現資源隔離的“兩把利器”

從 Nginx 開始,緩存都失效了,那么 Nginx 通過緩存服務去調用商品服務。緩存服務默認的線程大小是 10 個,最多就只有 10 個線程去調用商品服務的接口。即使商品服務接口故障了,最多就只有 10 個線程會 hang 死在調用商品服務接口的路上,緩存服務的 Tomcat 內其它的線程還是可以用來調用其它的服務,干其它的事情。

基于 Hystrix 信號量

Hystrix 里面核心的一項功能,其實就是所謂的資源隔離,要解決的最最核心的問題,就是將多個依賴服務的調用分別隔離到各自的資源池內。避免說對某一個依賴服務的調用,因為依賴服務的接口調用的延遲或者失敗,導致服務所有的線程資源全部耗費在這個服務的接口調用上。一旦說某個服務的線程資源全部耗盡的話,就可能導致服務崩潰,甚至說這種故障會不斷蔓延。

Hystrix 實現資源隔離,主要有兩種技術:

•線程池•信號量

默認情況下,Hystrix 使用線程池模式。

前面已經說過線程池技術了,這一小節就來說說信號量機制實現資源隔離,以及這兩種技術的區別與具體應用場景。

信號量機制

信號量的資源隔離只是起到一個開關的作用,比如,服務 A 的信號量大小為 10,那么就是說它同時只允許有 10 個 tomcat 線程來訪問服務 A,其它的請求都會被拒絕,從而達到資源隔離和限流保護的作用。 

Hystrix 實現資源隔離的“兩把利器”

線程池與信號量區別

線程池隔離技術,并不是說去控制類似 tomcat 這種 web 容器的線程。更加嚴格的意義上來說,Hystrix 的線程池隔離技術,控制的是 tomcat 線程的執行。Hystrix 線程池滿后,會確保說,tomcat 的線程不會因為依賴服務的接口調用延遲或故障而被 hang 住,tomcat 其它的線程不會卡死,可以快速返回,然后支撐其它的事情。

線程池隔離技術,是用 Hystrix 自己的線程去執行調用;而信號量隔離技術,是直接讓 tomcat 線程去調用依賴服務。信號量隔離,只是一道關卡,信號量有多少,就允許多少個 tomcat 線程通過它,然后去執行。 

Hystrix 實現資源隔離的“兩把利器”

適用場景:

•線程池技術,適合絕大多數場景,比如說我們對依賴服務的網絡請求的調用和訪問、需要對調用的 timeout 進行控制(捕捉 timeout 超時異常)。•信號量技術,適合說你的訪問不是對外部依賴的訪問,而是對內部的一些比較復雜的業務邏輯的訪問,并且系統內部的代碼,其實不涉及任何的網絡請求,那么只要做信號量的普通限流就可以了,因為不需要去捕獲 timeout 類似的問題。

信號量簡單 Demo

業務背景里,比較適合信號量的是什么場景呢?

比如說,我們一般來說,緩存服務,可能會將一些量特別少、訪問又特別頻繁的數據,放在自己的純內存中。

舉個栗子。一般我們在獲取到商品數據之后,都要去獲取商品是屬于哪個地理位置、省、市、賣家等,可能在自己的純內存中,比如就一個 Map 去獲取。對于這種直接訪問本地內存的邏輯,比較適合用信號量做一下簡單的隔離。

優點在于,不用自己管理線程池啦,不用 care timeout 超時啦,也不需要進行線程的上下文切換啦。信號量做隔離的話,性能相對來說會高一些。

假如這是本地緩存,我們可以通過 cityId,拿到 cityName。

  1. public class LocationCache { private static Map<Long, String> cityMap = new HashMap<>(); 
  2.  static { cityMap.put(1L, "北京"); } 
  3.  /** * 通過cityId 獲取 cityName * * @param cityId 城市id * @return 城市名 */ public static String getCityName(Long cityId) { return cityMap.get(cityId); }} 

寫一個 GetCityNameCommand,策略設置為信號量。run() 方法中獲取本地緩存。我們目的就是對獲取本地緩存的代碼進行資源隔離。

  1. public class GetCityNameCommand extends HystrixCommand<String> { 
  2.  private Long cityId; 
  3.  public GetCityNameCommand(Long cityId) { // 設置信號量隔離策略 super(Setter.withGroupKey(HystrixCommandGroupKey.Factory.asKey("GetCityNameGroup")) .andCommandPropertiesDefaults(HystrixCommandProperties.Setter() .withExecutionIsolationStrategy(HystrixCommandProperties.ExecutionIsolationStrategy.SEMAPHORE))); 
  4.  this.cityId = cityId; } 
  5.  @Override protected String run() { // 需要進行信號量隔離的代碼 return LocationCache.getCityName(cityId); }} 

在接口層,通過創建 GetCityNameCommand,傳入 cityId,執行 execute() 方法,那么獲取本地 cityName 緩存的代碼將會進行信號量的資源隔離。

  1. @RequestMapping("/getProductInfo")@ResponseBodypublic String getProductInfo(Long productId) { HystrixCommand<ProductInfo> getProductInfoCommand = new GetProductInfoCommand(productId); 
  2.  // 通過command執行,獲取最新商品數據 ProductInfo productInfo = getProductInfoCommand.execute(); 
  3.  Long cityId = productInfo.getCityId(); 
  4.  GetCityNameCommand getCityNameCommand = new GetCityNameCommand(cityId); // 獲取本地內存(cityName)的代碼會被信號量進行資源隔離 String cityName = getCityNameCommand.execute(); 
  5.  productInfo.setCityName(cityName); 
  6.  System.out.println(productInfo); return "success";} 

 

責任編輯:武曉燕 來源: 今日頭條
相關推薦

2022-11-21 06:55:08

golang協程

2010-09-17 20:46:11

2017-04-03 21:52:30

隔離線程池分布式

2023-11-09 08:18:31

Hystrix保護系統資源隔離

2017-05-20 15:07:02

大數據數字油田通用電氣

2017-05-23 14:31:59

大數據分析學數據

2017-04-13 09:57:39

機器學習人工智能AI

2021-07-12 08:39:14

程序員外賣小哥代碼

2016-10-24 09:37:51

系統日志日志分析

2023-09-20 10:07:26

Linux虛擬化

2014-01-07 14:29:14

HadoopYARN

2015-11-24 16:59:13

2024-08-28 08:48:20

Linux資源隔離

2025-04-23 11:00:00

Hystrix隔離模式信號量

2017-07-04 17:35:46

微服務架構Spring Clou

2013-11-19 13:12:32

移動互聯網

2018-05-14 08:36:53

微服務接入層動靜資源

2009-03-05 13:36:10

沖突云計算SOA

2010-08-03 13:27:04

FlexBuilder

2010-01-18 10:48:05

JBoss類隔離
點贊
收藏

51CTO技術棧公眾號

一区二区三区不卡视频| 欧美特黄一区| 欧美日韩亚洲综合在线| 九一免费在线观看| 亚洲欧洲国产综合| 久久国产综合精品| 久久久久久久久久久亚洲| 三上悠亚ssⅰn939无码播放| 欧美videos粗暴| 亚洲综合清纯丝袜自拍| 色阁综合av| 亚洲美女综合网| 看电视剧不卡顿的网站| 国内免费久久久久久久久久久 | 欧美一区二区激情视频| 四季av一区二区凹凸精品| 精品国产乱码久久久久久久| 国产激情在线观看视频| 日本在线观看大片免费视频| 91麻豆产精品久久久久久| 91精品啪aⅴ在线观看国产| 97免费在线观看视频| 一区二区免费不卡在线| 亚洲一区二区国产| 久久久久国产精品无码免费看| 成人国产精品一区二区免费麻豆 | 久久精品国产亚洲| 成年人在线观看av| 成人动态视频| 欧美最猛性xxxxx直播| 久久精品视频16| 呦呦在线视频| 综合网在线视频| 日韩国产在线一区| 欧美特级特黄aaaaaa在线看| 久久99国产精品久久99果冻传媒| 全亚洲最色的网站在线观看| 精品人妻在线播放| 永久免费看mv网站入口| 91超碰在线播放| 亚洲免费看黄网站| 中文精品视频一区二区在线观看| 精品成人一区二区三区免费视频| 99久久精品免费看国产免费软件| 2019国产精品视频| 国产精品久久免费| 麻豆免费看一区二区三区| 热99在线视频| 久久久精品福利| 99国产精品| 久久久久久久久网站| 亚洲国产精品久| 亚洲精品一二三区区别| 俺去了亚洲欧美日韩| 妖精视频在线观看免费| 精品国产成人| 中文字幕最新精品| 亚洲AV成人无码精电影在线| 99国产精品免费视频观看| 日韩在线小视频| caoporn91| 在线中文字幕第一区| 久久成人在线视频| 欧美日韩免费做爰视频| 亚洲无线视频| 91精品国产高清久久久久久久久| 人人干人人干人人干| 亚洲视频大全| 国产福利精品av综合导导航| 波多野结衣绝顶大高潮| 日本女优在线视频一区二区| 国产精品亚洲第一区| 成年人视频免费| 久久激五月天综合精品| 亚洲综合社区网| 天堂网2014av| 国产性色一区二区| 中文视频一区视频二区视频三区 | 国产精品视频一二三区 | 91精品国产综合久久久久久豆腐| 中文字幕高清不卡| 欧美 亚洲 视频| zjzjzjzjzj亚洲女人| 肉肉视频在线观看| 亚洲成人av一区二区三区| 大肉大捧一进一出好爽视频| 日韩美女在线看免费观看| 欧美日韩在线一区二区| 深夜做爰性大片蜜桃| 国产亚洲精品美女久久| 亚洲日韩中文字幕在线播放| 中文字幕资源站| 亚洲麻豆av| 国产精品美女在线| 性中国xxx极品hd| 久久精品一区二区| 国产一级黄色录像片| 亚洲最新无码中文字幕久久| 欧美伦理视频网站| 日本护士做爰视频| 天天做天天爱综合| 欧美中文在线观看国产| 国产人妖一区二区| 久久精品一区二区三区av| 男人的天堂avav| 成人在线观看免费播放| 亚洲成人av片在线观看| 又色又爽的视频| 国产精品腿扒开做爽爽爽挤奶网站| 国产精品国产亚洲伊人久久 | 免费成人毛片| 日韩高清a**址| 欧美三级日本三级| 日韩国产在线一| 国产精品久久久久久久久婷婷| 日韩欧美电影在线观看| 尤物av一区二区| wwwwxxxx日韩| 亚洲美女久久| 久久免费国产精品1| 91在线精品入口| 国产午夜精品理论片a级大结局 | 国产中文一区二区三区| 成人情视频高清免费观看电影| 九色视频网站在线观看| 亚洲一区中文在线| 天天操狠狠操夜夜操| 精品国产a一区二区三区v免费| 97人人模人人爽人人喊中文字| 国产乱码精品一区二三区蜜臂| 日本一二三四高清不卡| 国模吧无码一区二区三区| 国产成人aa在线观看网站站| www国产91| 国产精品国产精品国产| 久久网站热最新地址| 丁香花在线影院观看在线播放| 高清久久精品| 色视频www在线播放国产成人| 国产91精品看黄网站在线观看| av午夜一区麻豆| 欧美一区二区激情| youjizzjizz亚洲| 欧美第一黄色网| jlzzjlzzjlzz亚洲人| 国产精品卡一卡二| 红桃av在线播放| 麻豆成人入口| 18久久久久久| 性xxxx视频播放免费| 久久9999免费视频| 欧美日韩一区二区在线观看 | 久久久影视精品| www.日日夜夜| 一区二区三区av电影 | 国产在线观看第一页| 久久久国产精华| 一区二区在线播放视频| 九九热爱视频精品视频| 日本精品免费一区二区三区| 偷拍自拍在线| 日本韩国精品在线| 性欧美精品男男| 毛片av一区二区| 中文网丁香综合网| 中文字幕一区二区三区中文字幕| 欧美国产日韩中文字幕在线| 黄色片网站免费在线观看| 精品人伦一区二区三区蜜桃网站| 精品夜夜澡人妻无码av| 日韩国产高清在线| 亚洲欧洲日韩综合二区| 精品国产不卡一区二区| 欧美激情精品久久久久| 性高潮久久久久久久久久| 91久久人澡人人添人人爽欧美 | 性色av蜜臀av色欲av| 最新亚洲激情| 日本不卡在线观看| 亚洲毛片在线免费| 欧美激情视频一区二区| 欧美女优在线观看| 欧美日韩在线观看一区二区 | 亚洲综合第一页| 日韩电影免费看| 最近2019中文字幕在线高清| 亚洲国产精品一| 日本精品一级二级| 欧美色图一区二区| 91网站黄www| 在线免费观看视频黄| 欧美日韩一卡| 久久99九九| 懂色av色香蕉一区二区蜜桃| 97色在线视频观看| 日本电影全部在线观看网站视频| 欧美不卡在线视频| 亚洲高清视频免费观看| 亚洲一区二区不卡免费| www色com| 91精品久久久| 精品免费日韩av| 最近国语视频在线观看免费播放| 一区二区国产盗摄色噜噜| 人妻少妇一区二区| 国产乱一区二区| 超碰影院在线观看| 亚洲电影在线| 手机福利在线视频| 美女毛片一区二区三区四区| 91久久嫩草影院一区二区| 日韩成人av电影| 久久久久久久久久婷婷| 午夜视频在线免费观看| 日韩电影大片中文字幕| 国产黄a三级三级看三级| 在线视频中文字幕一区二区| 亚洲精品在线观看av| 国产精品人成在线观看免费| 中文字幕 亚洲一区| 国产一区在线看| 亚洲性图一区二区| 久热精品在线| 99爱视频在线| 在线高清一区| 一二三在线视频| 艳女tv在线观看国产一区| 日韩精品另类天天更新| 日韩av三区| 国产一区二区三区高清视频| 欧美激情精品| 91在线免费网站| 91成人福利社区| 国产欧美婷婷中文| 欧美free嫩15| 日韩av日韩在线观看| gai在线观看免费高清| 欧美日韩一区二区三区视频播放| 久久亚洲午夜电影| 国产精品超碰| 国产三级精品在线不卡| 18国产精品| 国产精品日韩一区二区三区| 天堂va在线高清一区| 91午夜理伦私人影院| 少妇精品视频在线观看| 91精品国产综合久久久久久久久| 免费观看成人性生生活片| 国产成人精品视频在线| 成人天堂yy6080亚洲高清| 国产成人a亚洲精品| 免费亚洲电影| 国产97在线亚洲| 电影在线观看一区二区| 国产免费观看久久黄| 日韩国产91| 91久久久一线二线三线品牌| 日本在线一区二区三区| 成人一区二区三区四区| 久久久免费毛片| 欧美日本亚洲| 色88久久久久高潮综合影院| 综合久久国产| 欧美国产激情| 久久久999免费视频| 久久字幕精品一区| 奇米影视四色在线| 国产精品一区二区久久精品爱涩| 色哟哟在线观看视频| 成人av在线影院| 日韩在线免费观看av| 国产精品国模大尺度视频| 国产高潮流白浆| 午夜电影久久久| 日韩乱码一区二区三区| 91精品国产综合久久久久| 黄色av免费观看| 亚洲一级黄色av| 中文字幕在线播放网址| 午夜精品久久17c| 123成人网| 97久久人人超碰caoprom欧美 | 欧美国产不卡| 国产私拍一区| 成人中文在线| 国产精品视频二| 久久精品一区| 亚洲精品中文字幕乱码无线| 99re这里只有精品6| 女性裸体视频网站| 午夜婷婷国产麻豆精品| 日本精品入口免费视频| 日韩一区二区三区在线观看| 无码精品在线观看| 日韩视频中文字幕| h片在线观看视频免费| 国产精品久久久久久网站 | 日韩av中文在线观看| 亚洲一区二区三区三州| 久久婷婷色综合| 欧美日韩大片在线观看| 欧洲一区二区三区在线| 精品人妻无码一区二区| 国产香蕉精品视频一区二区三区| 亚洲综合影视| 国产精品视频yy9099| 欧美人妖在线观看| 国产av第一区| 日本人妖一区二区| 日本55丰满熟妇厨房伦| 欧美国产精品一区二区三区| 久久夜靖品2区| 欧美一级视频精品观看| 国产美女性感在线观看懂色av| 久久久久亚洲精品国产 | 国内精品国语自产拍在线观看| 欧美韩日高清| 99免费视频观看| 成人性视频网站| 亚洲精品卡一卡二| 在线免费观看成人短视频| 日本成人动漫在线观看| 九九精品在线视频| 亚洲成人高清| 亚洲欧美日韩精品久久久| 丝袜亚洲另类欧美综合| 黄色录像a级片| 亚洲大片在线观看| www.亚洲黄色| 欧美精品在线观看| 日本少妇精品亚洲第一区| 大桥未久一区二区三区| 黄网站免费久久| 网站永久看片免费| 欧美性感一类影片在线播放| 欧美日韩在线精品一区二区三区激情综| 欧美激情精品久久久久| 波多野结衣欧美| 久久香蕉视频网站| 国产精品综合一区二区| 欧美爱爱免费视频| 9191国产精品| 搞黄网站在线观看| 91在线视频免费| 天天做天天爱天天爽综合网| 午夜啪啪小视频| 成人免费在线视频| 99精品免费观看| 欧美二区乱c黑人| 91成人精品在线| 热99这里只有精品| 97se狠狠狠综合亚洲狠狠| 日本特黄特色aaa大片免费| 精品女同一区二区| 僵尸再翻生在线观看| 久久福利电影| 久久综合伊人| 天天色天天综合| 精品欧美一区二区久久| 538在线视频| 美女被啪啪一区二区| 日韩av中文字幕一区二区| 日本黄色录像视频| 日韩欧美一区在线观看| 欧美色图天堂| 欧美精品亚洲| 免费精品视频最新在线| 污软件在线观看| 日韩av一区二区在线观看| 精品国产免费人成网站| 天堂资源在线亚洲资源| 精品亚洲porn| xxxxxx国产| 亚洲人成五月天| 成人动漫视频在线观看| 国产男女免费视频| 久久精品亚洲精品国产欧美| 中文字幕观看视频| 欧美国产精品日韩| 国产一区二区三区日韩精品| 成人综合久久网| 亚洲1区2区3区视频| 欧美黄色小说| 亚洲综合在线小说| 亚洲免费网址| 永久免费看mv网站入口| 亚洲精品动漫100p| 欧美高清影院| 日韩视频在线视频| 日本一区二区高清| 欧美熟女一区二区| 国产中文欧美精品| aa国产精品| 天天操天天摸天天舔| 亚洲电影av在线| www久久久| 国产福利视频在线播放| 亚洲人成小说网站色在线| 日韩黄色影片| 97久久人人超碰caoprom欧美|