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

分布式緩存Memcached的Java客戶端優化歷程

開發 后端 分布式
這是一篇比較老的文章了,對Memcached的JAVA客戶端優化做了非常詳細的總結。讓我們認識到,要深入了解一樣事物,必須深入去研究,而不能僅僅停留在使用的層面上。

這是一篇比較老的文章了,對Memcached的JAVA客戶端優化做了非常詳細的總結。讓我們認識到,要深入了解一樣事物,必須深入去研究,而不能僅僅停留在使用的層面上。Memcached JAVA客戶端優化過程原文如下:

Memcached 是什么?

Memcached是一種集中式Cache,支持分布式橫向擴展。這里需要解釋說明一下,很多開發者覺得Memcached是一種分布式緩存系統, 但是其實Memcached服務端本身是單實例的,只是在客戶端實現過程中可以根據存儲的主鍵做分區存儲,而這個區就是Memcached服務端的一個或 者多個實例,如果將客戶端也囊括到Memcached中,那么可以部分概念上說是集中式的。其實回顧一下集中式的構架,無非兩種情況:一是節點均衡的網狀 (JBoss Tree Cache),利用JGroup的多播通信機制來同步數據;二是Master-Slaves模式(分布式文件系統),由Master來管理Slave,比 如如何選擇Slave,如何遷移數據等都是由Master來完成,但是Master本身也存在單點問題。下面再總結幾個它的特點來理解一下其優點和限制。

內存存儲:不言而喻,速度快,但對于內存的要求高。這種情況對CPU要求很低,所以常常采用將 Memcached服務端和一些CPU高消耗內存、低消耗應用部署在一起。(我們的某個產品正好有這樣的環境,我們的接口服務器有多臺,它們對CPU要求 很高——原因在于WS-Security的使用,但是對于內存要求很低,因此可以用作Memcached的服務端部署機器)。

集中式緩存(Cache):避開了分布式緩存的傳播問題,但是需要非單點來保證其可靠性,這個就是后面集成中所作的集群(Cluster)工作,可以將多個Memcached作為一個虛擬的集群,同時對于集群的讀寫和普通的Memcached的讀寫性能沒有差別。

分布式擴展:Memcached很突出的一個優點就是采用了可分布式擴展的模式。可以將部署在一臺機器上的多個 Memcached服務端或者部署在多個機器上的Memcached服務端組成一個虛擬的服務端,對于調用者來說則是完全屏蔽和透明的。這樣做既提高了單 機的內存利用率,也提供了向上擴容(Scale Out)的方式。

Socket通信:這兒需要注意傳輸內容的大小和序列化的問題,雖然Memcached通常會被放置到內網作為 緩存,Socket傳輸速率應該比較高(當前支持TCP和UDP兩種模式,同時根據客戶端的不同可以選擇使用NIO的同步或者異步調用方式),但是序列化 成本和帶寬成本還是需要注意。這里也提一下序列化,對于對象序列化的性能往往讓大家頭痛,但是如果對于同一類的Class對象序列化傳輸,第一次序列化時 間比較長,后續就會優化,也就是說序列化最大的消耗不是對象序列化,而是類的序列化。如果穿過去的只是字符串,這種情況是最理想的,省去了序列化的操作, 因此在Memcached中保存的往往是較小的內容。

特殊的內存分配機制:首先要說明的是Memcached支持最大的存儲對象為1M。它的內存分配比較特殊,但是 這樣的分配方式其實也是基于性能考慮的,簡單的分配機制可以更容易回收再分配,節省對CPU的使用。這里用一個酒窖做比來說明這種內存分配機制,首先在 Memcached啟動的時候可以通過參數來設置使用的所有內存——酒窖,然后在有酒進入的時候,首先申請(通常是1M)的空間,用來建酒架,而酒架根據 這個酒瓶的大小將自己分割為多個小格子來安放酒瓶,并將同樣大小范圍內的酒瓶都放置在一類酒架上面。例如20厘米半徑的酒瓶放置在可以容納20-25厘米 的酒架A上,30厘米半徑的酒瓶就放置在容納25-30厘米的酒架B上?;厥諜C制也很簡單,首先新酒入庫,看看酒架是否有可以回收的地方,如果有就直接使 用,如果沒有則申請新的地方,如果申請不到,就采用配置的過期策略。從這個特點來看,如果要放的內容大小十分離散,同時大小比例相差梯度很明顯的話,那么 可能對于空間使用來說效果不好,因為很可能在酒架A上就放了一瓶酒,但卻占用掉了一個酒架的位置。

緩存機制簡單:有時候很多開源項目做的面面俱到,但到最后因為過于注重一些非必要的功能而拖累了性能,這里提到 的就是Memcached的簡單性。首先它沒有什么同步,消息分發,兩階段提交等等,它就是一個很簡單的緩存,把東西放進去,然后可以取出來,如果發現所 提供的Key沒有命中,那么就很直白地告訴你,你這個Key沒有任何對應的東西在緩存里,去數據庫或者其他地方??;當你在外部數據源取到的時候,可以直接 將內容置入到緩存中,這樣下次就可以命中了。這里介紹一下同步這些數據的兩種方式:一種是在你修改了以后立刻更新緩存內容,這樣就會即時生效;另一種是說 容許有失效時間,到了失效時間,自然就會將內容刪除,此時再去取的時候就不會命中,然后再次將內容置入緩存,用來更新內容。后者用在一些實時性要求不高, 寫入不頻繁的情況。

客戶端的重要性:Memcached是用C寫的一個服務端,客戶端沒有規定,反正是Socket傳輸,只要語言 支持Socket通信,通過Command的簡單協議就可以通信。但是客戶端設計的合理十分重要,同時也給使用者提供了很大的空間去擴展和設計客戶端來滿 足各種場景的需要,包括容錯、權重、效率、特殊的功能性需求和嵌入框架等等。

幾個應用點:小對象的緩存(用戶的Token、權限信息、資源信息);小的靜態資源緩存;SQL結果的緩存(這部分如果用的好,性能提高會相當大,同時由于Memcached自身提供向上擴容,那么對于數據庫向上擴容的老大難問題無疑是一劑好藥);ESB消息緩存。

優化MemCached系統Java客戶端的原因

MemCached在大型網站被應用得越來越廣泛,不同語言的客戶端也都在官方網站上有提供,但是Java開發者的選擇并不多。由于現在的 MemCached服務端是用C寫的,因此我這個C不太熟悉的人也就沒有辦法去優化它。當然對于它的內存分配機制等細節還是有所了解,因此在使用的時候也 會十分注意,這些文章在網絡上有很多。這里我重點介紹一下對于MemCache系統的Java客戶端優化的兩個階段。

第一階段:封裝Whalin

第一階段主要是在官方推薦的Java客戶端之一whalin開源實現基礎上做再次封裝。

  1. 緩存服務接口化:定義了IMemCache接口,在應用部分僅僅只是使用接口,為將來替換緩存服務實現提供基礎。
  2. 使用配置代替代碼初始化客戶端:通過配置客戶端和SocketIO Pool屬性,直接交由CacheManager來維護Cache Client Pool的生命周期,便于單元測試。
  3. KeySet的實現:對于MemCached來說本身是不提供KeySet的方法的,在接口封裝初期,同事向我提出這個需求的時候,我個 人覺得也是沒有必要提供,因為緩存輪詢是比較低效的,同時這類場景,往往可以去數據源獲取KeySet,而不是從MemCached去獲取。但是SIP的 一個場景的出現,讓我不得不去實現了KeySet。
    SIP在作服務訪問頻率控制的時候需要記錄在控制間隔期內的訪問次數和流量,此時由于是集群,因此數據必須放在集中式的存儲或者緩存中,數據庫肯定撐不住 這樣大數據量的更新頻率,因此考慮使用Memcached的很出彩的操作——全局計數器 (storeCounter,getCounter,inc,dec),但是在檢查計數器的時候如何去獲取當前所有的計數器?我曾考慮使用DB或者文件, 但是效率有問題,同時如果放在一個字段中的話,還會存在并發問題。因此不得不實現了KeySet,在使用KeySet的時候有一個參數,類型是 Boolean,這個字段的存在是因為在Memcached中數據的刪除并不是直接刪除,而是標注一下,這樣會導致實現keySet的時候取出可能已經刪 除的數據。如果對于數據嚴謹性要求低,速度要求高,那么不需要再去驗證Key是否真的有效,而如果要求Key必須正確存在,就需要再多一次的輪詢查找。
  4. 集群的實現:Memcached作為集中式緩存,存在著集中式的致命問題:單點問題。雖然Memcached支持多Instance分布 在多臺機器上,但僅僅只是解決了數據全部丟失的問題,當其中一臺機器出錯以后,還是會導致部分數據的丟失,一個籃子掉在地上還是會把部分的雞蛋打破。因此 就需要實現一個備份機制,能夠保證Memcached在部分失效以后,數據還能夠依然使用,當然大家很多時候都用緩存不命中就去數據源獲取的策略。然而在 SIP的場景中,如果部分信息找不到就去數據庫查找,很容易將SIP弄垮,因此SIP對于Memcached中的數據認為是可信的,做集群也是必要的。
  5. LocalCache結合Memcached使用,提高數據獲取效率:在第一次壓力測試過程中,發現和原先預料的一 樣,Memcached并不是完全無損失的,Memcached是通過Socket數據交互來進行通信的,因此機器的帶寬,網絡IO,Socket連接數 都是制約Memcached發揮其作用的障礙。Memcache的一個突出優點就是Timeout的設置,也就是可以對放進去的數據設置有效期,從而在一 定的容忍時間內對那些不敏感的數據就可以不去更新,以提高效率。根據這個思想,其實在集群中的每一個Memcached客戶端也可以使用本地的緩存,來存 儲獲取過的數據,設置一定的失效時間,來減少對于Memcached的訪問次數,提高整體性能。

因此,在每一個客戶端中都內置了一個有超時機制的本地緩存(采用Lazy Timeout機制),在獲取數據的時候,首先在本地查詢數據是否存在,如果不存在則再向Memcache發起請求,獲得數據以后,將其緩存在本地,并設置有效時間。方法定義如下:

  1. /** 
  2.   * 降低memcache的交互頻繁造成的性能損失,因此采用本地cache結合memcache的方式 
  3.   * @param key 
  4.   * @param 本地緩存失效時間單位秒 
  5.   * @return 
  6. **/ 
  7. public Object get(String key,int localTTL); 

第二階段:優化

第一階段的封裝基本上已經可以滿足現有的需求,也被自己的項目和其他產品線所使用,但是不經意的一句話,讓我開始了第二階段的優化。有同事告訴我說 Memcached客戶端的SocketIO代碼里面有太多的Synchronized(同步),多多少少會影響性能。雖然過去看過這部分代碼,但是當時 只是關注里面的Hash算法。根據同事所說的回去一看,果然有不少的同步,可能是作者當時寫客戶端的時候JDK版本較老的緣故造成的,現在 Concurrent包被廣泛應用,因此優化并不是一件很難的事情。但是由于原有Whalin沒有提供擴展的接口,因此不得不將Whalin除了 SockIO,其余全部納入到封裝過的客戶端的設想,然后改造SockIO部分。

結果也就有了這個放在Google上的開源客戶端:http://code.google.com/p/memcache-client-forjava/。

  1. 優化Synchronized:在原有代碼中SockIO的資源池被分成三個池(普通Map實現),——Free(閑)、Busy(忙) 和Dead(死鎖),然后根據SockIO使用情況來維護這三個資源池。優化方式為首先簡化資源池,只有一個資源池,設置一個狀態池,在變更資源狀態的過 程時僅僅變更資源池中的內容。然后用ConcurrentMap來替代Map,同時使用putIfAbsent方法來簡化Synchronized,具體 的代碼可參見Google上該軟件的源文件。
  2. 原以為這次優化后,效率應該會有很大的提高,但是在初次壓力測試后發現,并沒有明顯的提高,看來有其他地方的耗時遠遠大于連接池資源維 護,因此用JProfiler作了性能分析,發現了最大的一個瓶頸:Read數據部分。原有設計中讀取數據是按照單字節讀取,然后逐步分析,為的僅僅就是 遇到協議中的分割符可以識別。但是循環Read單字節和批量分頁Read性能相差很大,因此我內置了讀入緩存頁(可設置大?。?,然后再按照協議的需求去讀 取和分析數據,結果顯示效率得到了很大的提高。具體的數據參見最后部分的壓力測試結果。

上面兩部分的工作不論是否提升了性能,但是對于客戶端本身來說都是有意義的,當然提升性能給應用帶來的吸引力更大。這部分細節內容可以參看代碼實現部分,對于調用者來說完全沒有任何功能影響,僅僅只是性能。

壓力測試比較

在這個壓力測試之前,其實已經做過很多次壓力測試了,測試中的數據本身并沒有衡量Memcached的意義,因為測試是使用我自己的機器,其中性 能、帶寬、內存和網絡IO都不是服務器級別的,這里僅僅是將使用原有的第三方客戶端和改造后的客戶端作一個比較。場景就是模擬多用戶多線程在同一時間發起 緩存操作,然后記錄下操作的結果。

Client版本在測試中有兩個:2.0和2.2。2.0是封裝調用Whalin Memcached Client 2.0.1版本的客戶端實現。2.2是使用了新SockIO的無第三方依賴的客戶端實現。checkAlive指的是在使用連接資源以前是否需要驗證連接 資源有效(發送一次請求并接受響應),因此啟用該設置對于性能來說會有不少的影響,不過建議還是使用這個檢查。

單個緩存服務端實例的各種配置和操作下比較:

緩存配置 用戶 操作 客戶端 版本 總耗時(ms) 單線程耗時(ms) 提高處理能力百分比
checkAlive 100 1000 put simple obj
1000 get simple obj
2.0
2.2
13242565
7772767
132425
77727
+41.3%
No checkAlive 100 1000 put simple obj
1000 put simple obj
2.0
2.2
7200285
4667239
72002
46672
+35.2%
checkAlive 100 1000 put simple obj
2000 get simple obj
2.0
2.2
20385457
11494383
203854
114943
+43.6%
No checkAlive 100 1000 put simple obj
2000 get simple obj
2.0
2.2
11259185
7256594
112591
72565
+35.6%
checkAlive 100 1000 put complex obj
1000 get complex obj
2.0
2.2
15004906
9501571
150049
95015
+36.7%
No checkAlive 100 1000 put complex obj
1000 put complex obj
2.0
2.2
9022578
6775981
90225
67759
+24.9%

從上面的壓力測試可以看出這么幾點,首先優化SockIO提升了不少性能,其次SockIO優化的是get的性能,對于put沒有太大的作用。原以為獲取數據越大性能效果提升越明顯,但結果并不是這樣。

單個緩存實例和雙緩存實例的測試比較:

緩存配置 用戶 操作 客戶端 版本 總耗時(ms) 單線程耗時(ms) 提高處理能力百分比
One Cache instance
checkAlive
100 1000 put simple obj
1000 get simple obj
2.0
2.2
13242565
7772767
132425
77727
+41.3%
Two Cache instance
checkAlive
100 1000 put simple obj
1000 put simple obj
2.0
2.2
13596841
7696684
135968
76966
+43.4%

結果顯示,單個客戶端對應多個服務端實例性能提升略高于單客戶端對應單服務端實例。

緩存集群的測試比較:

緩存配置 用戶 操作 客戶端 版本 總耗時(ms) 單線程耗時(ms) 提高處理能力百分比
No Cluster
checkAlive
100 1000 put simple obj
1000 get simple obj
2.0
2.2
13242565
7772767
132425
77727
+41.3%
Cluster
checkAlive
100 1000 put simple obj
1000 put simple obj
2.0
2.2
25044268
8404606
250442
84046
+66.5%

這部分和SocketIO優化無關。2.0采用的是向集群中所有客戶端更新成功以后才返回的策略,2.2采用了異步更新,并且是分布式客戶端節點獲取的方式來分散壓力,因此提升效率很多。

開源代碼下載

其實封裝后的客戶端一直在內部使用,現在作了二次優化以后,覺得應該開源出來,一是可以完善自己的客戶端代碼,二是也可以和更多的開發者交流使用心 得。目前我已經在Google Code上傳了應用的代碼、范例和說明等,有興趣的朋友可以下載下來測試一下,與現在用的Java Memcached客戶端在易用性和性能方面是否有所提高,也期待更多對于這部分開源內容的反饋,能夠將它做的更好。

鏈接地址:http://code.google.com/p/memcache-client-forjava/。

原文鏈接:http://www.itivy.com/arch/archive/2011/11/30/memcached-java-program.html

【編輯推薦】

  1. Java虛擬機及JVM體系結構
  2. Java技能的優化集錦
  3. Java中Error與Exception的區別
  4. 淺談Java的輸入輸出流
  5. jOOQ 2.0發布 輕量級Java的ORM框架

 

責任編輯:林師授 來源: 架構點滴的博客
相關推薦

2015-08-17 09:48:29

C#客戶端分布式緩存

2024-12-02 09:19:44

2009-11-09 09:25:24

Memcached入門

2020-03-12 19:00:48

Ceph分布式存儲

2009-02-06 09:38:38

memcached分布式緩存系統ASP.NET

2011-06-28 09:09:57

JavaMemcached

2009-08-17 16:34:21

.NET分布式緩存Memcached

2009-11-25 13:21:30

PHP作為memcac

2010-08-18 09:52:25

Memcache

2019-07-04 15:13:16

分布式緩存Redis

2023-10-09 09:27:33

Docker容器

2023-05-12 11:52:21

緩存場景性能

2010-07-12 10:05:08

MemcachedPHP

2022-04-07 17:13:09

緩存算法服務端

2018-12-14 10:06:22

緩存分布式系統

2023-02-28 07:01:11

分布式緩存平臺

2019-02-18 11:16:12

Redis分布式緩存

2013-06-13 11:29:14

分布式分布式緩存

2010-07-06 09:39:20

SQL Server分

2014-11-19 10:12:29

Java分布式緩存
點贊
收藏

51CTO技術棧公眾號

天天做天天摸天天爽国产一区| 国产精品原创巨作av| 亚洲男人天堂2024| 成年网站在线播放| a级片国产精品自在拍在线播放| 国产91在线看| 国产精品69久久久久| 老司机深夜福利网站| 日韩视频一二区| 色综合中文字幕| 影音先锋在线亚洲| 婷婷色在线观看| 麻豆91精品91久久久的内涵| 精品自拍视频在线观看| 亚洲ⅴ国产v天堂a无码二区| 欧美影院精品| 欧日韩精品视频| 日韩欧美精品免费| 天堂地址在线www| thepron国产精品| 国产在线视频91| 91午夜视频在线观看| 1024精品久久久久久久久| 亚洲国产精品网站| 婷婷激情小说网| 怡红院成人在线| 亚洲在线成人精品| 亚洲欧洲在线一区| 欧美色18zzzzxxxxx| 国精产品一区一区三区mba桃花| 欧美有码在线观看| 欧美极品aaaaabbbbb| 精品国产精品| 精品视频久久久| 97精品人人妻人人| 国产成人久久精品一区二区三区| 色网站国产精品| 国产玉足脚交久久欧美| 免费观看在线午夜影视| 国产无人区一区二区三区| 国产欧美日韩在线播放| 精品国自产在线观看| 日韩av一级电影| 国产91av在线| 日本免费观看视| 欧美三级特黄| 欧美大片免费观看| 印度午夜性春猛xxx交| 99久久久国产精品美女| 中文字幕精品在线| 少妇视频在线播放| 欧美色图激情小说| 中国日韩欧美久久久久久久久| 少妇激情一区二区三区视频| 综合激情网...| 欧美一卡二卡在线观看| 日韩va在线观看| 亚洲精品伊人| 制服丝袜激情欧洲亚洲| 五月婷婷丁香色| 国产成人精品一区二区三区免费| 色狠狠色噜噜噜综合网| 黄色动漫在线免费看| 国产偷倩在线播放| 亚洲成人av中文| 久久久久免费看黄a片app| 不卡专区在线| 狠狠躁天天躁日日躁欧美| 欧美精品一区免费| 性感美女一区二区在线观看| 在线一区二区三区四区五区| 欧美日韩怡红院| 久久99国产精品二区高清软件| 欧美日韩国产综合视频在线观看| 911福利视频| 国产精品一区二区精品视频观看| 日韩女优av电影在线观看| 丰满饥渴老女人hd| 精品中国亚洲| 亚洲一级免费视频| 在线日韩国产网站| 黄色另类av| 2019中文字幕免费视频| 性色av一区二区三区四区| 国内不卡的二区三区中文字幕 | 在线毛片观看| 91久久香蕉国产日韩欧美9色| 韩国视频一区二区三区| 成人噜噜噜噜| 亚洲大胆人体av| 精品无码人妻一区| 欧美aaaaaaaaaaaa| 国语自产精品视频在免费| 黄色片中文字幕| 精品亚洲成av人在线观看| 成人动漫视频在线观看完整版| 婷婷丁香花五月天| 中文字幕日韩一区| 欧美一区二区中文字幕| 成人亚洲综合| 亚洲成人黄色在线| 在线观看日本黄色| 136国产福利精品导航网址| 国产成人av在线| www.热久久| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲视频电影| 国产免费拔擦拔擦8x在线播放| 欧美日韩一级片在线观看| 美女网站视频在线观看| 欧美日韩国产在线观看网站| 欧美大片免费观看| 中文字幕在线观看国产| 成人黄色一级视频| 一级黄色免费在线观看| 超碰91在线观看| 欧美丰满少妇xxxxx高潮对白| 国产网站无遮挡| 99成人超碰| 国产盗摄xxxx视频xxx69| 黄色av小说在线观看| 国产精品欧美久久久久无广告| 欧洲精品一区二区三区久久| 91成人福利社区| 精品爽片免费看久久| 欧美成人三级在线观看| 美腿丝袜亚洲三区| 欧美日韩国产综合在线| 爱啪视频在线观看视频免费| 91精品国产91热久久久做人人 | 国产免费一区二区三区最新不卡 | 欧美天天影院| 一本色道久久综合亚洲精品按摩| 午夜福利三级理论电影| 91精品成人| 国产精品一区久久| 国产小视频在线观看| 午夜在线成人av| 2018国产精品| 欧美在线三区| 91精品久久久久| 3p视频在线观看| 一本到一区二区三区| 182在线视频| 亚洲精品一级| 国产在线欧美日韩| 国内小视频在线看| 欧美成人激情免费网| 紧身裙女教师波多野结衣| 男女激情视频一区| 亚洲欧洲精品一区二区三区波多野1战4| **欧美日韩在线观看| 亚洲欧美日韩成人| 日韩乱码一区二区| 99国产麻豆精品| 青青草视频在线免费播放| 久久久亚洲欧洲日产| 久久久久久久影院| 神马久久久久久久久久| 欧美日韩午夜视频在线观看| 最近中文字幕无免费| 一区二区精品| 欧美性天天影院| 写真福利精品福利在线观看| 亚洲午夜小视频| 怡红院成永久免费人全部视频| 国产精品每日更新| 久久久精品视频国产| 国自产拍偷拍福利精品免费一| 成人免费观看网站| 久热在线观看视频| 国产一区二区欧美日韩| 中文字幕一区二区在线视频| 亚洲天堂av一区| 伦理片一区二区| 免费看黄裸体一级大秀欧美| 色99中文字幕| 国产中文欧美日韩在线| 久久久久久国产精品| 成人av手机在线| 欧美日韩国产专区| 摸摸摸bbb毛毛毛片| 国产真实乱偷精品视频免| 国产 欧美 日韩 一区| 欧美一级二级三级视频| 国产精品国产三级国产aⅴ9色 | 国产在线播放精品| 日韩av手机在线看| 日本在线免费| 精品国产乱子伦一区| 手机在线看片1024| 中文字幕中文字幕在线一区| 人妻激情偷乱视频一区二区三区| 一本久道综合久久精品| 亚洲精品美女久久7777777| 日韩精品一区二区三区中文在线| 97视频com| 97超碰人人在线| 欧美mv日韩mv亚洲| 亚洲av人无码激艳猛片服务器| 亚洲精品国产成人久久av盗摄| 精品无码在线视频| 国产麻豆视频一区二区| 国产二区视频在线播放| 久久精品久久久| 久久久久天天天天| 国产一区 二区| 国产激情999| 怡红院av在线| 国产一区二区日韩精品欧美精品| 亚洲精品久久久久久久久久 | 国产精品久久久久久久久久久久久久久久 | 亚洲影院色无极综合| 韩漫成人漫画| 欧美成人激情图片网| 国产精品免费观看| 欧美mv和日韩mv的网站| 亚洲怡红院av| 一本到三区不卡视频| 精品一级少妇久久久久久久| 中文字幕一区二区三区视频| 少妇大叫太粗太大爽一区二区| 国产激情视频一区二区在线观看| 亚洲国产成人va在线观看麻豆| 国产一区白浆| 97视频在线免费| 欧美黄色精品| 久久av喷吹av高潮av| 欧美综合一区| 日本在线视频一区| 偷窥自拍亚洲色图精选| 成人在线视频网址| 国产精品视频一区视频二区| 国产欧美日韩丝袜精品一区| 日韩精品专区| 欧洲成人性视频| 黄毛片在线观看| 欧美激情亚洲精品| 日本乱理伦在线| 九九热视频这里只有精品| 天堂中文а√在线| 精品国产欧美一区二区五十路| 成人动漫在线播放| 一区二区欧美久久| 丁香婷婷在线| 一区二区三区国产在线观看| 国产51人人成人人人人爽色哟哟 | 91在线观看免费观看| 国产精品美女午夜爽爽| 国产999精品久久久影片官网| 超级碰碰久久| 国产精品91久久久| 国产成人毛片| 成人精品视频久久久久| 亚洲精品三区| 成人三级在线| 牛牛影视久久网| 欧美激情国产日韩| 国产一区二区三区四区二区| 日本一区视频在线| 日韩在线中文| 黄色a级在线观看| 午夜久久影院| 久久久一本二本三本| 先锋影音久久| 国内自拍视频网| 久久国产夜色精品鲁鲁99| 一区二区三区国产好的精华液| 国产精品综合av一区二区国产馆| 精品人妻二区中文字幕| 99精品视频一区二区三区| 永久免费成人代码| 中文字幕在线观看不卡| 九九视频在线观看| 欧美日韩另类字幕中文| 波多野结衣人妻| 3d动漫精品啪啪1区2区免费 | 国产乱妇无码大片在线观看| 日韩女优在线视频| 久久久久久久久99精品| 国产亚洲精品久久久久久豆腐| 亚洲欧美成aⅴ人在线观看| 日韩av综合在线| 在线精品国精品国产尤物884a| 一道本无吗一区| 亚洲大胆人体av| av小片在线| 久久免费视频网站| 国产精品字幕| 97碰碰视频| 九九亚洲视频| 欧美这里只有精品| 日韩在线一区二区三区| 亚洲女人在线观看| 久久久久久久久久看片| 国产一区二区视频在线观看免费| 欧美日韩中文字幕在线| 国产露脸91国语对白| 日韩精品视频免费在线观看| 欧美边添边摸边做边爱免费| 性欧美在线看片a免费观看| 日韩av懂色| 久久人人爽爽人人爽人人片av| 97精品国产| 黑森林福利视频导航| 国产一区二区三区国产| b站大片免费直播| 亚洲综合色在线| 中文字幕制服诱惑| 亚洲另类xxxx| 黄色的视频在线观看| 91老司机在线| 欧美伦理在线视频| 久久网站免费视频| 高清日韩电视剧大全免费| 香蕉成人在线视频| 色婷婷一区二区三区四区| 丰满少妇高潮在线观看| 久久精品免费播放| 成人福利片在线| 鲁丝一区二区三区免费| 在线国产精品一区| 欧美体内she精高潮| 国产精品丝袜91| 国产精品第5页| 亚洲国产成人精品女人久久久 | 国产欧美久久久精品免费| 亚洲精品自产拍| 9999在线视频| 成人激情在线观看| 久久社区一区| 国产色视频在线播放| 久久久精品综合| 国产一级精品视频| 亚洲国产成人精品女人久久久 | 国产成人avxxxxx在线看| 欧美黑白配在线| 精品少妇人欧美激情在线观看| 国产精品夜夜嗨| 精品自拍偷拍视频| 91精品国产综合久久精品图片| 欧美日韩视频在线播放| 国产精品欧美一区二区三区奶水 | 黄色www在线观看| 久久综合综合久久综合| 成人性生交大片免费看无遮挡aⅴ| 日韩欧美精品在线观看| 亚洲色图另类小说| 欧美亚洲另类视频| 精品中文字幕一区二区三区av| 欧美a在线视频| 久久久久久麻豆| 中文字幕二区三区| 日韩在线小视频| 久久国内精品| 亚洲欧美日韩不卡| 国产精品亚洲成人| 国产亚洲自拍av| 亚洲精品wwwww| 日韩pacopacomama| 亚洲一区影院| 国产乱一区二区| 久久丫精品久久丫| 日韩电影中文 亚洲精品乱码| 伊人成综合网站| 色999日韩自偷自拍美女| 久久综合综合久久综合| 国产成人自拍网站| 精品1区2区在线观看| 在线观看特色大片免费视频| 日韩.欧美.亚洲| 韩日av一区二区| 日本特黄一级片| 亚洲图片欧美日产| 少妇高潮一区二区三区99| 精品一区二区三区毛片| 不卡影院免费观看| www.久久视频| 久久综合久久八八| 国产精品一区二区三区美女| 欧美日韩一区二区在线免费观看| 中文幕一区二区三区久久蜜桃| 99久久久久成人国产免费| 午夜精品福利视频| 成人免费在线观看av| 性折磨bdsm欧美激情另类| 欧美性色视频在线| 久操视频在线观看| 久久99久久精品国产| 久久精品99国产精品日本| 精品无码久久久久久久久| 亚洲色图激情小说| 国产精品亚洲综合在线观看| 免费看一级大黄情大片| 17c精品麻豆一区二区免费| 少妇高潮一区二区三区99小说| 国产精品久久久久aaaa九色| 国内揄拍国内精品久久| 日韩免费成人av| 精品1区2区在线观看|