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

帶你了解高并發大對象處理

開發 架構
常年浸潤在互聯網高并發中的同學,在寫代碼時會有一些約定俗成的規則:寧可將請求拆分成10個1秒的,也不去做一個耗時5秒的請求;寧可將對象拆成1000個10KB的,也盡量避免生成一個1MB的對象。

[[381736]]

本文轉載自微信公眾號「小姐姐味道」,作者姐養狗2號。轉載本文請聯系小姐姐味道公眾號。  

 常年浸潤在互聯網高并發中的同學,在寫代碼時會有一些約定俗成的規則:寧可將請求拆分成10個1秒的,也不去做一個耗時5秒的請求;寧可將對象拆成1000個10KB的,也盡量避免生成一個1MB的對象。

為什么?這是對于“大”的恐懼。

“大對象”,是一個泛化的概念,它可能存放在JVM中,也可能正在網絡上傳輸,也可能存在于數據庫中。

為什么大對象會影響我們的應用性能呢?有三點原因。

大對象占用的資源多,垃圾回收器要花一部分精力去對它進行回收;

大對象在不同的設備之間交換,會耗費網絡流量,以及昂貴的I/O;

對大對象的解析和處理操作是耗時的,對象職責不聚焦,就會承擔額外的性能開銷。

接下來,xjjdog將從數據的結構緯度和時間維度,來逐步看一下一些把對象變小,把操作聚焦的策略。

1. String的substring方法

我們都知道,String在Java中是不可變的,如果你改動了其中的內容,它就會生成一個新的字符串。

如果我們想要用到字符串中的一部分數據,就可以使用substring方法。

 

如圖所示,當我們需要一個子字符串的時候。substring生成了一個新的字符串,這個字符串通過構造函數的Arrays.copyOfRange函數進行構造。

這個函數在JDK7之后是沒有問題的,但在JDK6中,卻有著內存泄漏的風險。我們可以學習一下這個案例,來看一下大對象復用可能會產生的問題。

 

這是我從JDK官方的一張截圖。可以看到,它在創建子字符串的時候,并不只拷貝所需要的對象,而是把整個value引用了起來。如果原字符串比較大,即使不再使用,內存也不會釋放。

比如,一篇文章內容可能有幾MB,我們僅僅需要其中的摘要信息,也不得維持著整個的大對象。

  1. String content = dao.getArticle(id); 
  2. String summary=content.substring(0,100); 
  3. articles.put(id,summary); 

這對我們的借鑒意義是。如果你創建了比較大的對象,并基于這個對象生成了一些其他的信息。這個時候,一定要記得去掉和這個大對象的引用關系。

2. 集合大對象擴容

對象擴容,在Java中是司空見慣的現象。比如StringBuilder、StringBuffer,HashMap,ArrayList等。概括來講,Java的集合,包括List、Set、Queue、Map等,其中的數據都不可控。在容量不足的時候,都會有擴容操作。

我們先來看下StringBuilder的擴容代碼。

  1. void expandCapacity(int minimumCapacity) { 
  2.         int newCapacity = value.length * 2 + 2; 
  3.         if (newCapacity - minimumCapacity < 0) 
  4.             newCapacity = minimumCapacity; 
  5.         if (newCapacity < 0) { 
  6.             if (minimumCapacity < 0) // overflow 
  7.                 throw new OutOfMemoryError(); 
  8.             newCapacity = Integer.MAX_VALUE; 
  9.         } 
  10.         value = Arrays.copyOf(value, newCapacity); 

容量不夠的時候,會將內存翻倍,并使用Arrays.copyOf復制源數據。

下面是HashMap的擴容代碼,擴容后大小也是翻倍。它的擴容動作就復雜的多,除了有負載因子的影響,它還需要把原來的數據重新進行散列。由于無法使用native的Arrays.copy方法,速度就會很慢。

  1. void addEntry(int hash, K key, V value, int bucketIndex) { 
  2.         if ((size >= threshold) && (null != table[bucketIndex])) { 
  3.             resize(2 * table.length); 
  4.             hash = (null != key) ? hash(key) : 0; 
  5.             bucketIndex = indexFor(hash, table.length); 
  6.         } 
  7.         createEntry(hash, key, value, bucketIndex); 
  8.  
  9. void resize(int newCapacity) { 
  10.         Entry[] oldTable = table
  11.         int oldCapacity = oldTable.length; 
  12.         if (oldCapacity == MAXIMUM_CAPACITY) { 
  13.             threshold = Integer.MAX_VALUE; 
  14.             return
  15.         } 
  16.         Entry[] newTable = new Entry[newCapacity]; 
  17.         transfer(newTable, initHashSeedAsNeeded(newCapacity)); 
  18.         table = newTable; 
  19.         threshold = (int)Math.min(newCapacity * loadFactor, MAXIMUM_CAPACITY + 1); 

List的代碼大家可自行查看,也是阻塞性的,擴容策略是原長度的1.5倍。

由于集合在代碼中使用的頻率非常高,如果你知道具體的數據項上限,那么不妨設置一個合理的初始化大小。比如,HashMap需要1024個元素,需要7次擴容,會影響應用的性能。

但是要注意,像HashMap這種有負載因子的集合(0.75),初始化大小=需要的個數/負載因子+1。如果你不是很清楚底層的結構,那就不妨保持默認。

3. 保持合適的對象粒度

曾經碰到一個并發量非常高的業務系統,需要頻繁使用到用戶的基本數據。由于用戶的基本信息,都是存放在另外一個服務中,所以每次用到用戶的基本信息,都需要有一次網絡交互。更加讓人無法接受的是,即使是只需要用戶的性別屬性,也需要把所有的用戶信息查詢,拉取一遍。

 

為了加快數據的查詢速度,對數據進行了初步的緩存,放入到了redis中。查詢性能有了大的改善,但每次還是要查詢很多冗余數據。

原始的redis key是這樣設計的。

  1. type: string 
  2. key: user_${userid} 
  3. value: json 

這樣的設計有兩個問題:(1)查詢其中某個字段的值,需要把所有json數據查詢出來,并自行解析。(2)更新其中某個字段的值,需要更新整個json串,代價較高。

針對這種大粒度json信息,就可以采用打散的方式進行優化,使得每次更新和查詢,都有聚焦的目標。

接下來對redis中的數據進行了以下設計,采用hash結構而不是json結構:

  1. type: hash 
  2. key: user_${userid} 
  3. value: {sex:f, id:1223, age:23} 

這樣,我們使用hget命令,或者hmget命令,就可以獲取到想要的數據,加快信息流轉的速度。

4. Bitmap把對象變小

還能再進一步優化么?比如,我們系統中就頻繁用到了用戶的性別數據,用來發放一些禮品,推薦一些異性的好友,定時循環用戶做一些清理動作等。或者,存放一些用戶的狀態信息,比如是否在線,是否簽到,最近是否發送信息等,統計一下活躍用戶等。

對是、否這兩個值的操作,就可以使用Bitmap這個結構進行壓縮。

如代碼所示,通過判斷int中的每一位,它可以保存32個boolean值!

  1. int a= 0b0001_0001_1111_1101_1001_0001_1111_1101; 

Bitmap就是使用Bit進行記錄的數據結構,里面存放的數據不是0就是1。Java中的相關結構類,就是java.util.BitSet。BitSet底層是使用long數組實現的,所以它的最小容量是64。

10億的boolean值,只需要128MB的內存。下面既是一個占用了256MB的用戶性別的判斷邏輯,可以涵蓋長度為10億的id。

  1. static BitSet missSet = new BitSet(010_000_000_000); 
  2. static BitSet sexSet = new BitSet(010_000_000_000); 
  3. String getSex(int userId) { 
  4.     boolean notMiss = missSet.get(userId); 
  5.     if (!notMiss) { 
  6.         //lazy fetch 
  7.         String lazySex = dao.getSex(userId); 
  8.         missSet.set(userId, true); 
  9.         sexSet.set(userId, "female".equals(lazySex)); 
  10.     } 
  11.     return sexSet.get(userId) ? "female" : "male"

這些數據,放在堆內內存中,還是過大了。幸運的是,Redis也支持Bitmap結構,如果內存有壓力,我們可以把這個結構放到redis中,判斷邏輯也是類似的。

這樣的問題還有很多:給出一個1GB內存的機器,提供60億int數據,如何快速判斷有哪些數據是重復的?大家可以類比思考一下。

Bitmap是一個比較底層的結構,在它之上還有一個叫做布隆過濾器的結構(Bloom Filter)。布隆過濾器可以判斷一個值不存在,或者可能存在。

 

相比較Bitmap,它多了一層hash算法。既然是hash算法,就會有沖突,所以有可能有多個值落在同一個bit上。

Guava中有一個BloomFilter的類,可以方便的實現相關功能。

5. 數據的冷熱分離

上面這種優化方式,本質上也是把大對象變成小對象的方式,在軟件設計中有很多類似的思路。像一篇新發布的文章,頻繁用到的是摘要數據,就不需要把整個文章內容都查詢出來;用戶的feed信息,也只需要保證可見信息的速度,而把完整信息存放在速度較慢的大型存儲里。

數據除了橫向的結構緯度,還有一個縱向的時間維度。對時間維度的優化,最有效的方式就是冷熱分離。

所謂熱數據,就是靠近用戶的,被頻繁使用的數據,而冷數據是那些訪問頻率非常低,年代非常久遠的數據。同一句復雜的SQL,運行在幾千萬的數據表上,和運行在幾百萬的數據表上,前者的效果肯定是很差的。所以,雖然你的系統剛開始上線時速度很快,但隨著時間的推移,數據量的增加,就會漸漸變得很慢。

冷熱分離是把數據分成兩份。如圖,一般都會保持一份全量數據,用來做一些耗時的統計操作。

 

下面簡單介紹一下冷熱分離的三種方案。

(1)數據雙寫。把對冷熱庫的插入、更新、刪除操作,全部放在一個統一的事務里面。由于熱庫(比如MySQL)和冷庫(比如Hbase)的類型不同,這個事務大概率會是分布式事務。在項目初期,這種方式是可行的,但如果是改造一些遺留系統,分布式事務基本上是改不動的。我通常會把這種方案直接廢棄掉。

(2)寫入MQ分發。通過MQ的發布訂閱功能,在進行數據操作的時候,先不落庫,而是發送到MQ中。單獨啟動消費進程,將MQ中的數據分別落到冷庫、熱庫中。使用這種方式改造的業務,邏輯非常清晰,結構也比較優雅。像訂單這種結構比較清晰、對順序性要求較低的系統,就可以采用MQ分發的方式。但如果你的數據庫實體量非常的大,用這種方式就要考慮程序的復雜性了。

(3)使用binlog同步 針對于MySQL,就可以采用Binlog的方式進行同步。使用Canal組件,可持續獲取最新的Binlog數據,結合MQ,可以將數據同步到其他的數據源中。

End

關于大對象,我們可以再舉兩個例子。

像我們常用的數據庫索引,也是一種對數據的重新組織、加速。B+ tree可以有效的減少數據庫與磁盤交互的次數,它通過類似B+ tree的數據結構,將最常用的數據進行索引,存儲在有限的存儲空間中。

還有在RPC中常用的序列化。有的服務是采用的SOAP協議的WebService,它是基于XML的一種協議,內容大傳輸慢,效率低下。現在的Web服務中,大多數是使用json數據進行交互的,json的效率相比SOAP就更高一些。另外,大家應該都聽過google的protobuf,由于它是二進制協議,而且對數據進行了壓縮,性能是非常優越的。protobuf對數據壓縮后,大小只有json的1/10,xml的1/20,但是性能卻提高了5-100倍。protobuf的設計是值得借鑒的,它通過tag|leng|value三段對數據進行了非常緊湊的處理,解析和傳輸速度都特別快。

針對于大對象,我們有結構緯度的優化和時間維度的優化兩種方法。從結構緯度來說,通過把對象切分成合適的粒度,可以把操作集中在小數據結構上,減少時間處理成本;通過把對象進行壓縮、轉換,或者提取熱點數據,就可以避免大對象的存儲和傳輸成本。從時間緯度來說,就可以通過冷熱分離的手段,將常用的數據存放在高速設備中,減少數據處理的集合,加快處理速度。

作者簡介:小姐姐味道 (xjjdog),一個不允許程序員走彎路的公眾號。聚焦基礎架構和Linux。十年架構,日百億流量,與你探討高并發世界,給你不一樣的味道。我的個人微信xjjdog0,歡迎添加好友,進一步交流。

責任編輯:武曉燕 來源: 小姐姐味道
相關推薦

2019-03-26 10:50:22

Python面向對象編程語言

2021-08-05 17:59:45

Vue 3.0前端代碼

2018-06-08 08:50:35

編程語言并發編程

2014-03-27 15:34:55

Android組件Activity

2023-07-06 14:40:38

2023-05-30 15:06:21

JavaScript屬性開發

2020-10-22 09:08:34

JavaScript

2024-09-02 14:07:05

2021-07-02 10:00:50

JavaScriptObject 函數

2023-08-27 15:18:17

JavaScriptRegExp

2024-07-02 14:14:18

2023-07-25 16:06:57

JavaScript對象

2024-05-29 12:13:50

2010-07-05 16:20:32

NetBEUI協議

2019-09-27 09:40:06

ElvishShellLinux

2022-09-26 11:30:40

MQTT協議客戶端協議

2023-01-05 07:52:36

高可用架構消息隊列

2012-05-30 15:40:16

大并發并發解決方案

2020-08-27 08:17:05

緩存高并發系統

2023-10-23 11:40:44

SpringBootDisruptor
點贊
收藏

51CTO技術棧公眾號

小毛片在线观看| 中文字幕在线乱| 中文字幕av资源| 亚洲精品一区二区在线看| 欧美一级一区二区| 成年人视频观看| 91在线网址| 成人免费三级在线| 国产精品入口免费视频一| 日本a级片视频| 美女久久久久| 欧美成人三级在线| 少妇激情一区二区三区| 影音先锋在线播放| 国产色婷婷亚洲99精品小说| 99精品在线直播| 波多野结衣一区二区在线| 综合激情婷婷| 国产一区二区久久精品| 91精品啪在线观看国产| 色综合视频一区二区三区44| 午夜精品影院在线观看| 天堂v在线视频| 内衣办公室在线| 成人激情免费网站| 2019国产精品视频| 在线观看xxxx| 久久精品91| 国内精品免费午夜毛片| 成年人视频软件| 自拍亚洲一区| 亚洲黄色在线观看| 无码人妻一区二区三区精品视频| 成人精品高清在线视频| 色婷婷久久一区二区三区麻豆| 国产xxxx振车| fc2ppv国产精品久久| 中文字幕av一区二区三区高| 欧美精品欧美精品| 免费观看的毛片| 国产高清在线观看免费不卡| 国产日产欧美a一级在线| 久久久久久亚洲av无码专区| 免费在线成人| 欧美中在线观看| 91九色丨porny丨肉丝| 精品1区2区3区4区| 久久久久久中文字幕| 青青草成人免费| 自拍视频亚洲| 久久6免费高清热精品| 全网免费在线播放视频入口 | 手机在线理论片| 亚洲福利电影网| 自拍日韩亚洲一区在线| av中文在线资源| 午夜欧美视频在线观看| 中文字幕精品一区二区精品绿巨人| 国产精品久久久久久久久久久久| 国产午夜性春猛交ⅹxxx| 亚洲午夜黄色| 久久久噜噜噜久久| 国产无套内射又大又猛又粗又爽| 午夜欧美精品| 欧美激情国产精品| 日本高清www免费视频| 日韩午夜激情| 欧美一级淫片aaaaaaa视频| 久久国产视频精品| 久久一日本道色综合久久| 日本sm极度另类视频| 亚洲中文一区二区| 看电视剧不卡顿的网站| 91免费国产视频| 亚洲精品911| 成人av在线影院| 欧美一区二区三区四区在线观看地址| 国产片在线观看| 亚洲欧洲日本在线| 亚洲乱码日产精品bd在线观看| 国产91在线免费观看| 亚洲承认视频| 6080yy午夜一二三区久久| 在线播放黄色av| 99精品国产一区二区三区2021| 亚洲国产成人av在线| 蜜桃传媒一区二区亚洲| 91一区二区三区四区| 久久97精品久久久久久久不卡| 日本熟伦人妇xxxx| 日本欧美一区二区三区| 亚洲在线第一页| 午夜小视频免费| 中文字幕免费在线观看视频一区| 女同性恋一区二区| 台湾佬中文娱乐网欧美电影| 欧美日本国产视频| 免费的av网站| 偷偷www综合久久久久久久| 久久久久久久久久久网站| 无码人妻久久一区二区三区| 国产麻豆精品久久一二三| 久久国产一区二区| 动漫一区在线| 一本色道久久综合精品竹菊| 九九九久久久久久久| 欧美美乳视频| 欧美激情videos| 制服丝袜在线一区| 99久久精品免费| 日本三级中文字幕在线观看| 免费成人美女女| 精品久久久久99| 国产第一页精品| 国产精品亚洲欧美| 亚洲最大av在线| 中国日本在线视频中文字幕| 午夜国产精品影院在线观看| 手机在线国产视频| 国产免费av一区二区三区| 欧美美女操人视频| 一区二区三区在线免费观看视频| 91免费在线看| av在线播放亚洲| 日韩成人18| 最近2019年好看中文字幕视频| 日韩视频在线观看一区| 成人综合激情网| 国产精品无码乱伦| 国产欧美在线观看免费| 亚洲免费电影一区| 五月婷婷中文字幕| 99久久精品免费看国产免费软件| 加勒比海盗1在线观看免费国语版| 本网站久久精品| 亚洲精品影视在线观看| 日本一区二区不卡在线| 国产不卡在线播放| 亚洲免费视频播放| 91丨精品丨国产| 日韩亚洲欧美中文高清在线| 亚洲最大成人av| 国产精品久久久久影视| 男人的天堂日韩| 国产欧美一区二区精品久久久| 2019国产精品自在线拍国产不卡| 国产综合视频在线| 亚洲成人第一页| 免费无码一区二区三区| 亚洲精品黄色| 精品欧美一区二区三区久久久| 678在线观看视频| 日韩av在线免费观看一区| 国产精品变态另类虐交| 本田岬高潮一区二区三区| 男女激情无遮挡| 亚洲老女人视频免费| 欧洲成人免费aa| 国产在线网站| 欧美日韩国产免费一区二区| 美国一级黄色录像| 久久精品国产久精国产| 精品91一区二区三区| 免费精品一区| 久久久久久尹人网香蕉| 五月天婷婷社区| 欧美性xxxxx极品娇小| 国产sm调教视频| 久久99精品久久久久| 伊人再见免费在线观看高清版| 超碰地址久久| 日本欧美在线视频| 亚洲欧美视频一区二区| 日韩视频免费观看高清在线视频| 久久久久香蕉视频| 久久女同性恋中文字幕| 手机在线成人免费视频| 中文av一区| 国产在线精品二区| 精品123区| 欧美乱人伦中文字幕在线| 色网站免费观看| 欧美午夜精品久久久久久超碰| 国产稀缺精品盗摄盗拍| 不卡免费追剧大全电视剧网站| 久久久噜噜噜www成人网| 成人激情在线| 99视频免费观看| 亚洲校园激情春色| 日韩有码在线播放| 无码国产精品96久久久久| 欧美性猛交xxxx乱大交退制版 | 一区二区三区不卡视频| 国产成人精品无码片区在线| 七七婷婷婷婷精品国产| 日本一道在线观看| 国产99亚洲| 91在线在线观看| 日韩电影网站| 欧美极品少妇xxxxⅹ免费视频| 撸视在线观看免费视频| 日韩视频国产视频| 国产亚洲久一区二区| 亚洲福中文字幕伊人影院| 蜜桃av免费观看| 99在线视频精品| 中文字幕第22页| 久久人人97超碰国产公开结果| 99视频精品全部免费看| 国产亚洲一区二区三区不卡| 不卡日韩av| 国产一区二区色噜噜| 欧美中文字幕在线观看| 毛片网站在线看| 久久久av电影| 高清国产福利在线观看| 日韩电影大片中文字幕| 亚洲精品视频网| 91 com成人网| 在线观看免费观看在线| 日韩欧美一区视频| 国产大片中文字幕| 亚洲精品成人在线| 国产又色又爽又高潮免费| 久久综合色婷婷| 精品一区二区视频在线观看| 国产高清视频一区| 网站在线你懂的| 美女www一区二区| 免费激情视频在线观看| 国产精品普通话对白| 欧美性猛交内射兽交老熟妇| 欧美在线首页| 日本免费黄色小视频| 99成人在线视频| 杨幂一区欧美专区| 99久久精品网站| 久久精品国产亚洲AV熟女| 亚洲欧美综合国产精品一区| 在线观看日本一区| 欧美日韩色图| 午夜久久资源| 偷拍自拍在线视频| 日韩精品一区二区三区视频播放| 91亚洲欧美激情| 欧美视频三区在线播放| 国产裸体美女永久免费无遮挡| 色爱区综合激月婷婷| 天天干天天操天天爱| 久久99精品国产99久久| aaaa欧美| 国产精品色视频| 日本视频精品一区| 57pao成人永久免费| 国产精品一二区| 全球最大av网站久久| 国产精品久久久久9999| 欧美日韩123区| 国产精品成熟老女人| 日本精品另类| 国产视频999| 最新国产一区二区| 国产91视觉| 天堂中文av在线| 欧美亚韩一区| 精品无码国产一区二区三区av| 国内精品久久久久久久97牛牛| 999久久欧美人妻一区二区| 国内揄拍国内精品久久| 黄页免费在线观看视频| 久久久精品五月天| 亚洲精品久久久中文字幕| 国产真实精品久久二三区| 又色又爽又黄18网站| av动漫一区二区| 丰满的亚洲女人毛茸茸| 亚洲欧美日韩在线| 日产电影一区二区三区| 在线免费不卡视频| 国产日本精品视频| 亚洲成人av在线| 成人jjav| 欧美成人精品在线| 中文字幕人成乱码在线观看| 国产精品久久av| 欧美日韩一区二区三区在线看| www.99re6| 亚洲香蕉伊在人在线观| 欧美一区二区三区网站| 欧美肥妇毛茸茸| 无码精品在线观看| 色多多国产成人永久免费网站| 男女视频在线| 国产精品xxx视频| 国产96在线亚洲| 亚洲第一在线综合在线| 精品动漫av| 免费看污黄网站在线观看| 久久久激情视频| 久久久久久久久久网站| 欧美性少妇18aaaa视频| 91久久久久国产一区二区| 亚洲激情在线观看| 毛片av在线| 国产www精品| 一区二区三区亚洲变态调教大结局| 欧美精品一区三区在线观看| 亚洲理论电影网| 亚洲精品久久久蜜桃| 蜜乳av中文字幕| 亚洲综合一区在线| 中日精品一色哟哟| 亚洲国产一区二区三区在线观看 | 国产69精品久久777的优势| 欧美亚一区二区三区| 亚洲一区二区视频在线| 亚洲综合一区中| 国产亚洲精品久久久久动| 3344国产永久在线观看视频| 91久久国产精品| 久久一区二区三区喷水| 日本三级免费观看| 懂色av一区二区三区蜜臀| 5566中文字幕| 欧美午夜免费电影| 嫩草在线播放| 人人爽久久涩噜噜噜网站| 欧美一区 二区| 国产一线二线三线女| 国产精品456| 最新一区二区三区| 在线播放一区二区三区| 日本在线免费网| 国产精品亚洲网站| 成人激情免费视频| 日韩av片网站| 亚洲国产精品v| 中文字幕一区二区三区免费看 | 精品国产aaa| 色久优优欧美色久优优| 日本国产在线| 日本高清视频一区| 天堂在线精品| 99福利在线观看| 久久你懂得1024| 亚洲天堂视频在线播放| 在线成人中文字幕| 国产激情欧美| 正在播放一区| 国产一区二区三区蝌蚪| av激情在线观看| 欧美成人国产一区二区| 久久免费电影| 久久精品国产综合精品| 99成人免费视频| 少妇饥渴放荡91麻豆| 色婷婷综合久久久中文一区二区| 狠狠v欧美ⅴ日韩v亚洲v大胸 | www.久久撸.com| vam成人资源在线观看| 日本高清xxxx| 成人午夜视频网站| 日韩污视频在线观看| 亚洲美女又黄又爽在线观看| 懂色aⅴ精品一区二区三区| 裸体大乳女做爰69| 粉嫩一区二区三区在线看| 奇米影视第四色777| 亚洲欧洲日产国码av系列天堂| 色豆豆成人网| 少妇高潮流白浆| 成人av网站免费| 在线免费观看av网址| xvideos成人免费中文版| 日韩视频在线直播| 一区二区传媒有限公司| 欧美国产一区在线| 国产熟女一区二区丰满| 911国产网站尤物在线观看| 精品久久久久久久久久久下田| 亚洲妇熟xx妇色黄蜜桃| 午夜精品在线看| a√在线中文网新版址在线| 91国产在线播放| 免费欧美在线| 唐朝av高清盛宴| 亚洲欧美中文字幕在线一区| 成人免费91| 92看片淫黄大片一级| 亚洲人吸女人奶水| 日本电影一区二区在线观看 | 精品国产午夜肉伦伦影院| 五月天婷婷激情视频| 亚洲在线成人精品| 成人动漫在线播放| 精品免费一区二区三区蜜桃| 久久精品99国产精品日本| 日韩欧美亚洲视频| 久久精品男人天堂| 国产在线日韩精品|