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

MongoDB Change Streams性能優化實踐

開發 前端 MongoDB
本文介紹一種新的事件訂閱方式,來完善上述不足,并探討通過并發預讀的方式,來提升原生Change Streams的性能。

 [[425468]]

簡介:基于MongoDB的應用程序通過Change Streams功能可以方便的實現對某個集合,數據庫或者整個集群的數據變更的訂閱,極大的方便了應用對數據庫變化的感知,但是當前Change Streams對部分數據的變化并沒有提供對應的事件(創建索引,刪除索引,shardCollection)等,本文介紹一種新的事件訂閱方式,來完善上述不足,并探討通過并發預讀的方式,來提升原生Change Streams的性能。

一、前言

MongoDB作為一款優秀的NOSQL數據庫,支持海量存儲,查詢能力豐富以及優秀的性能和可靠性,當前大部分云廠商都提供了兼容MongoDB協議的服務,用戶使用廣泛,深受國內外用戶和企業的認可。

MongoDB從3.6版本開始提供了Change Stream特性,通過該特性,應用程序可以實時的訂閱特定集合、庫、或整個集群的數據變更事件,相比該特性推出之前通過監聽oplog的變化來實現對數據變更的感知,非常的易用,該特性同時支持副本集和集群場景。

Change Streams功能目前支持大部分數據操作的事件,但是對于與部分其他操作,如創建索引,刪除索引,ColMod, shardCollection并不支持,而且目前Change Streams內部實現是通過Aggregate命令的方式完成的, 對于分片集群場景下, 在mongos節點是通過單線程匯聚的方式完成從shard節點上oplog的拉取和處理,當實例寫入壓力很大的情況下,感知數據的實時變化會有延遲,性能有待提升,對于ChangeStreams目前的性能問題,官方也有過探討https://jira.mongodb.org/browse/SERVER-46979。

本文通過深入分析當前的Change Stream實現機制,結合客戶實際使用場景,提出了一種新的多并發預讀的事件監聽方式,來解決上述問題,并應用到客戶實際遷移和數據庫容災的場景中。

二、Change Steams 機制介紹

Change Streams支持對單個集合,DB,集群進行事件訂閱,當業務程序通過watch的方式發起訂閱后,背后發生了什么,讓我們一起來分析一下。

Change Streams內部實現是通過Aggregate的方式實現的,所以watch背后,對應的是客戶端向MongoDB Server發起了一個Aggregate命令,且對Aggregate的pipeline 參數中,添加了一個$changeStream的Stage, 結合客戶端其他參數,一起發給MongoDB Server。

當Mongo Server收到Aggregate命令后,解析后,會根據具體的請求,組合一個新的Aggregate命令,并把該命令發給對應的Shard節點,同時會在游標管理器(CursorManger)中注冊一個新的游標(cursor),并把游標Id返回給客戶端。

當Shard Server端收到Aggregate命令后,構建pipeline流水線,并根據pipeline參數中包括了Change Steams參數,確定原始掃描的集合為oplog,并創建對該集合上掃描數據的原始cursor, 和對應的查詢計劃執行器(PlanExecutor),構建PlanExecutor時候,用了一個特殊的執行Stage, 即ProxyStage完成對整個Pipeline的封裝,此外也會把對應的游標ID返回給Mongos節點。

客戶端利用從Mongos節點拿到游標ID, 在該游標上不斷的執行getMore請求,服務端收到getMore請求后,最后通過cursor的next調用,轉發請求到shard節點,拿到數據后,歸并后返回可客戶端,完成了整個Change Streams事件的訂閱。

Shard上pipeline具體執行的細節不在本文重點介紹范圍,這些就不詳細展開了。

原生Change Stream目前使用上有如下限制:

1. 支持DDL事件不完善

Change Stream目前支持的事件如下:

  • Insert Event
  • Update Event
  • Replace Event
  • Delete Event
  • Drop Event
  • Rename Event
  • DropDatabase Event
  • invalidate Event

顯然上述事件并沒有完全覆蓋MongoDB內部全部的數據變更的事件。

此外,對于在集合上監聽的Change Streams, 當出現集合或者所屬的DB被刪除后,會觸發一個invalidate Event, 該事件會把Change Streams的cursor關閉掉,導致Change Streams無法繼續進行,對于通過Change Streams來實現容災的場景,顯然是不夠友好的,需要重新建立新的Change Streams監聽。

2. 事件拉取性能有待提升

如上述分析,當前的Change Streams請求發到Mongos節點后,通過單線程的方式向每個Shard節點發送異步請求命令來完成數據的拉取,并做數據歸并,如果將該方式替換為多線程并發拉取,對于分片表來說,性能會有提升。

三、 并行Change Streams架構和原理

3.1 并發Change Streams架構介紹 

針對上述的一些使用限制,我們結合實際客戶使用需求,提出一種新的并發Change Streams(Parallel Change Streams)的方式,來嘗試解決上述問題。

為了提升原生Change Streams的性能,我們在Mongos 節點引入如下幾個新的組件:

  • Change Streams Buffer

與Shard是一對一的關系。每個Change Streams Buffer 默認1GB,在Buffer滿之前,該Buffer無條件的向對應的Shard(secondary節點)拉取Change Streams數據。

  • Merged Queue

Merged Queue是一個內存隊列,是Change Streams Buffer的消費者,是 Bucket的生產者。Merged Queue 歸并所有Shard的Change Streams Buffer,并等待合適的時機按照規則放入對應Client的Bucket。

  • Bucket

Bucket 是一個內存隊列,是MergedQueue的消費者,是Client的生產者。每個Client對應一個Bucket。每個Bucket維護該Bucket內所有文檔的的集合。

  • Merged Queue 與Bucket的交互過程

Merged Queue不停的從頭部拿出盡可能多的數據,并從前往后的按照hash(document.ns)%n的規則放入對應的Bucket, document.ns是指這個文檔的NameSpace, 所以同一個集合的數據一定在一個Bucket里面。

3.2 對DDL事件的增強 

并發Change Stream除了支持原生的Change Stream外,還新增支持如下事件:

  • CreateCollection Event
  • CollMod Event
  • CreateIndex Event
  • Drop Index Event
  • CreateView Event
  • DropView Event
  • ShardCollection Event

本文以ShardCollection為例來說明如何實現新增DDL事件的支持:

當執行ShardCollection命令的時候,Config節點會向該集合的主Shard發送一個shardsvrShardCollection命令,主Shard收到改請求后,我們在該命令的處理流程中記錄了一個type為noop的oplog, 并把該命令的詳細內容寫入到oplog的o2字段里面,以此來實現shardcollecton事件的追蹤。

之后在處理Change Streams流程的pipeline中,我們對noop事件進行分析,如果其中內容包括了shardCollection事件相關的標記,則提取該事件,并返回給上層。

3.3 如何使用 

1 如果想創建并發change Stream,需要先通過如下命令創建bucket和cursor:

  1. db.runCommand( 
  2.  
  3.  
  4.     parallelChangeStream: 1,  
  5.  
  6.     nBuckets: Required,<int>,  
  7.  
  8.     nsRegex: Optional,<Regex>,  
  9.  
  10. startAtOperationTime: Optional,<Timestamp>,  
  11.  
  12. }) 

參數說明如下:

parallelChangeStream :開啟并行changeStream

nBuckets:要創建的bucket的數目

nsRegex:可選,定義要訂閱的集合,一個正則表達式。

startAtOperationTime:可選,表示訂閱的事件從哪個時間點開始。

返回值:

  1. "cursors" : [ 
  2.  
  3.     NumberLong("2286048776922859088"), 
  4.  
  5.     NumberLong("2286048779108179584"), 
  6.  
  7.     NumberLong("2286048780088774662"), 
  8.  
  9.     NumberLong("2286048777169702425"), 
  10.  
  11.     NumberLong("2286048779233363970"), 
  12.  
  13.     NumberLong("2286048779250024945"), 
  14.  
  15.     NumberLong("2286048776628281242"), 
  16.  
  17.     NumberLong("2286048778209018113"), 
  18.  
  19.     NumberLong("2286048778833886224"), 
  20.  
  21.     NumberLong("2286048777951363227"
  22.  

Cursors :返回的Mongos側的Cursor ID。

當獲取到所有Cursor ID后,客戶端就可以并發的(每個CursorId一個線程)通過getMore命令不斷的從服務端拉取結果了。

斷點續傳

ParallelChangeStream的斷點續傳通過startAtOperationTime實現,由于每個cursor的消費進度不一樣,恢復的斷點應該選用n個cursor的消費值的最小值。

四、性能對比

針對新的Parallel Change Stream和原生的Change Streams ,我們做了較長時間的對比測試分析,所有測試場景采用的測試實例如下:

實例規格:4U16G, 2個Shard(副本集) ,2個Mongos,

磁盤容量:500G

測試數據模型:通過YCSB 預置數據,單條記錄1K , 單個分片表1000w條記錄。

下面分幾個場景分別介紹:

1. 集群模式1分片表場景測試 

測試方法:

1) 創建一個Hash分片的集合,預置16 Chunk

2) 啟動YCSB , 對該集合進行Load數據操作,Load數據量為1000w ,設置的Oplog足夠大,保證這些操作還在Oplog中

3) 分別啟動原生Change Streams 和 Parallel Change Streams,通過指定startAtOperationTime來觀察訂閱1000w條記錄分別需要花費的時間。

4) 由于是單個表, nBuckets 為1

測試數據如下:

    讀取總數據量 花費總時間(ms  TPS( 個/s)
Change  Streams 1000w 432501 23148
Parallel Change Streams(1 bucket) 1000w 184437 54361

2. 集群模2分片表場景測試 

測試方法:

1) 創建2個Hash分片的集合,預置16 Chunk

2) 啟動YCSB , 同時對這2個集合進行Load數據操作,每個集合Load數據量為1000w ,設置的Oplog足夠大,保證這些操作還在Oplog中

3) 分別啟動原生Change Streams和Parallel Change Streams,通過指定startAtOperationTime來觀察訂閱4000w條記錄分別需要花費的時間。

4) 由于是2個表, nBuckets 為2

測試數據如下:

    讀取總數據量 花費總時間(ms  TPS( 個/s)
Change  Streams 4000w 2151792 18484
Parallel  Change Streams 4000w 690776 55248

3. 集群模式4分片表場景測試 

測試方法:

1) 創建4個Hash分片的集合,預置16 Chunk

2) 啟動YCSB , 同時對這4個集合進行Load數據操作,每個集合Load數據量為1000w ,設置的Oplog足夠大,保證這些操作還在Oplog中

3) 分別啟動原生Change Streams和Parallel Change Streams,通過指定startAtOperationTime來觀察訂閱4000w條記錄分別需要花費的時間。

4) 由于是4個表, nBuckets 為4

測試數據如下:

    讀取總數據量 花費總時間(ms  TPS( 個/s)
Change  Streams 4000w 2151792 18596
Parallel  Change Streams 4000w 690776 56577

總結:通過實際測試可以看出來, Parallel Change Streams這種方式性能有極大的提升,實際上我們后續根據實例規格,通過調整內部Bucket和Buffer的緩存大小,性能還可以繼續提升,同時隨著分片表數據量和Shard節點數量的變多,和原生Change Streams 的性能優勢會更加明顯。

五、并發Change Streams使用場景分析

并發Change Streams非常適合在MongoDB集群的容災場景,應用可以有針對性的設置對特定的集合或者DB進行監聽,可以實時的感知到源端實例的數據變化,并快速的應用到目標端,整體實現較低RPO。

此外,并發Change Streams也可以應用到PITR場景中, 通過并發Change Streams良好的性能,實時實現動態數據的跟蹤并記錄,使得PITR的可恢復時間更短。

六、未來展望

當前的并行Change Streams的實現中,merge queue中的事件分發到bucket的事件中,我們采用的策略是基于事件的NameSpace的HASH值,傳遞給對應的bucket中,這種策略對于單集合的場景,性能優化有限,后續我們計劃同時提供基于事件的ID內容的HASH值,把事件分發到不同的bucket中,這種方式能進一步的提升系統并發性能,帶來更好的性能優化效果。

七、總結

通過引入一種新的并發Change Streams的方式,支持更多類別的MongoDB事件的訂閱,同時在事件監聽的性能方面相比原生有較大的提高,可以廣泛應用在數據庫實例容災, PITR,數據在線遷移業務場景中,為客戶帶來更好的體驗。

 

責任編輯:張燕妮 來源: MongoDB中文社區
相關推薦

2020-03-23 15:15:57

MySQL性能優化數據庫

2020-07-17 19:55:50

Vue前端性能優化

2010-07-06 09:07:09

2019-08-02 11:28:45

HadoopYARN調度系統

2022-10-28 13:41:51

字節SDK監控

2022-03-29 13:27:22

Android優化APP

2016-11-17 09:00:46

HBase優化策略

2022-07-15 09:20:17

性能優化方案

2012-12-24 09:55:15

JavaJava WebJava優化

2022-07-08 09:38:27

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

2017-03-01 20:53:56

HBase實踐

2014-03-19 14:34:06

JQuery高性能

2023-12-30 14:05:32

Golangstruct數據結構

2023-10-30 16:14:44

Metrics SD數據庫

2022-12-28 20:11:25

圖數據庫

2019-05-21 09:40:47

Elasticsear高性能 API

2023-10-31 12:50:35

智能優化探索

2021-09-02 10:10:59

技術VS Code實踐

2011-08-11 09:45:25

2023-05-31 06:49:54

圖表查詢數據查詢
點贊
收藏

51CTO技術棧公眾號

亚洲iv一区二区三区| 日韩精品视频在线观看网址| 综合一区中文字幕| 国产成人精品a视频| 在线观看的日韩av| 亚洲免费视频一区二区| 色噜噜狠狠一区二区| 久久www人成免费看片中文| 久久亚洲影视婷婷| 91午夜理伦私人影院| 国产一级18片视频| 欧美激情第8页| 亚洲色图第一页| 色婷婷国产精品| 国内精品视频在线播放| 中文文字幕一区二区三三| 欧美日韩亚洲三区| 伊人成人开心激情综合网| 成人啪啪18免费游戏链接| 欧美日韩激情电影| 亚洲国产日韩一区二区| 亚洲精品高清视频| 午夜视频免费看| 国产一区二区久久| 国产成人精品优优av| 久久97人妻无码一区二区三区| 九九久久婷婷| 亚洲精品在线网站| 1314成人网| 国产免费不卡| 精品福利一区二区| 精品一二三四五区| 国产激情视频在线观看| 国产日韩综合av| 韩日午夜在线资源一区二区| av在线资源观看| 毛片av一区二区| 国产91色在线免费| 91美女免费看| 亚洲手机在线| 欧美激情精品久久久久| 欧美偷拍第一页| 日韩在线综合| 爽爽爽爽爽爽爽成人免费观看| 五月婷婷综合在线观看| 精品三级av| 日韩片之四级片| 日韩视频在线观看一区二区三区| 国产成人久久精品麻豆二区| 日本高清不卡aⅴ免费网站| 999在线观看视频| 在线视频中文字幕第一页| 欧美激情一区二区在线| 日韩精品久久久| 日本一二三区在线视频| aaa欧美日韩| 99在线看视频| 国产福利小视频| 国产一区二区三区的电影| 欧美激情xxxx性bbbb| 极品魔鬼身材女神啪啪精品| 日韩中文在线电影| 日韩中文字幕网址| 极品人妻videosss人妻| 欧美精品momsxxx| 亚洲免费视频观看| 国产精品无码久久久久久| 免费看成人人体视频| 亚洲第一男人av| 尤物网站在线观看| 色天下一区二区三区| 欧美一二三四区在线| 麻豆短视频在线观看| 亚洲电影一区| 亚洲成在人线av| 国产激情第一页| 同性恋视频一区| 亚洲精品一区二区三区在线观看| 国产激情视频网站| 欧美女优在线视频| 中文字幕欧美日韩va免费视频| 色欲AV无码精品一区二区久久| 美女毛片一区二区三区四区| 亚洲天堂久久av| 奇米网一区二区| 天天做天天爱天天综合网| www.xxxx欧美| 免费一级肉体全黄毛片 | 国产日韩欧美在线观看| 中文字幕一区二区久久人妻| 免费观看在线色综合| 国产精品精品久久久| 国产精品久久久久久久成人午夜| 国产老妇另类xxxxx| 国产精品精品软件视频| 婷婷av一区二区三区| 国产亚洲欧美激情| 亚洲三区四区| 手机av免费在线| 精品av在线播放| 奇米影视四色在线| 久久免费精品| 亚洲精品色婷婷福利天堂| 欧美精品丝袜久久久中文字幕| 精品在线观看免费| 福利一区和二区| 中文字幕男人天堂| 欧美xxxxx在线视频| 国产va免费精品高清在线观看| 亚洲美女精品一区| 欧美剧情片在线观看| 欧美中日韩在线| 一个人看的www视频在线免费观看| 亚洲成人7777| 天天摸天天碰天天添| 日本少妇一区| 精品久久久久香蕉网| 无码熟妇人妻av| 国产精品传媒精东影业在线| 97精品在线视频| 中文字幕人妻一区二区三区视频| 成人激情午夜影院| 杨幂一区欧美专区| 澳门成人av网| 日韩三级免费观看| a资源在线观看| 在线亚洲成人| 97人摸人人澡人人人超一碰| 四虎精品在永久在线观看| 国产精品丝袜一区| 国产97在线 | 亚洲| 日本欧美在线| 亚洲欧美精品中文字幕在线| 91在线播放观看| 美腿丝袜亚洲综合| 欧美不卡福利| 国精产品一区一区三区mba下载| 欧美系列日韩一区| 国产精品九九九九九| 红桃视频国产一区| 91久久综合亚洲鲁鲁五月天| 丰满岳乱妇国产精品一区| 欧美极品少妇xxxxⅹ高跟鞋| 日韩a在线播放| www.国产精品一区| 欧美wwwxxxx| 亚洲在线免费观看视频| 久久色视频免费观看| 给我免费播放片在线观看| 一区视频网站| 超碰日本道色综合久久综合| 一级黄色大毛片| 中日韩av电影| 欧美黄色性生活| 欧美系列电影免费观看| 欧洲精品毛片网站| 日本亚洲欧美| 日韩欧美主播在线| 深爱五月激情网| 美女精品一区| 日本不卡一区| 台湾佬成人网| 国产一区二区免费| 中国女人真人一级毛片| 欧美激情中文字幕一区二区| 欧美一级黄色影院| 久久一级电影| 成人福利在线观看| 成人福利在线观看视频| 7777精品伊人久久久大香线蕉完整版| 亚洲码无人客一区二区三区| 日韩在线观看一区二区| 亚洲一卡二卡三卡| 国产电影一区二区| 欧美理论电影在线观看| 成人免费视频国产免费麻豆| 亚洲h精品动漫在线观看| 成熟妇人a片免费看网站| 亚洲在线观看| 日韩在线观看电影完整版高清免费| 精品国产欧美日韩一区二区三区| 这里只有精品视频在线| 国产精品久久综合青草亚洲AV| 亚洲品质自拍视频| av在线播放网址| 久久先锋影音| youjizz.com亚洲| 成人av影音| 欧美一区三区三区高中清蜜桃| 色综合久久网女同蕾丝边| 在线看国产日韩| 免费高清在线观看电视| 懂色av一区二区夜夜嗨| 久久久亚洲精品无码| 国产videos久久| 成人黄色短视频在线观看| 久草成色在线| 亚洲人成网7777777国产| 亚洲综合免费视频| 亚洲第一在线综合网站| 国产精品久久久久久久av| 精品一区二区三区的国产在线播放| 亚洲欧美一二三| 欧洲亚洲一区二区三区| 国产精品自拍偷拍视频| 国产探花在线观看| 亚洲天堂第二页| 亚洲卡一卡二卡三| 欧美午夜电影在线播放| 免费在线观看黄色av| 97国产精品videossex| 欧美在线观看视频网站| 欧美日韩视频| 神马影院我不卡| 91综合久久爱com| 国产精品va在线| av在线麻豆| 亚洲男人的天堂在线| 国产露脸国语对白在线| 在线观看三级视频欧美| 亚洲一区欧美在线| 成人欧美一区二区三区在线播放| 黄色片视频免费观看| 国产麻豆视频一区| 欧美三级午夜理伦三级| 亚洲国产免费看| 中文字幕综合在线观看| 亚洲人成亚洲精品| 国产精品成人观看视频免费| 日本午夜免费一区二区| 欧美在线观看网址综合| 密臀av在线| 欧美wwwxxxx| av免费在线一区二区三区| 亚洲精品影视在线观看| 欧美一级特黄aaaaaa大片在线观看| 欧美日韩综合在线免费观看| 一级做a爰片久久毛片| 亚洲一卡二卡三卡四卡无卡久久| youjizz亚洲女人| 久久久久99精品国产片| 欧美大片免费播放器| 国产精品一区二区三区网站| 樱花草www在线| 美美哒免费高清在线观看视频一区二区 | 97色伦亚洲国产| av电影免费在线观看| 亚洲丝袜av一区| h视频网站在线观看| 国产亚洲视频在线| 国产综合在线观看| 亚洲欧美国产精品| 欧美在线观看在线观看| 日韩av在线不卡| 三级在线观看网站| 亚洲成av人乱码色午夜| 成人午夜免费福利| 日韩欧美在线综合网| 国产成人精品一区二区无码呦| 欧美一区二区三区免费大片| 国产精品视频a| 欧美一区二区三区爱爱| 精品国产av一区二区三区| 91精品国产全国免费观看 | 欧美绝品在线观看成人午夜影视| 日本中文字幕在线观看视频| 在线观看成人免费视频| 伊人网av在线| 3d动漫精品啪啪1区2区免费| 国产一区二区三区三州| 555夜色666亚洲国产免| 99精品在线看| 亚洲精品一区二区三区99| 99精品人妻无码专区在线视频区| 精品国产乱码久久久久久老虎| 三级小视频在线观看| 在线观看精品国产视频| 日本三级视频在线播放| 久久成人这里只有精品| av资源在线看片| 欧美最近摘花xxxx摘花| 成人国产一区二区三区精品麻豆| 91久久久久久久一区二区| 日韩免费高清视频网站| 激情久久av| 欧美日韩第一| 超碰97在线看| 欧美亚洲网站| 亚洲欧美手机在线| 成人高清视频在线| 手机免费看av| 樱花影视一区二区| 特级西西444www大精品视频免费看| 日本道精品一区二区三区| 国产精品爽爽久久| 亚洲电影免费观看| 成年人在线观看| 欧美寡妇偷汉性猛交| 草草在线视频| 国产日产欧美精品| 日韩影视在线观看| 26uuu成人| 亚洲青色在线| 天天干天天操天天玩| 激情久久五月天| 一级特级黄色片| 国产精品电影院| 日韩福利片在线观看| 欧美日韩美少妇| 午夜视频免费在线| 欧美成年人网站| 精品欧美一区二区三区在线观看| 国产欧美亚洲精品| 91成人午夜| 一区二区在线中文字幕电影视频| 禁久久精品乱码| 一级特黄性色生活片| 成人免费毛片a| 三上悠亚在线观看视频| 欧美色xxxx| 国产精品久久久久久免费 | 亚洲午夜精品一区二区国产 | 黄色av片三级三级三级免费看| 艳妇臀荡乳欲伦亚洲一区| 青青国产在线视频| 精品电影一区二区三区 | 日本一道高清亚洲日美韩| 亚洲一区二区三区乱码aⅴ| 欧美日韩一区二区三区视频播放| 成人黄色大片网站| 国产一区999| 国产一二三av| 一本色道久久综合亚洲aⅴ蜜桃| 性欧美18一19性猛交| 日韩综合中文字幕| 欲香欲色天天天综合和网| 精品视频一区在线| 国产精品久久| 国产又粗又猛大又黄又爽| 中文字幕一区日韩精品欧美| 波多野结衣一区二区三区在线| 亚洲国产精品热久久| av免费看在线| 亚洲伊人第一页| 希岛爱理av一区二区三区| 亚洲综合色在线观看| 中文字幕不卡的av| 特级西西444www高清大视频| 亚洲人高潮女人毛茸茸| 男人久久天堂| 国产一区二区三区高清| 欧美午夜精品| 欧美成人精品一区二区综合免费| 亚洲日本成人在线观看| 国产强被迫伦姧在线观看无码| 亚洲欧洲激情在线| 成人天堂yy6080亚洲高清| 欧美最大成人综合网| 久久先锋影音| 国产精品久久免费观看| 在线观看一区二区视频| 国产在线三区| 国产精品日韩欧美| 国产精品麻豆久久| 国产成人强伦免费视频网站| 亚洲精品你懂的| 国产欧美久久久| 久久男人资源视频| 日本一道高清一区二区三区| 茄子视频成人免费观看| 久久久国产精品午夜一区ai换脸| 亚洲天堂视频网站| 中文在线不卡视频| 成人豆花视频| 无码人妻精品一区二区蜜桃百度| 国产一区二区三区美女| 日韩激情在线播放| 亚洲欧美激情精品一区二区| 日韩欧美一区二区三区免费观看 | 欧美成在线观看| 97久久亚洲| 四虎永久在线精品无码视频| 2欧美一区二区三区在线观看视频| 久久精品视频5| 北条麻妃一区二区三区中文字幕| 精品一区91| 免费看日本毛片| 国产精品毛片高清在线完整版| 伊人免费在线观看| 久久久久久噜噜噜久久久精品| 小嫩嫩12欧美| 午夜视频在线网站| 亚洲444eee在线观看| 黄色大片在线看| 成人欧美一区二区| 久久亚洲美女| 亚洲av鲁丝一区二区三区| 日韩电视剧在线观看免费网站| 色猫猫成人app| 麻豆传媒网站在线观看|