精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国内av一区二区三区| 日韩乱码在线观看| 国产精品一区免费在线| 一级精品视频在线观看宜春院 | 久久久久国产精品一区| 人妻精品久久久久中文字幕| 亚洲综合资源| 精品久久久久久久久久久久| 午夜啪啪免费视频| 亚洲欧洲精品视频| 国产精品一二二区| 国产www精品| 日本少妇在线观看| 999精品在线| 亚洲日本成人女熟在线观看 | 中文字幕777| 91久久午夜| 久久艳片www.17c.com| 国产艳俗歌舞表演hd| 久久综合给合| 欧美日韩亚洲综合| 北条麻妃在线一区| aa级大片免费在线观看| 亚洲人成网站影音先锋播放| 日本在线高清视频一区| 免费看黄色一级视频| 国产乱码精品一品二品| 国产精品入口尤物| 亚洲无码精品一区二区三区| 亚洲乱亚洲高清| 欧美丰满片xxx777| 久久免费看少妇高潮v片特黄| 教室别恋欧美无删减版| 国产视频精品xxxx| 免费无码一区二区三区| 超碰在线亚洲| 精品人伦一区二区色婷婷| 网站在线你懂的| 激情久久99| 在线看不卡av| 午夜激情在线观看视频| 我爱我色成人网| 色视频一区二区| 久久无码高潮喷水| 亚洲黄色免费看| 疯狂做受xxxx高潮欧美日本| 人妻久久久一区二区三区| 免费在线播放电影| 亚洲午夜精品在线| 无码熟妇人妻av在线电影| 欧美xxx黑人xxx水蜜桃| 亚洲综合丁香婷婷六月香| 成人在线视频一区二区三区| 色网在线观看| 亚洲高清三级视频| 青青青在线视频播放| 国产传媒在线观看| 亚瑟在线精品视频| 国产日产欧美视频| 水蜜桃在线视频| 91国偷自产一区二区开放时间 | 国产精品无码久久av| 狠狠色丁香婷婷综合| 91免费国产网站| 国产sm主人调教女m视频| 成人精品视频网站| 蜜桃视频日韩| 成在在线免费视频| 亚洲色图在线播放| 久久99久久久久久| 亚洲精品一级二级| 欧美久久久一区| 亚洲精品无码一区二区| 亚洲品质自拍| 久久精品99久久久久久久久| 91精品国产高清一区二区三蜜臀| 极品少妇一区二区三区| 奇米一区二区三区四区久久| 中文字字幕在线中文乱码| 国产美女精品在线| 国内精品久久国产| 亚洲搞黄视频| 亚洲国产精品一区二区尤物区| 欧美日韩第二页| 99综合久久| 日韩国产在线播放| 可以免费看av的网址| 亚洲看片免费| 91色中文字幕| 欧美精品少妇| 亚洲美女视频一区| 波多野结衣作品集| 日韩精品久久久久久久软件91| 精品亚洲国产视频| 三级影片在线看| 日韩国产欧美在线观看| 99热在线国产| 天堂中文8资源在线8| 亚洲成在线观看| 欧美一级特黄a| 欧美国产极品| 欧美精品性视频| 国产亚洲欧美日韩高清| 国产高清精品久久久久| 亚洲成人精品电影在线观看| gogo高清在线播放免费| 911精品产国品一二三产区| 国产精品300页| 中文乱码免费一区二区三区下载| 日本不卡视频在线播放| 超碰免费在线97| 亚洲国产精品v| 91九色在线观看视频| 国产在线一区不卡| 一区二区成人精品| 波多野结衣 久久| 成人精品电影在线观看| 7777在线视频| 四虎精品永久免费| 国产一区二区日韩| 9i精品福利一区二区三区| 丁香婷婷综合五月| 超薄肉色丝袜足j调教99| 福利一区二区| 亚洲天堂网在线观看| 日韩成人免费在线视频| 国产凹凸在线观看一区二区 | 在线欧美日韩| 成人黄色片视频网站| av毛片在线免费| 欧美日韩一区小说| 手机看片国产日韩| 奇米影视在线99精品| 日本视频精品一区| 美女100%一区| 日韩久久午夜影院| 手机看片久久久| 91色.com| 国产网站免费在线观看| 青青久久av| 8x拔播拔播x8国产精品| 午夜视频www| 精品久久久久久久久久久久久久| 怡红院一区二区| 国产精品大片| 国产不卡一区二区三区在线观看| 日韩少妇视频| 亚洲精品一区二区三区香蕉| 极品久久久久久| 福利视频网站一区二区三区| 成人区一区二区| 久久草在线视频| 97精品久久久| 欧美女v视频| 色天使色偷偷av一区二区 | 亚洲狠狠丁香婷婷综合久久久| 日本精品一区在线| 中文字幕午夜精品一区二区三区| 国产美女精品视频免费观看| 日韩免费啪啪| 91精品国产欧美一区二区18| 男人的天堂久久久| av中文字幕在线不卡| 情侣黄网站免费看| 色男人天堂综合再现| 亚洲综合国产精品| sm性调教片在线观看| 亚洲欧美三级伦理| 亚洲综合精品视频| 亚洲成人免费影院| 免费看污片的网站| 国产美女主播视频一区| 少妇无码av无码专区在线观看| 国产探花在线精品一区二区| 国产美女久久精品| av伦理在线| 色午夜这里只有精品| 午夜精品一二三区| 欧美性xxxxxxxxx| 尤物在线免费视频| 91亚洲午夜精品久久久久久| 久热精品在线观看视频| 国产综合视频| 日韩国产精品一区二区| 日韩欧美久久| 日韩av不卡电影| av毛片在线| 亚洲日本中文字幕| av网站在线免费看| 色噜噜夜夜夜综合网| 极品颜值美女露脸啪啪| 久久影音资源网| 奇米777在线视频| 久久精品1区| 中文字幕在线中文| 色999日韩| 看欧美日韩国产| 国内精品视频| 日韩免费不卡av| 后进极品白嫩翘臀在线播放| 国产一区二区三区在线免费观看| 亚洲乱码在线观看| 欧美日韩国产bt| 亚洲第一精品在线观看| 亚洲精品国产一区二区精华液| 无码人妻aⅴ一区二区三区69岛| 国产·精品毛片| 午夜剧场在线免费观看| 亚洲在线观看| 男人天堂手机在线视频| 久久久人成影片免费观看| 日韩免费av一区二区三区| 麻豆一区二区| 国产传媒欧美日韩| 欧美午夜在线播放| 国产免费一区二区三区在线能观看| 国产欧美一区二区三区精品酒店| 欧美激情精品久久久久久蜜臀| 欧美jizz18性欧美| 中文字幕欧美国内| 国产高清免费av在线| 亚洲久久久久久久久久| 午夜激情小视频| 亚洲国产另类久久精品| 欧美特级特黄aaaaaa在线看| 日韩精品一区二区三区在线观看| 99热精品在线播放| 欧美高清精品3d| 91国产免费视频| 欧美色区777第一页| 色老头一区二区| 91黄色在线观看| 无码人妻丰满熟妇区bbbbxxxx| 五月综合激情网| 日韩特黄一级片| 亚洲成年人影院| 国产大片中文字幕在线观看| 亚洲一级不卡视频| 久草视频手机在线观看| 一级日本不卡的影视| 久操免费在线视频| 午夜亚洲国产au精品一区二区| 久久精品一级片| 亚洲福利电影网| 日本一区二区三区免费视频| 偷窥国产亚洲免费视频| 欧美一级片免费在线观看| 精品magnet| 99精品人妻国产毛片| 色屁屁一区二区| 在线观看视频中文字幕| 欧美日韩精品一区二区三区蜜桃 | 欧美高清自拍一区| 日本伦理一区二区| 97高清免费视频| www.成人影院| 国产精品自拍网| 精品国产亚洲一区二区三区大结局 | 成人午夜免费电影| 影音先锋人妻啪啪av资源网站| 97精品久久久午夜一区二区三区 | 亚洲.国产.中文慕字在线| 国产成人自拍视频在线| 日本韩国欧美国产| 国产毛片一区二区三区va在线| 日韩一区二区免费在线观看| 人妻视频一区二区三区| 亚洲天堂男人天堂| 超碰免费公开在线| 69久久夜色精品国产69乱青草| 国产精品一区二区av影院萌芽| 国产欧美久久一区二区| 亚洲精品一二三**| 美乳视频一区二区| 一本一道久久a久久精品蜜桃| 六月婷婷在线视频| 免费观看在线综合| 欧美熟妇精品一区二区| 久久午夜老司机| 91 在线视频| 狠狠躁天天躁日日躁欧美| 亚洲视屏在线观看| 精品国产伦一区二区三区观看方式| 亚洲欧美日韩免费| 色综久久综合桃花网| 国产第一页在线视频| 国产精品久久久久久久av大片| 国产一区二区三区| 欧洲精品码一区二区三区免费看| 亚洲欧美网站在线观看| 91免费视频网站在线观看| 久久国产精品免费| 美国黄色a级片| 亚洲免费av高清| www.久久视频| 亚洲精品久久久久| caoporn免费在线| 国产精品成人av在线| 97品白浆高清久久久久久| 日产中文字幕在线精品一区| 一区在线视频| 欧洲在线免费视频| 欧美国产精品中文字幕| 国产成人免费观看视频| 日韩一区二区视频| 日韩伦理在线观看| 日本欧美精品在线| 国产一区丝袜| 久久久天堂国产精品| 麻豆国产精品视频| 免费污网站在线观看| 亚洲午夜久久久久| 性一交一乱一伧老太| 日韩中文字幕免费看| 黑人巨大精品欧美一区二区桃花岛| yellow视频在线观看一区二区| 欧美电影免费播放| 国产精品视频黄色| 26uuu国产一区二区三区| 国产中文字幕免费| 欧美videos中文字幕| 国产写真视频在线观看| 国产精品一区二区三区免费视频| 精品在线观看入口| 日韩在线视频在线观看| 成人动漫一区二区在线| 久久久久成人精品无码| 日韩一区二区三区精品视频| 成人看片免费| 亚洲一区中文字幕在线观看| 911久久香蕉国产线看观看| 亚洲天堂国产视频| 亚洲欧美在线高清| 国产欧美久久久| 久久人体大胆视频| 国产一区二区视频在线看| 五月天在线免费视频| 国产在线精品一区二区不卡了| 日韩一区二区不卡视频| 日韩一区二区三区四区五区六区| www国产在线观看| 99视频网站| 亚洲第一网站| 亚洲一区二区乱码| 欧美性黄网官网| 黄色小视频在线观看| 国产精品久久久久久久av电影 | 免费黄色一级网站| 中文字幕免费观看一区| 一女二男一黄一片| 不卡毛片在线看| 国产精品白浆| 欧美 日韩精品| 欧美国产1区2区| 国产精品伦理一区| 日韩视频一区在线| 日韩成人在线看| 少妇无码av无码专区在线观看| 久久久久久久久蜜桃| 中国老头性行为xxxx| 久久精品99久久久香蕉| 成人午夜网址| 国产精品无码av无码| 亚洲人成网站色在线观看| 国产 日韩 欧美 综合| 欧美专区在线观看| 99热在线成人| 国产精品亚洲一区二区无码| 日韩欧美亚洲成人| 免费人成在线观看播放视频| aa日韩免费精品视频一| 免费永久网站黄欧美| 蜜桃视频最新网址| 亚洲精品在线一区二区| 3d欧美精品动漫xxxx无尽| 一二三在线视频| 久久先锋影音av鲁色资源| 99久久精品日本一区二区免费| 91国产视频在线播放| 欧美丝袜激情| 日本美女视频网站| 欧洲生活片亚洲生活在线观看| 啪啪免费视频一区| 日本10禁啪啪无遮挡免费一区二区| 国产一区美女在线| www.色国产| 欧美激情一二三| 日韩午夜电影网| yy6080午夜| 91精品国产黑色紧身裤美女| 亚洲欧洲美洲av| 特级西西人体www高清大胆| 久久久久久日产精品| 亚洲成人久久精品| 国产精品久久一区| 国产亚洲精品bv在线观看| 欧美成人精品一区二区免费看片| 亚洲香蕉成人av网站在线观看| 4438全国亚洲精品观看视频| 一个色综合久久|