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

国产精品久久777777换脸| 亚洲色在线视频| 久久久久国产一区二区三区| av免费中文字幕| 性一交一乱一乱一视频| 成人一区二区| 99精品偷自拍| 欧美俄罗斯性视频| 亚洲色图欧美自拍| 秋霞午夜在线观看| 清纯唯美综合亚洲| 69堂精品视频| 亚洲一区二区三区精品视频 | 怡红院av久久久久久久| 久本草在线中文字幕亚洲| 亚洲免费观看视频| 亚洲a成v人在线观看| 日本女人性生活视频| 欧美与亚洲与日本直播| 久久精品一区二区三区不卡| 热久久这里只有| 制服丝袜第一页在线观看| 国产极品人妖在线观看| 国产高清不卡一区二区| 欧美成在线视频| 中文字幕一区二区三区四| aa国产成人| 91香蕉视频mp4| 欧美一级片一区| 国精产品一区一区三区免费视频| 天堂√中文最新版在线| 久久蜜桃一区二区| 国产精品日韩欧美综合| 永久免费看片直接| 91免费精品国偷自产在线在线| 一区二区理论电影在线观看| av在线不卡一区| 日韩成人一区二区三区| 亚洲小说图片视频| 欧美视频一区二区三区四区| 一区二区不卡在线| 欧美成人免费| 精品午夜一区二区三区在线观看| 欧美精品在线视频观看| 狂野欧美性猛交| 麻豆国产一区| 黄色91在线观看| 欧美亚洲另类久久综合| 亚洲精品一区二区二区| 这里只有精品在线| 亚洲激情中文字幕| 密臀av一区二区三区| 久cao在线| 成人国产精品免费网站| 国产成人福利网站| 欧美日韩在线观看免费| 亚州国产精品| 制服丝袜在线91| 国产原创精品在线| av日韩中文| 午夜欧美在线一二页| 亚洲国产高清国产精品| xxxx18国产| 石原莉奈一区二区三区在线观看| 精品国偷自产在线视频| 捆绑裸体绳奴bdsm亚洲| 成人黄色免费观看| 五月婷婷久久综合| 女人天堂av手机在线| 日本中文在线观看| 成人免费视频网站在线观看| 国产精品精品久久久久久| 久久国产精品波多野结衣av| 狠狠色狠狠色综合婷婷tag| 日韩一级片网站| 爱情岛论坛vip永久入口| 免费电影视频在线看| 国产精品久久久久久久浪潮网站 | 国产熟女一区二区三区四区| 激情欧美日韩| 日韩视频一区在线| 成人乱码一区二区三区av| 日韩精品久久久久久久软件91| 一本色道亚洲精品aⅴ| 国产女主播自拍| 日本视频在线观看| 亚洲精品老司机| 亚洲精品在线免费看| 麻豆电影在线播放| 亚洲成人激情综合网| 最新中文字幕久久| 亚洲精品传媒| 亚洲一区二区精品3399| 樱空桃在线播放| 亚洲国产高清福利视频| www.色.com| 99精品国产九九国产精品| 在线看国产日韩| 日韩欧美国产免费| а√天堂8资源中文在线| 亚洲精品亚洲人成人网在线播放| 无码人妻少妇伦在线电影| 桃色一区二区| 色综合久久久久久久| 亚洲欧美自拍另类日韩| 国产调教精品| 精品电影一区二区| 无码国产精品一区二区高潮| 3d动漫一区二区三区在线观看| 精品久久国产老人久久综合| 黑人性生活视频| 欧美猛男男男激情videos| 国产午夜精品久久久| 无码一区二区精品| 天天精品视频| 欧美精品在线网站| 正在播放亚洲精品| 麻豆精品视频在线观看视频| 国产人妖伪娘一区91| 艳妇乳肉豪妇荡乳av| 激情综合色综合久久综合| 九九九九精品九九九九| 偷拍自拍在线| 久久久久九九视频| 六月婷婷激情综合| 爱啪啪综合导航| 91精品欧美福利在线观看| 国产肥白大熟妇bbbb视频| 国产综合久久久| 海角国产乱辈乱精品视频| 黄色国产在线播放| 亚洲一区激情| 国产精品视频导航| 美女欧美视频在线观看免费 | 在线免费观看av网址| 国产91对白在线观看九色| 国产日韩精品推荐| 精品资源在线看| 中文字幕一区二区三区四区| 欧美少妇性生活视频| 巨大黑人极品videos精品| 爱情电影社保片一区| 一本一道波多野结衣一区二区 | 99国产精品免费网站| 久久人人爽人人爽爽久久| 中文字幕一区二区人妻痴汉电车| 久久久久国色av免费看影院| 激情网站五月天| 国产va免费精品观看精品视频| 51精品在线观看| 免费在线一级视频| 日本精品一级二级| 中日韩av在线播放| 96sao在线精品免费视频| 欧美视频网站| 一区二区在线观看免费视频播放| 日本888xxxx| 精品av一区二区| 日韩麻豆第一页| 日韩av大片在线观看| 久久综合伊人| 日韩久久久久久久| 欧美videos另类精品| 日韩欧美在线一区二区三区| 国产精品久久久久久久精| 国产乱理伦片在线观看夜一区| 久久精品日产第一区二区三区乱码| 免费在线播放电影| 亚洲激情国产精品| 精品乱码一区内射人妻无码| 国产精品每日更新在线播放网址| www精品久久| 日韩av黄色| 亚洲欧美国产va在线影院| 在线免费日韩av| 成人污视频在线观看| 欧美二区在线视频| 成人精品视频| 亚洲自拍偷拍一区| 日韩脚交footjobhdboots| 日韩一区二区三区免费看 | 天堂地址在线www| 视频在线不卡免费观看| 色噜噜久久综合伊人一本| 精品99在线观看| 国产在线视视频有精品| 欧美lavv| 91超碰在线播放| 亚洲精品国产精品自产a区红杏吧| 久久久无码精品亚洲国产| 久久久国产精品一区二区中文| 91精品久久久久久| 日韩三级免费| 在线成人av影院| 欧美xxxx精品| 丁香一区二区三区| 亚洲黄色av网址| 国产videos久久| 97人摸人人澡人人人超一碰| 日本成a人片在线观看| 日韩欧美国产一区在线观看| www.av免费| 久久国产精品一区二区| 日韩偷拍一区二区| avtt综合网| 国产精品偷伦视频免费观看国产| 欧美zzoo| 精品久久久久香蕉网| 真实新婚偷拍xxxxx| 亚洲va韩国va欧美va精品| 天堂在线中文视频| 免费在线看成人av| 亚洲午夜精品久久久久久浪潮| 91成人午夜| 久久久久亚洲精品国产| 国产毛片在线| 欧美日本一区二区| 日本免费网站视频| 91美女蜜桃在线| 麻豆短视频在线观看| 亚洲无吗在线| 精品国产乱码久久久久久郑州公司| 波多一区二区| 精品精品国产国产自在线| 日本不卡免费播放| 在线观看成人免费视频| 四虎永久在线精品| 亚洲美女视频一区| 亚洲精品国产精品乱码在线观看| 99精品视频在线观看| gogo亚洲国模私拍人体| 国产一区三区三区| 日本不卡一区二区在线观看| 手机精品视频在线观看| 国产精品久久..4399| 欧美日韩一区自拍| 白白操在线视频| 国产成人在线中文字幕| 亚洲影影院av| 国产美女精品视频免费播放软件| 久久久久国色av免费观看性色 | 91国内精品视频| 一区二区三区欧美激情| 一级免费黄色录像| 国产精品久久久久aaaa| 国产小视频你懂的| 亚洲图片欧美激情| 久久久久国产精品无码免费看| 国产精品亚洲午夜一区二区三区| 日日干夜夜操s8| 久久国内精品自在自线400部| 午夜视频你懂的| 久久99久久99| 中文字幕欧美日韩va免费视频| 九九爱精品视频| 国产精品magnet| 国产天堂视频在线观看| 午夜久久黄色| 欧美在线播放一区| 日韩精品成人在线观看| 51成人做爰www免费看网站| 日韩一区二区三区色| 99久久99久久| 国产精品一区二区中文字幕| 久久国产精品一区二区三区| 亚洲品质自拍| 亚州欧美一区三区三区在线 | 亚洲第一黄网| 欧美在线观看成人| 日韩电影在线观看一区| 日本a在线天堂| 亚洲国产一区二区三区高清| 亚洲一二区在线| 欧美99久久| 日韩 欧美 视频| 久久精品网址| 亚洲成人天堂网| 国产精品自拍三区| 亚洲国产精品成人综合久久久| 久久国产精品免费| 永久免费看片在线观看| 99久久99久久精品国产片果冻| 成人免费网站黄| 中文字幕综合网| 成人国产精品久久久网站| 国产精品视频在线看| 亚洲午夜久久久久久久久红桃| 国产三级精品视频| 91av在线免费| 国产精品乱码人人做人人爱 | 理论片大全免费理伦片| 久久超碰97人人做人人爱| 亚洲区 欧美区| 久久综合av免费| 九九精品视频免费| 欧美日韩亚洲国产一区| 国产无遮挡免费视频| 一区二区三区四区激情| 国产一级精品视频| 4438成人网| 久久经典视频| 久久在精品线影院精品国产| 一级毛片视频在线| 97色在线视频| 综合久草视频| 欧美亚洲免费高清在线观看| 欧美先锋影音| 国产精品视频分类| 99久久精品国产毛片| 婷婷激情四射网| 欧美中文字幕一二三区视频| 亚洲精品国偷拍自产在线观看蜜桃| 国产一区二区三区18| 国产一级片在线| 欧美精品videosex极品1| 高清在线一区| 欧美福利精品| 亚洲成色精品| 亚欧美一区二区三区| 国产日韩欧美精品在线| 亚洲第一精品在线观看| 555夜色666亚洲国产免| 无遮挡动作视频在线观看免费入口| 91精品国产777在线观看| 热三久草你在线| 97夜夜澡人人双人人人喊| 日韩a一区二区| 熟妇熟女乱妇乱女网站| 久久一区二区三区超碰国产精品| 久久久久久久久久久久国产精品| 成人免费在线观看入口| 日本一区二区三区久久| 亚洲三级av在线| 成人美女大片| 久久精品99| 一本久道综合久久精品| 免费观看成人在线视频| 91在线你懂得| 免费观看一区二区三区毛片 | 国产精品福利片| 宅男在线一区| 18禁免费无码无遮挡不卡网站| 成人av在线播放网址| 国产无遮挡aaa片爽爽| 亚洲第一精品久久忘忧草社区| 任你弄在线视频免费观看| 99精彩视频在线观看免费| 欧美精品日本| 欧美xxxx日本和非洲| 91在线精品一区二区| 日韩精品一区二区不卡| 亚洲成人网av| 在线天堂资源www在线污| 欧美另类网站| 丝袜亚洲另类欧美| 欧美精品日韩在线| 欧美精品日韩一区| 91小视频xxxx网站在线| 日本午夜精品理论片a级appf发布| 91天天综合| 亚洲精品国产精品国自产| 免费的成人av| 欧美国产日韩在线观看成人| 午夜国产精品一区| 四虎影视精品成人| 国产精品v片在线观看不卡| 狠狠做深爱婷婷综合一区| 日韩肉感妇bbwbbwbbw| 国产精品国产三级国产三级人妇| 国产精品一区二区黑人巨大| 欧美精品情趣视频| 欧美重口另类| 九九久久九九久久| 日韩精品国产精品| av资源在线免费观看| 欧美一区二区三区在| 成年人视频在线免费观看| 久久久在线视频| 亚洲欧美成人vr| av亚洲天堂网| 亚洲在线观看免费| 黄色av网站在线看| 91热福利电影| 日韩精品永久网址| 无套内谢丰满少妇中文字幕| 亚洲成人激情综合网| 97视频在线观看网站| 日韩美女在线播放| 91久久夜色精品国产按摩| 无码人妻一区二区三区一| 欧美性猛交xxxx乱大交| 日韩一区免费视频| 欧美国产在线视频| 女厕嘘嘘一区二区在线播放 | 波多野结衣啪啪| 中文字幕欧美亚洲| 另类尿喷潮videofree| 手机免费av片| 精品欧美aⅴ在线网站 | 亚洲欧美另类久久久精品|