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

開源 | 攜程 Redis On Rocks 實踐,節(jié)省 2/3 Redis成本

開發(fā) 開源
隨著SSD磁盤性能的不斷提高,NVMe SSD的隨機讀寫延遲也僅有幾十微秒,與redis的固有延遲(100~200us)相當,用SSD作為存儲介質也可以達到較低的延遲,同時節(jié)省成本。

作者簡介

patpatbear,攜程軟件技術專家,負責攜程緩存內核的維護,熱愛開源,專注于高性能、分布式NoSQL系統(tǒng)的建設和應用。

一、背景

redis使用內存作為存儲介質,具有良好的性能和低延遲,但其內存容量通常成為瓶頸,且內存價格較高,導致redis使用成本較高。

隨著SSD磁盤性能的不斷提高,NVMe SSD的隨機讀寫延遲也僅有幾十微秒,與redis的固有延遲(100~200us)相當,用SSD作為存儲介質也可以達到較低的延遲,同時節(jié)省成本。

因此我們研發(fā)了ROR(Redis-On-Rocks)產品,通過對redis內核增強以支持數(shù)據(jù)冷熱交換,使用磁盤擴展緩存容量,可節(jié)省約2/3成本,而性能也能滿足大多數(shù)業(yè)務需求。

二、ROR簡介

ROR核心思路很簡單:在redis codebase基礎上擴展冷熱交換功能,實現(xiàn)redis數(shù)據(jù)冷熱多級存儲,降低緩存的綜合使用成本。

ROR將數(shù)據(jù)分為冷熱兩部分:

  • 熱數(shù)據(jù)沿用redis引擎,使用內存存儲,數(shù)據(jù)結構和原生redis完全一致
  • 冷數(shù)據(jù)選用RocksDB引擎,使用磁盤存儲,以subkey為粒度存儲在RocksDB中

ROR負責冷熱數(shù)據(jù)的交換:

  • 換入(從RocksDB到redis):當客戶端訪問冷數(shù)據(jù),則將RocksDB中的數(shù)據(jù)換入到redis中,ROR把命令依賴的數(shù)據(jù)換入到redis,后續(xù)命令執(zhí)行與原生redis一致。
  • 換出(從redis到RocksDB):當內存用量超過maxmemory之后,則將熱數(shù)據(jù)換出到RocksDB中,ROR冷熱交換算法采用了redis原生的LFU算法,原本被redis evict的數(shù)據(jù)將被交換到內存中。

圖片

由于ROR繼承了redis的數(shù)據(jù)結構和命令實現(xiàn),只負責冷熱數(shù)據(jù)交換,因此可以兼容幾乎所有的redis命令,可快速跟進redis官方新特性。

三、與RoF對比

從長遠發(fā)展考慮,redis是事實上的緩存標準,緩存內核基于社區(qū)開源redis更便于跟進社區(qū)redis演進,因此ROR選擇了基于redis基礎上擴展冷熱交換能力。

RedisLabs的商業(yè)產品Redis-on-Flash(RoF)與ROR設計思路類似,但是調研之后,我們發(fā)現(xiàn)RoF在成本、通用性、性能等方面并不能滿足我們的需求。

3.1 成本

RoF把value保存在磁盤、key保留在內存主表,可以方便地兼容dbsize、scan、randomkey等命令,但占用的內存量會隨著dbsize線性上升。

冷數(shù)據(jù)key保存在內存主表(hashtable),每個key的輔助指針、robj等平均占用約50B,生產String類型平均value大小為512B。從成本的角度看,按照key占內存10%,value占90%計算

  • 換出80%value,可減少72% (80%*90%) 內存
  • 換出80%冷key,可繼續(xù)減少29% (10%*80%/(100%-72%))內存

因此ROR并不把冷數(shù)據(jù)的key保存在內存,而是保存到RocksDB中單獨的meta column family。

考慮到meta  column family訪問比較頻繁,且只存儲type、expire之類的少量元數(shù)據(jù),因此用少量內存(block cache)可以緩存多數(shù)冷key。

經驗證,分配256MB block cache后,把冷數(shù)據(jù)的key存儲到RocksDB并不會降低整體QPS,但會增加IO線程的CPU消耗,由于redis宿主機cpu利用率只有10%,用cpu換內存是可以接受的。

3.2 通用性

為了避免重復緩存,RoF禁用了RocksDB層的table cache和文件系統(tǒng)層的page cache。這意味著訪問冷key時必須進行IO操作,因此冷key和熱key的訪問延遲會有較大區(qū)別。

為了提高通用性,ROR合理利用RocksDB層的table cache和操作系統(tǒng)層的page cache,盡可能利用未被占用的內存,減少訪問冷key和熱key之間的延遲差距。

實際上,無論是DBA還是業(yè)務方,都很難準確預測緩存集群是否存在明顯的冷熱特征。ROR適用于通用場景,能夠大大減少溝通成本和業(yè)務方關于延遲的擔憂。

在redis遷移至ROR時,我們并不評估應用程序是否具有冷熱特征,只要業(yè)務QPS在redis的一半以下,對P99延遲不是非常敏感,就可以將其遷移到ROR。

3.3 性能

RoF按key粒度存儲,key與RocksDB key一一對應;而ROR按subkey粒度存儲,subkey都與RocksDB key一一對應。

對于HSET、HGET等聚合類型命令,RoF需要換入換出整個key,而ROR只讀寫必要的subkey,因此讀寫放大遠低于RoF,QPS和延遲也優(yōu)于RoF。

以下為ROR、RoF在大壓力(100線程不限QPS)和普通壓力(1000線程10000QPS),讀寫純冷數(shù)據(jù)的QPS和延遲。可以看出:

  • 大壓力情況下,ROR HGET、HSET命令QPS約為RoF的2~3倍
  • 普通壓力情況下,ROR延遲約300~500us,遠低于RoF 14~120ms 延遲

場景\方案

ROR

RoF

HGET

100thd

QPS=22134

LAT(mean,p99)=4762 27495(us)

QPS=10195

Latency(mean,p99): 9730 16521(us)

1wqps

QPS=9968

LAT(mean,p99)=343 

969(us)

QPS=9956

Latency(mean,p99): 14270 100746(us)

HSET

100thd

QPS=26182

Latency(mean,p99): 

4034 21802(us)

QPS=7994
Latency(mean,p99): 12250 27492(us)

1wqps

QPS=9969

Latency(mean,p99):

511 4437(us)

QPS=7806
Latency(mean,p99): 119396 242467(us)

測試說明:

  • 數(shù)據(jù):hash:5,000,000 (key count) * 2KB (per key,5個field,每個filed 400B)
  • 配置:ROR的maxmemory設置為200MB;RoF有最小內存限制,設置為2G
  • 場景:a)100thd:壓力測試,100客戶端并發(fā),不限速測試;b)1wqps:模擬常規(guī)訪問,1000客戶端,限速1W QPS測試

對于超大的聚合key,RoF將整個key加載到內存中,會有明顯的延遲尖刺(可達秒級);而ROR只將必要的subkey換入內存,則不會有明顯的延遲尖刺。

多數(shù)使用redis的業(yè)務對延遲比較敏感,不能接受過大延遲尖刺。

場景\方案

ROR

RoF

HGET 

hugehash 

field

<1ms

1.48s

LPOP 

hugelist

<1ms

0.704s

測試說明:

  • hash:共有1,000,000個元素,每個元素128B
  • list:共有1,000,000個元素,每個元素128B

四、實現(xiàn)方案

4.1 冷熱交換

以下是客戶端訪問到冷key時ROR的處理過程。其中藍色模塊與原生redis相同,橙色模塊為ROR新增的冷熱交換功能。

總體上ROR先冷熱交換(swap),再執(zhí)行命令處理流程。

冷熱交換(swap)過程主要分為以下步驟:

1)語法分析:分析客戶端命令涉及哪些key和subkey。比如,可以分析出MGET k1 k2 k3依賴于k1,k2,k3;而HMGET h1 f1 f2 f3,依賴于 h1.{ f1, f2, f3 }。

2)加鎖:根據(jù)語法分析出的結果,對命令所依賴的key加鎖。值得注意的是,這里的鎖并不是pthread_mutex之類的線程鎖,而是ROR項目實現(xiàn)的一種單線程鎖,本質上是一個等待隊列,詳細介紹參考后續(xù)并發(fā)控制章節(jié)。 

3)提交SWAP任務:拿到鎖之后,提交swap任務到IO線程組執(zhí)行RocksDB讀寫。

4)執(zhí)行RocksDB讀寫:IO線程組執(zhí)行RocksDB讀操作。

5)合并數(shù)據(jù):將RocksDB讀取的數(shù)據(jù)合并到redis中。

經過swap過程之后,冷數(shù)據(jù)已經換入到redis,后續(xù)執(zhí)行命令與原生redis一致。

圖片

4.2 并發(fā)控制

redis架構上為單主線程,而RocksDB提供的是阻塞模式的API,直接使用redis主線程調用RocksDB將極大降低redis的性能。為了提高IO吞吐,ROR使用了額外的IO線程組執(zhí)行RocksDB讀寫。由于增加了IO線程組,對于同一key的讀寫不再是單線程,如果不加控制,那么數(shù)據(jù)將變得錯亂。

為了控制并發(fā),ROR設計實現(xiàn)了一種單線程可重入鎖來保證同一時間對同一key只有一個客戶端在進行IO交換。這里的鎖并不是pthread_mutex這種系統(tǒng)線程鎖,其本質是一個等待隊列:當key被鎖定后,嘗試獲取該鎖的客戶端必須等待前序客戶端釋放鎖之后才能獲取到key的鎖。

如下圖所示,C1、C2、C3三個客戶端先后執(zhí)行了MGET命令,其中Key1、Key2、Key3均為冷數(shù)據(jù)。

C1依賴Key1、Key2,由于這2個key未被鎖定且為冷,因此C1獲取到Key1、Key2的鎖,并觸發(fā)了Key1、Key2換入;

C2依賴Key2、Key3,由于Key2被C1鎖定,因此C2等待C1執(zhí)行結束才能獲取key2鎖;Key3未被鎖定且為冷,因此C2獲取到了Key2的鎖,并觸發(fā)了Key3換入;

C3依賴Key1、key3,由于Key1、Key3分別被C1、C2鎖定,因此C3等待C1、C2執(zhí)行結束后才能獲取Key1、Key3鎖。

因此最終換入Key1、Key2、Key3換入后,客戶端執(zhí)行順序為C1=>C2=>C3。

圖片

以上是一個簡單的示例,ROR為了實現(xiàn)FLUSHDB/BGSAVE之類涉及整個keyspace的命令并發(fā)控制需求,等待隊列包含KEY、DB、SVR三種粒度的鎖,大粒度的鎖需等待細粒度鎖釋放后才能獲得。此外為了確保MULTI/EXEC事務不產生死鎖,允許同一個事務重復鎖定同一key(亦即可重入)。

如下圖所示,C1、C2兩個客戶端先后發(fā)起2個事務。

C1依賴Key1(2次),由于C1在同一事務中依賴Key1(2次)且為冷,因此C1獲得Key1鎖并觸發(fā)換入;

C2依賴Key2(2次)、DB0、SVR鎖,由于C2在同一事務中依賴Key2(2次)且為冷,因此C2獲得Key2鎖并觸發(fā)換入;注意由于C2依賴DB0鎖,DB0鎖范圍大約Key1、Key2,因此只有C1釋放Key1之后才能獲得DB0鎖。

假設Key1先于Key2被換入,Key1換入后,C1事務得到執(zhí)行并釋放Key1鎖。

當Key2換入后,C2獲得DB0鎖以及SVR鎖(獲得所有鎖),C2事務得到執(zhí)行。

圖片

4.3 冷數(shù)據(jù)存儲

與業(yè)界多數(shù)方案一樣,ROR的冷數(shù)據(jù)存儲采用了RocksDB引擎,設計上參考了kvrocks、pika等項目,主要有3個要點:

  • key存儲到RocksDB
  • subkey與RocksDB KV對應(i.e. 按subkey存儲)
  • lazy刪除聚合類型key

key存儲到RocksDB

ROR為了做到內存消耗與dbsize無關,內存中并不會存儲冷key,key類型、expire、version等信息會存儲到RocksDB的metaCF中。這樣設計主要是考慮每個key需要額外消耗約50B,如果dbsize為1億則需要額外消耗約5GB內存。對dbsize大、value小的集群來講,額外消耗的內存過多,冷熱分離的性價比則不高。

因此ROR和RoF不同,不會把冷key存儲在內存中,少量與key相關(scan、randomkey、dbsize)命令,則進行適配性改造。

subkey與RocksDB KV對應

RocksDB的數(shù)據(jù)類型只有KV,與redis支持hash、set、zset等聚合類型key不能一一對應,因此需要構造redis聚合類型key與RocksDB KV類型之間的對應關系。

最直接的方案是將redis的聚合類型key直接序列化單個為RocksDB KV,但這種方案的缺點非常明顯,即HGET hash subkey只依賴單個subkey的命令,也需要將整個聚合類型key換入到內存,這會造成嚴重的讀寫放大。

因此ROR將聚合類型的subkey存儲為RocksDB KV,換入聚合類型數(shù)據(jù)冷key只需要換入必要的subkey。

lazy刪除聚合類型key

對于聚合類型key而言,每個subkey對應RocksDB KV,ROR刪除聚合key需要刪除掉所有的subkey,直接從RocksDB中迭代刪除復雜度為O(N),會造成延遲尖刺。

參考pika、kvrocks的設計,聚合類型key都有版本號,ROR刪除聚合key時,只刪掉metaCF的元數(shù)據(jù),而其他subkey則在RocksDB compaction中通過compaction filter逐漸過濾刪除。

hash/set/zset編碼

以下是hash/set類型的編碼格式:

每個hash/set在metaCF有1個RocksDB KV,記錄了類型、超時時間、版本以及subkey數(shù)量。

每個hash/set在defaultCF有N個RocksDB KV,每個subkey對應一個。由于每個subkey都記錄了對應的version,因此刪除聚合key只需要把metaCF的KV刪掉即完成lazy刪除。

圖片

zset類型的編碼格式類似,只多了scoreCF記錄zset的score排序。

圖片

list編碼

由于與hash/set/zset的操作差別較大,list數(shù)據(jù)模型設計上也有所差別。設計上,ROR內存中的list仍復用redis數(shù)據(jù)結構,且list可能只有部分subkey在內存中。

模型上list的設計如下:

  • list為任意段rockslist(冷)和memlist(熱)的組合
  • list元素要么在memlist、要么在rockslist,memlist沒有交集
  • 分段信息存儲在listObjectMeta.segments中,segments的每個元素表示一段,記錄了每段的類型以及長度。

圖片

rockslist也按subkey粒度存儲在RocksDB中。

圖片

4.4 cuckoo filter減少IO

前面提到ROR為了做到內存用量與dbsize無關,key元信息不存儲在內存中,因此如果客戶端訪問的key不是熱數(shù)據(jù),則必須查詢RocksDB才能確認key是否存在:對于key存在的情況,讀RocksDB并換入冷數(shù)據(jù)是必要的;但如果key不存在,則讀RocksDB是非必要的。特別是當業(yè)務keyspace miss率高的情況(比如重復讀不存在的key),存在大量的非必要IO情況,降低了整體性能。

對于過濾不存在key問題,用bloom filter能以8~10 bit per key的內存取得很好的過濾效果,但由于bloom filter不支持刪除,而ROR的keyspace始終處于動態(tài)變化中,因此bloom filter功能上無法滿足需求。

經過調研之后,我們發(fā)現(xiàn)cuckoo filter可以很好地滿足我們的需求,支持刪除并且內存消耗量僅需8 bit per key即可滿足ROR過濾準確度需求。

由于無法預測準確到key數(shù)量,ROR實現(xiàn)cuckoo filter時采用了多個容量指數(shù)增長的cuckoo filter組成的cascading cuckoo filter。

圖片

經過測試我們發(fā)現(xiàn),對于keyspace miss場景,cuckoo filter可以將ROR的QPS從5W提升到6W左右,吞吐提升約20%;對于keyspace hit場景則無明顯影響。

4.5 兼容redis復制

ROR的復制協(xié)議完全兼容redis原生復制,全量復制采用RDB格式,增量復制使用RESP協(xié)議。由于完全兼容redis原生復制協(xié)議,ROR可以直接對接xpipe,具備DR能力。

流式全量復制

ROR與Redis全量復制主要流程相同:master fork出child進程,由child進程打RDB。ROR由于有冷熱兩類數(shù)據(jù),因此生成RDB的與原生Redis有區(qū)別:

  • 熱數(shù)據(jù)生成RDB方案不變
  • 冷數(shù)據(jù)先獲取RocksDB CHECKPOINT,然后SCAN冷數(shù)據(jù)轉換為RDB格式

    圖片


冷數(shù)據(jù)(RocksDB部分)生成RDB的一種方案是將冷key臨時加載內存,復用redis的序列化方法構造RDB,但這種方案加載全部冷key會消耗大量CPU,當遇到redis宿主機宕機重啟,大量redis全量同步爭用CPU將導致全量同步時間過長。

出于性能考慮,ROR構造RDB并不加載冷key,而是采用了流式構造RDB的方案:使用一個IO線程迭代RocksDB全量數(shù)據(jù),并將迭代的數(shù)據(jù)流式append到RDB中。需要注意的是,流式構造RDB依賴于ROR在存儲設計上將同一個聚合類型key的subkey存儲在RocksDB相鄰位置。

實現(xiàn)層面,流式構造RDB方案避免了把key加載到內存并跳過redis層重新編碼,直接將RockDB數(shù)據(jù)流式填充到rdb,全量復制速度315MB/s,可以達到redis復制性能(390MB/s)的80%左右。

并發(fā)增量復制

redis增量復制過程中,master通過單個復制客戶端推送復制流到slave。由于復制客戶端只有1個(冷熱交換最大并發(fā)為1)如果ROR slave直接用復制客戶端交換數(shù)據(jù),會出現(xiàn)slave復制無法跟上master寫入。

為了提高復制交換性能,ROR將從復制客戶端將收到的命令分發(fā)到多個worker客戶端,并發(fā)執(zhí)行交換。

如果worker客戶端在交換結束后直接調用命令,那么slave上命令執(zhí)行的順序可能與master不同,造成主從數(shù)據(jù)不一致。

ROR采用的方案下,worker客戶端交換結束后并不立即執(zhí)行命令,而是等到前序命令全部執(zhí)行完之后在執(zhí)行。由于slave執(zhí)行增量復制命令與master向下傳播的復制流的命令順序一致,可以確保主從數(shù)據(jù)一致。

圖片

如上圖所示,①、②、④在并發(fā)執(zhí)行IO操作,雖然②、④可能在①之前完成數(shù)據(jù)交換,但一定會等到①完成IO后再執(zhí)行命令。

ROR增量復制并發(fā)改造后,slave處理復制命令速度從幾千QPS提升到大于master的最大寫入速度(5~10W QPS左右,與冷熱數(shù)據(jù)占比相關)。

五、生產實踐

從經驗來看,多數(shù)redis集群QPS較低但內存用量較大,redis宿主機通常因為達到內存上限觸發(fā)擴容,但CPU資源則比較空閑,比如攜程內redis宿主機平均CPU使用率約15%,但平均內存使用率達到50%。

ROR采用磁盤增加了緩存容量,能容納更多的數(shù)據(jù)量,但RocksDB引擎的compaction和壓縮會消耗更多的CPU資源,因此ROR可以認為是用空閑的CPU換內存的成本解決方案。

成本方面,經驗數(shù)據(jù)顯示1個ROR實例可容納3個redis實例的數(shù)據(jù),因此redis遷ROR能節(jié)省2/3的成本。

目前在ROR在生產部署了幾萬個實例。由于海外公有云內存單價高,已基本全部部署為ROR,每年可以節(jié)省成本上千萬元。

性能方面,從吞吐量考慮,攜程內部redis集群高QPS占比較低,遠低于ROR的QPS上限(參考上文性能數(shù)據(jù))。

從延遲考慮,ROR設計上合理利用緩存,按subkey粒度存儲,且硬件上nvme SSD延遲只有幾十微秒,因此與Redis相比延遲并沒有特別明顯的上升。

以下為一個典型redis集群遷移ROR后延遲對比,其中80%為冷數(shù)據(jù)、20%為熱數(shù)據(jù),遷移前后客戶端訪問延遲從200us變?yōu)?20us左右。

圖片

六、項目開源與未來計劃

6.1 項目開源

前ROR(Redis-On-Rocks)已開源,采用與Redis一致的BSD協(xié)議。

6.2 未來計劃

1)提升單實例QPS

部分業(yè)務場景(比如大數(shù)據(jù)相關業(yè)務)不但數(shù)據(jù)量大,而且QPS也比較高,這些集群可能出現(xiàn)ROR主線程100%情況。針對這些場景,我們考慮從軟硬件2個層面優(yōu)化,軟件層面考慮減少冷熱交換損耗、自動化pipeline減少網(wǎng)絡CPU消耗;硬件層面使用更高主頻的CPU提升上限。

2)完善數(shù)據(jù)結構支持

部分使用頻次較少的數(shù)據(jù)結構待優(yōu)化,比如:bitmap目前按照string處理,讀寫放大比較大,待優(yōu)化性能;stream目前尚未支持,使用內存存儲,待支持。

3)減少全量同步

國內與海外的帶寬比較小,如果出現(xiàn)全量同步則海外業(yè)務受影響時間會比較久。隨著隨著海外部署量上升,這個問題的影響性逐步增大,后續(xù)ROR考慮提供可用性與一致性的選項,允許少量數(shù)據(jù)不一致的情況下增量同步。

責任編輯:張燕妮 來源: 攜程技術
相關推薦

2021-08-20 11:00:04

Redis攜程數(shù)據(jù)庫

2022-07-15 12:58:02

鴻蒙攜程華為

2022-05-13 09:27:55

Widget機票業(yè)務App

2022-08-12 08:34:32

攜程數(shù)據(jù)庫上云

2023-02-08 16:34:05

數(shù)據(jù)庫工具

2022-07-15 09:20:17

性能優(yōu)化方案

2022-07-08 09:38:27

攜程酒店Flutter技術跨平臺整合

2023-07-07 12:19:43

攜程技術

2022-05-27 09:52:36

攜程TS運營AI

2023-08-18 10:49:14

開發(fā)攜程

2023-12-15 10:05:58

攜程網(wǎng)絡

2022-06-03 09:21:47

Svelte前端攜程

2022-08-20 07:46:03

Dynamo攜程數(shù)據(jù)庫

2023-07-07 12:26:39

攜程開發(fā)

2023-04-14 10:29:24

小程序實踐

2022-06-17 10:44:49

實體鏈接系統(tǒng)旅游AI知識圖譜攜程

2022-12-14 10:09:44

研發(fā)效能

2024-09-10 16:09:58

2020-12-04 14:32:33

AndroidJetpackKotlin

2024-07-05 15:05:00

點贊
收藏

51CTO技術棧公眾號

国产成人精品免费视频| 精品亚洲一区二区三区在线播放| 国产对白在线播放| 99久久精品国产色欲| 最新国产乱人伦偷精品免费网站| 亚洲精品suv精品一区二区| 最近免费中文字幕中文高清百度| 欧美jizz18hd性欧美| 国产成人在线观看| 国产成人啪精品视频免费网| 国产在线一卡二卡| 国产精选一区| 精品国产乱码久久久久久浪潮| 精品久久久久久无码国产| 中文字幕免费高清电视剧网站在线观看| 99久久免费国产| 成人性教育视频在线观看| 久久高清免费视频| 99久久影视| 亚洲乱码一区av黑人高潮| 国产毛片久久久久久| 全亚洲第一av番号网站| 亚洲综合久久久| 婷婷精品国产一区二区三区日韩 | 欧美色播在线播放| 在线观看日韩羞羞视频| 日韩大胆视频| 国产激情视频一区二区在线观看| 日本精品久久久久影院| 精品无码久久久久| 91精品福利| 这里只有精品在线观看| 国产偷人妻精品一区| 亚洲精品aⅴ| 91精品国产91久久久久久最新毛片 | 国产精品扒开腿做| 欧美特黄aaaaaa| 午夜日韩激情| 久久午夜a级毛片| 快灬快灬一下爽蜜桃在线观看| 欧美一区二区三区久久| 精品福利一区二区三区| 超碰中文字幕在线观看| 欧美黑粗硬大| 欧洲av一区二区嗯嗯嗯啊| 播放灌醉水嫩大学生国内精品| 婷婷丁香在线| 亚洲欧美日韩国产中文在线| 黄色www在线观看| 一本一道波多野毛片中文在线| 久久综合99re88久久爱| 免费精品视频一区| 你懂的在线网址| 久久人人超碰精品| 久久精品二区| 台湾av在线二三区观看| 91污在线观看| 欧美日韩大片一区二区三区| 欧美精品久久久久久久久久丰满| 91在线精品秘密一区二区| 精品日韩美女| 精品推荐蜜桃传媒| 日本一区二区在线不卡| 亚洲国产婷婷香蕉久久久久久99| 香蕉视频网站在线观看| 亚洲欧洲日产国码二区| 色哟哟免费网站| 少女频道在线观看高清| 亚洲成人精品在线观看| 日韩免费一级视频| 羞羞影院欧美| 欧美精品一二三| av地址在线观看| 欧美顶级毛片在线播放| 亚洲欧美另类国产| 国产aaaaaaaaa| 亚洲精品二区三区| 午夜精品理论片| 国产一区二区视频网站| 天天色棕合合合合合合合| 在线精品一区| 日韩av成人在线观看| 在线观看日韩一区二区| 国产一区二区不卡| 精品欧美一区二区精品久久| 蜜桃视频在线观看视频| 国产精品福利一区| 香港三级日本三级a视频| 美女在线视频免费| 欧美日韩国产首页| 折磨小男生性器羞耻的故事| 日韩欧美影院| 久久久av网站| 久久精品国产成人av| 精品一区二区三区视频在线观看| caoporen国产精品| 国产女人在线观看| 亚洲综合视频网| 免费男同深夜夜行网站| 亚洲国产aⅴ精品一区二区| 精品亚洲国产视频| 欧美黑人猛猛猛| 久久在线91| 999视频在线免费观看| 男人的天堂在线视频| 亚洲欧美国产77777| 久久精品.com| 91亚洲无吗| 在线电影欧美日韩一区二区私密| 免费在线一级片| 美女网站一区二区| 精选一区二区三区四区五区| 黄色精品在线观看| 欧美性生交xxxxxdddd| 国内精品国产三级国产aⅴ久| 美女少妇全过程你懂的久久 | 在线观看操人| 色婷婷狠狠综合| 日本天堂在线播放| 天天色天天射综合网| 日韩女优人人人人射在线视频| 国产视频在线一区| 国产精品蜜臀av| 69堂免费视频| 久草精品视频| 欧美激情亚洲另类| 99热精品在线播放| 国产精品素人一区二区| 国产亚洲精品网站| 巨人精品**| 欧美极品少妇xxxxx| 国产伦一区二区| 国产精品免费人成网站| 九热视频在线观看| 红桃视频在线观看一区二区| 97碰在线观看| 黑人精品一区二区| 一区二区在线免费| 国产精品熟女一区二区不卡| 久久蜜桃av| 国产精品欧美日韩| 超碰免费在线观看| 欧美在线观看一区二区| 性少妇bbw张开| 久久精品官网| 欧美日韩精品免费观看视一区二区| 98色花堂精品视频在线观看| 精品黑人一区二区三区久久| 青青草激情视频| 国产精品一级片| 精品一区二区成人免费视频 | 日韩免费视频线观看| 亚洲二区在线播放| 黑人巨大精品欧美一区| 伊人久久99| а天堂中文最新一区二区三区| 中文字幕亚洲综合| 亚洲天堂2021av| 亚洲欧洲av另类| 手机看片国产精品| 国产在线欧美| 精品乱色一区二区中文字幕| 操人在线观看| 亚洲欧美制服中文字幕| 懂色av中文字幕| 一区视频在线播放| 1314成人网| 伊人成人在线| 欧美日韩一区二 | 91久久精品一区二区二区| 亚洲日本精品视频| 久久成人久久鬼色| www.欧美黄色| 国产精品免费99久久久| 成人激情视频网| 国产蜜臀av在线播放| 日韩久久免费电影| 在线观看免费观看在线| 一区二区三区视频在线观看| 91丝袜在线观看| 日韩av网站在线观看| 看全色黄大色大片| 全国精品免费看| 国产在线高清精品| 91豆花视频在线播放| 国产亚洲精品91在线| 国产乱人乱偷精品视频a人人澡| 一片黄亚洲嫩模| 亚洲精品视频久久久| 精东粉嫩av免费一区二区三区| 欧美另类videosbestsex日本| 日韩欧美美女在线观看| 91色p视频在线| 男人av在线播放| 久久精品视频亚洲| 色在线免费视频| 91超碰这里只有精品国产| 国产成人愉拍精品久久| 国产精品第13页| 欧类av怡春院| 国产一区高清在线| 丁香啪啪综合成人亚洲| 欧美精品不卡| 一本一道久久久a久久久精品91| 51亚洲精品| 国产精品网站入口| 不卡视频观看| 久久6免费高清热精品| 国产一区精品| 亚洲激情国产精品| 国产精品久久久久久久免费| 欧美性猛交丰臀xxxxx网站| 久久精品99久久久久久| 中文在线一区二区| 一女三黑人理论片在线| 国产99久久久国产精品潘金| 在线免费av播放| 亚洲免费影视| 国产二区视频在线| 亚洲国产精品日韩专区av有中文 | 国产在线视频网址| 亚洲福利视频专区| 国产乱码精品一区二三区蜜臂| 色成年激情久久综合| 日本五十熟hd丰满| 亚洲精品国产精品乱码不99| 欧美成人久久久免费播放| 久久蜜桃av一区二区天堂| 欧美激情 亚洲| 国产不卡视频在线观看| 91pony九色| 久久精品国产99久久6| 日本成人在线免费视频| 先锋影音久久久| 国产网站免费在线观看| 亚洲成人中文| 精品国产一区二区三区无码| 在线观看国产精品入口| 特级毛片在线免费观看| 欧美成人milf| 先锋影音网一区| 波多野结衣在线观看一区二区三区| 久久久久久高清| 神马日本精品| 欧美成人在线免费观看| 亚洲宅男网av| 日韩啊v在线| 色婷婷一区二区三区| 一区二区三区四区五区视频| 久久精品国产大片免费观看| 亚洲国产精品一区二区第四页av| 日韩欧美不卡| 中文字幕一区二区三区精彩视频| 婷婷综合视频| 9191国产视频| 国产精品www994| 日本国产在线播放| 麻豆久久精品| 污网站在线免费| 国产精品亚洲一区二区三区在线| 69久久精品无码一区二区| 高清视频一区二区| 大黑人交xxx极品hd| 国产欧美一区二区三区沐欲| 网站永久看片免费| 亚洲精品综合在线| 日韩黄色在线视频| 一本色道**综合亚洲精品蜜桃冫| 国产精品传媒在线观看| 欧美精品三级日韩久久| 性欧美18一19性猛交| 亚洲精品久久久久| 电影av一区| 免费99精品国产自在在线| 波多野结衣精品| 日本成熟性欧美| 日本一区二区三区中文字幕| 91在线国产电影| 麻豆一区二区| 亚洲一区影院| 亚洲日产国产精品| 伊人影院综合在线| 国产成人av一区| 精品国产成人亚洲午夜福利| 18欧美亚洲精品| 欧美一级视频免费观看| 欧美日韩精品是欧美日韩精品| 精品久久久久成人码免费动漫| 亚洲国产一区二区三区在线观看 | 欧美韩国理论所午夜片917电影| 9lporm自拍视频区在线| 国产精品久久久久久av福利| 亚洲精品v亚洲精品v日韩精品| 欧美亚洲另类久久综合| 一区二区免费不卡在线| 国产91对白刺激露脸在线观看| 理论片日本一区| 亚洲黄色免费在线观看| 综合欧美一区二区三区| 狠狠人妻久久久久久| 欧美一区二区三区免费| 黄色在线网站| 午夜精品久久久久久99热软件| 成人一区视频| 久久99精品久久久水蜜桃| 91精品观看| 中文字幕第21页| 99久久免费精品高清特色大片| 精品国产视频在线观看| 一本久久a久久免费精品不卡| 国产ts人妖调教重口男| 中文字幕亚洲欧美| 亚洲私拍视频| 国产精品日韩一区二区免费视频| 日韩电影免费网站| 成人一级片网站| 成人sese在线| 免费毛片在线播放免费| 欧美男生操女生| 无码国产精品96久久久久| 欧美成人精品一区二区| 视频91a欧美| 日韩精品电影网站| 性欧美xxxx大乳国产app| 国产午夜在线一区二区三区| 亚洲欧美电影一区二区| 亚洲熟妇av乱码在线观看| 国产亚洲欧美日韩精品| 中国字幕a在线看韩国电影| 国产日韩欧美亚洲一区| 欧美三区不卡| 日本少妇一区二区三区| 日韩毛片在线免费观看| 中文字幕在线播放不卡| 国产香蕉精品视频一区二区三区| 免费成人直播| 明星裸体视频一区二区| 亚洲深爱激情| 在线观看国产三级| 午夜久久久久久久久久一区二区| 亚洲第九十九页| 色综合久久悠悠| 福利电影一区| 国产一区二区网| 99久久久国产精品| 亚洲精品男人的天堂| 精品一区电影国产| 男人皇宫亚洲男人2020| 欧美日韩一区二区三区在线视频| 亚洲在线观看| 蜜桃无码一区二区三区| 91久久线看在观草草青青| 国产日韩精品在线看| 国产精品青青在线观看爽香蕉 | 国产精品videossex国产高清| 国产精品乡下勾搭老头1| 青青草偷拍视频| 亚洲国产精品大全| 亚洲天堂导航| 色综合视频二区偷拍在线| 老司机午夜精品| 国产女片a归国片aa| 精品精品国产高清一毛片一天堂| www在线看| 青青草成人网| 精品一区二区三区的国产在线播放| jizz亚洲少妇| 亚洲精品国产综合久久| 欧美日韩亚洲国产| 中国老女人av| av网站免费线看精品| 久久久久久亚洲av无码专区| 日韩中文字幕免费| 99精品国产一区二区三区2021 | 成人一区视频| 亚洲自拍偷拍一区二区三区| 国产suv精品一区二区883| 在线天堂中文字幕| 久久激情视频免费观看| www国产精品| 鲁一鲁一鲁一鲁一av| 一区二区三区在线观看动漫| 三级在线电影| 成人性教育视频在线观看| 亚洲色诱最新| 天天操天天操天天操天天操天天操| 欧美v亚洲v综合ⅴ国产v| 日韩新的三级电影| 欧洲精品视频在线| 久久久午夜精品| 国产高清视频免费| 国产精品91久久| 欧美日韩日本国产亚洲在线 | 成人免费在线播放视频| 成人免费观看在线视频| 国产精品激情自拍| 精品不卡视频| 成年人二级毛片| 亚洲欧美激情视频| 超碰在线一区|