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

餓了么輕量級分布式時序數據庫的設計與探索!

數據庫 其他數據庫 分布式
餓了么對時序數據庫的需求主要來自各監控系統,主要用于存儲監控指標。原來使用的是graphite,后來慢慢對指標有了多維的需求,主要體現在對一個指標加多個Tag來組成Series,然后對Tag進行Filter和Group進行計算,這時graphite基本很難滿足需求。

 

 

作者介紹黃杰,2015年加入餓了么,現任框架工具部高級開發經理,主要負責餓了么的監控系統及監控系統周邊的工具。

一、背景

餓了么對時序數據庫的需求主要來自各監控系統,主要用于存儲監控指標。原來使用的是graphite,后來慢慢對指標有了多維的需求,主要體現在對一個指標加多個Tag來組成Series,然后對Tag進行Filter和Group進行計算,這時graphite基本很難滿足需求。

業界現在用的比較多的主要有如下幾類TSDB:

  • InfluxDB:很多公司都在用,包括餓了么有部分監控系統也是用的InfluxDB。其優點在于支持多維和多字段,存儲也根據TSDB的特點做了優化,不過開源的部分并不支持。很多公司自己做集群化,但大多基于指標名來,這樣就會有單指的熱點問題。現在餓了么也是類似的做法,但熱點問題很嚴重,大的指標已經用了***的服務器,可查詢性能還是不夠理想,如果做成按Series Sharding,那成本還是有一點高;
  • Graphite:根據指標寫入及查詢,計算函數很多,但很難支持多維,包括機房或多集群的查詢。原來餓了么把業務層的監控指標存儲在Graphite中,并工作的很好,不過多活之后基本已經很難滿足一些需求了,由于其存儲結構的特點,很占IO,根據目前線上的數據寫放大差不多幾十倍以上;
  • OpenTSDB:基于HBase,優點在于存儲層不用自己考慮,做好查詢聚合就可以,也會存在HBase的熱點問題等。在以前公司也用基于HBase實現的TSDB來解決OpenTSDB的一些問題, 如熱點、部分查詢聚合下放到HBase等,目的是優化其查詢性能,但依賴HBase/HDFS還是很重;
  • HiTSDB:阿里提供的TSDB,存儲也是用HBase,在數據結構及Index上面做了很多優化,具體沒有研究,有興趣的同學可以在阿里云上試一下;
  • Druid:Druid其實是一個OLAP系統,但也可以用來存儲時間序列數據,不過看到它的架構圖時已經放棄了;
  • ElasticSearch(ES):也有公司直接用ES來存儲,沒有實際測試,但總覺得ES不是一個真正的TSDB;
  • atlas:Netflix出品,全內存TSDB,最近幾小時數據全在內存中,歷史數據需要外部存儲,具體沒有詳細研究;
  • beringei:Facebook出品,同樣是全內存TSDB,最近的數據也在內存,目前應該還在孵化期。

最終我們還是決定自己實現一套分布式時序數據庫,具體需要解決如下問題:

  • 輕量,目前只依賴于Zookeeper;
  • 基于Series進行Sharding,解決熱點,可以真正水平擴展;
  • 實時寫入、實時查詢,由于大多用于監控系統,所以查詢性能要好;
  • 由于餓了么目前是多活,監控系統也是多活,所以要支持單機房寫入,多機房聚合查詢等;
  • 要有自動的Rollup功能,如用戶可以寫10s的精度,系統自動Rollup到分鐘、小時、天級別,以支持大時間范圍的查詢,如報表等;
  • 支持類SQL的查詢方式;
  • 支持多副本,以提高整個系統的可靠性,只要還有一個副本存活就可以正常提供服務,副本數指定。

二、整體設計

采用計算和存儲分離的架構,分為計算層LinProxy和存儲層LinStorage。

說明:

  • LinProxy主要做一些SQL的解析及一些中間結合的再聚合計算,如果不是跨集群,LinProxy可以不需要,對于單集群的每個節點都內嵌了一個LinProxy來提供查詢服務;
  • LinDB Client主要用于數據的寫入,也有一些查詢的API;
  • LinStorage的每個節點組成一個集群,節點之間進行復制,并有副本的Leader節點提供讀寫服務,這點設計主要是參考Kafka的設計,可以把LinDB理解成類Kafka的數據寫入復制+底層時間序列的存儲層;
  • LinMaster主要負責database、shard、replica的分配,所以LinStorage存儲的調度及MetaData(目前存儲Zookeeper中)的管理;由于LinStorage Node都是對等的,所以我們基于Zookeeper在集群的節點選一個成為Master,每個Node把自身的狀態以心跳的方式上報到Master上,Master根據這些狀態進行調度,如果Master掛了,自動再選一個Master出來,這個過程基本對整個服務是無損的,所以用戶基本無感知。

1、寫入

整個寫過程分為如下2部分組成:

  • WAL復制,這部分設計上參考了Kafka,用戶的寫入只要寫入WAL成功,就認為成功(由于主要用于監控系統,所以對數據的一致性沒有做太多的保證),這樣就可以提供系統的寫入吞吐;
  • 本地寫入,這個過程是把WAL的數據解析寫入到自己的存儲結構中,只有寫入本地存儲的數據才可以查到。

整個過程不像一些系統在每次寫的過程中完成,我們是把這個過程分2步,并異步化了。

WAL復制

目前LinDB的replica復制協議采用多通道復制協議,主要基于WAL在多節點之間的復制,WAL在每個節點上的寫入有獨立的寫操作完成,所以對于Client寫入對應Leader的WAL成功就認為本次寫操作是成功的,Leader所在的節點負責把相應的WAL復制到對應的Follower,同理寫WAL成功認為復制成功,如下所示:

多通道復制協議

寫入Leader副本成功就算成功,提高了寫入速率,也帶來了以下問題:

  • 數據一致性的問題;
  • 數據的丟失問題。

以上圖Server1為Leader,3個Replication來復制1-WAL為例來說:

當前Server1是該shard的Leader接受Client的寫入,Server2和Server3都是Follower接受Server1的復制請求,此時1-WAL通道作為當前的數據寫入通道,Server2和Server3可能落后于Server1。

說明:

整個過程需要注意以下幾個Index:

  • Client寫入時的Append Index,表示當前Client寫入到哪里;
  • 對應每個Follower都會有一個Replica Index,表示對應Follower消費Leader上面同步到哪里;
  • Follower的Ack Index,表示Follower已經成功復制到本地的WAL;
  • 對于Follower的復制請求,其實相當于一個特殊Client的寫入,所以也有一個對應的Append Index。

只有被Ack過的Index,才標示為已經處理完成,對于Leader來說,小于最小的Ack Index的WAL數據是可以被刪除。在這個過程中,如果Server2或者Server3中有一臺出問題,這時對應的Consume Index不會移動,只有等到相應服務恢復之后才會繼續處理。

在整個過程中可能出現如下情況:

  • Leader Replica Index > Follower Append Index,這時需要根據Follower Append Index重置Leader Replica Index,可能存在2種情況,具體情況在復制順序性中描述;
  • Leader Replica Index <>

假如此時Server1掛了,從Server2和Server3中選出新的Leader,如此時選為Server2為Leader:

  • Server2就會開啟2-WAL復制通道,向Server1和Server3復制,由于當前Server1掛了,所以暫時只往Server3復制,此時數據的寫入通道為2-WAL;
  • Server1啟動恢復后,Server2會開啟向Server1的2-WAL復制通道,同時Server1會將1-WAL中剩余的還未向Server2和Server3復制的數據復制給它們。

對于異常情況,WAL中的數據不能正常,由于ACK之后刪除導致WAL占用過多磁盤,所以對WAL需要有一個SIZE和TTL的清理過程,一旦WAL因為SIZE和TTL清理之后,會導致幾個Index錯亂,具體錯亂情況如上所述。

多通道復制協議帶來的問題:

每個通道都有對應的Index序列,保存每個通道的Last Index。而單通道復制只需要保存1個Last Index即可。這個代價其實還好。

本地寫入

背景

做到Shard級別的寫入隔離,即每個Shard都會有獨立的線程來負責寫入,不會因為某個數據庫或者某個Shard寫入量劇增而導致別的數據庫的寫入,但可能會因為單機承載的Shard數過多導致線程數過多。如果遇到這種情況,應該通過擴機器來解決,或者在新建數據庫的時候合理分配Shard數。

由于是單線程的寫操作,所以在很多情況下,不需要考慮多線程寫帶來的鎖競爭問題。

數據存儲結構

說明,以單個數據庫在單節點上的數據結構為例:

  • 一個數據庫在單節點上會存在多個Shard,所有Shard共享一個索引數據;
  • 所有的數據根據數據庫的Interval來計算按時間片,存儲具體的數據,包括數據文件和索引文件。

這樣的設計主要為了方便處理TTL,數據如果過期,直接刪除相應的目錄就可以。每個Shard下面會存在segment,segment根據Interval來存儲相應時間片的數據。

那么為什么每個segment下面又按Interval存儲很多個data family?

這個主要由于LinDB主要解決的問題是存儲海量的監控數據,一般的監控數據基本是***時間寫入,不會寫歷史數據,而整個LinDB的數據存儲類似LSM方式,所以為了減少數據文件之間的合并操作導致寫放大,最終衡量下來,再對segment時間片進行分片。

下面以Interval為10s為例說明:

  • segment按天來存儲;
  • 每個segment按小時來分data family,每個小時一個family,每個family中的文件再按列存儲具體的數據。

寫入流程

說明:

  • 系統會為每一個Shard啟一個寫線程,該線程負責這個Shard的所有寫操作。
  • 首先把measurement,tags,fields對應的數據寫入數據庫的索引文件,并生成相應的Measurement ID,Time Series ID及Field ID,主要完成string->int的轉換。這樣的好處是所有的數據存儲都以數據類型來存儲,從而可以減少整個存儲大小。因為對于每個數據點,Measurement,Tags,Field這樣元數據占用,如cpu{host=1.1.1.1} load=1 1514214168614,其實轉換成ID之后,cpu => 1(measurement id),host=1.1.1.1 => 1(time series id),load => 1(field id),所以最終的數據存儲為1 1 1514214168614=>1,這個考慮OpenTSDB的設計。
  • 如果寫索引失敗,認為本次寫入失敗。失敗分為2種,一種是數據寫入格式有問題,這類失敗直接標示失敗;另外一種由于內部問題,這時寫入失敗需要重試。
  • 使用根據索引得到的ID,再結合寫入時間和數據庫Interval計算,得到需要寫入到哪個segment下的哪個family,寫family的過程,直接寫內存以達到高吞吐量的要求,內存數據到達內存限制之后,會觸發Flush操作。
  • 整個寫過程先寫內存,再由Flusher線程把內存中的數據dump到相應的文件中,這樣就做到了對一批數據順序寫入,同時對于最近的數據根據Field Type進行Rollup操作,從而進一步減少磁盤IO操作。

2、查詢引擎

LinDB查詢需要解決如下問題:

  • 解決多個機房之間的查詢;
  • 高效的流式查詢計算。

說明:

  • 由于需要支持多機房或者多集群的查詢,所以引入了LinProxy,LinProxy主要負責面向用戶的查詢請求;
  • SQL Plan負責具體SQL的解析,生成最終的執行計劃及需要計算的中間結果的函數;
  • 通過Zookeeper中的Metadata,把請求路由給具體的LinDB集群中對應的服務;
  • 每個LinConnect負責與一個LinDB集群之間的通信,每個LinConnect內部保存了一份對應集群的Metadata,該Metadata信息在每個Metadata變更的時候由Server端推送給LinConnect,這樣LinConnect基本做到近實時的更新Metadata;
  • Aggregator Stream主要負責把各個LinConnect的中間結果進行最終的合并計算操作;
  • 整個LinProxy處理過程都是異步化,這樣可以利用線程在IO等待的時候做計算。

每個Node接收LinConnect過來的請求,在內部查詢計算成中間結果返回給LinConnect,詳細的過程后面要介紹。

Node查詢

說明:

  • 如圖所示,Client過來的一個查詢請求,會產生很多小的查詢任務,每個任務所承擔的職責很單一,只做它所自己的任務,然后把結果給下一個任務,所以需要所有的查詢計算任務都是異常無阻塞處理,IO/CPU任務分離;
  • 整個服務端查詢使用Actor模式來簡化整個Pipeline的處理;
  • 任何一個任務執行完成,如果沒有結果產生,則不會生產下游的任務,所有下游的任務都是根據上游任務是否有結果來決定;
  • 最終把底層結果通過Reduce Aggregate聚合成最終的結果。

3、存儲結構

倒排索引

倒排索引分兩部分,目前索引相關的數據還是存儲在RocksDB中。

  • 根據Time Series的Measurement+Tags生成對應的唯一ID(類似Luence里面的doc ID);
  • 根據Tags倒排索引,指向一個ID列表。TSID列表以BitMap的方式存儲,以方便查詢的時候通過BitMap操作來過濾出想要的數據。BitMap使用RoaringBitMap;
  • 每一類數據都存儲在獨立的RocksDB Family中。

內存結構

為了提高寫入性能,把當前一段時間的數據寫入到內存中,內存到達一定限制或者時間后把內存中的數據Dump到文件中。

內存存儲分為當前可寫和不可寫,當前可寫用于接收正常的數據寫入,不可寫用于Dump到文件中,如果Dump成功,則清空不可寫部分。

如果可寫的Memory Table也到達了內存容量的限制,但不可寫部分還沒有完成Dump,這時寫入會被Block住,直到有可用的內存供數據寫入,目的是為了不會因為占用過多內存而導致OOM。

MemoryTable內部通過一個Map來存儲Measurement ID→Measurement Store關系,即每個Measurement都存儲在一個獨立的Store中。

在Measurement Store內存儲對應Measurement下面每個TSID的數據,每個TSID對應的數據用一個Memory Block來存儲,每個Memory Block按TSID的順序存儲在Array List中,把TSID存儲在一個BitMap中,通過TSID在Bitmap中位置來定位Memory Block在Array List中的具體位置。

這里說明一下為什么不直接使用Map來存儲,因為整個系統是用Java實現的,Java中的Map結構不適合存儲小對象的數據,存在內存放多倍的存儲。

由于每個TSID都會對應一個時間線,每個時間線可能會存在多個數據點的情況,如count時只有一個count值,timer時會有count、sum、min、max等多個值。

每個數據類型以Chunk的方式存儲。Chunk內部又以堆內和堆外2部分內存來存儲,最近一段時間的數據放在堆內,歷史數據壓縮之后放在堆外,在內存中盡量多放一些最近的數據,因為LinDB的目的主要是存儲一些監控類的數據,而監控類的數據主要關心最近一段時間的數據。

文件存儲結構

文件存儲跟內存存儲類似,同一個Measurement的數據以Block的方式存儲在一起,查詢時通過Measurement ID定位出該Measurement的數據存儲在哪個Block中。

  • Measurement Block后存儲一個Offset Block,即存儲每個Measurement Block所在的Offset,每個Offset以4 bytes存儲。
  • Offset Block存儲一個Measurement Index Block,按順序存儲每個Measurement ID,以Bitmap的方式存儲。
  • 文件的尾存儲一個Footer Block,主要存儲Version(2 bytes) + Measurement Index Offset(4 bytes) + Measurement Index Length(4 bytes)。
  • Data數據塊都是數值,所以使用xor壓縮,參考facebook的gorilla論文;

Measurement Block:

  • 每個Measurement Block類似Measurement的方式存儲,只是把Measurement ID換成Measurement內的TSID。
  • TS Entry存儲該TSID對應每一列的數據,一列數據對應存儲一段時間的數據點。

查詢邏輯:

  • DataFile在***次加載的時候會把Measurement Index放在內存中,查詢輸入Measurement ID通過Measurement Index中的第幾個位置,然后通過這個位置N,在Offset Block查詢具體的Measurement Block的Offset,由于每個Offset都是4 bytes,所以offset position = (N-1) * 4,再讀取4 bytes得到真正的Offset。
  • 同樣的道理可以通過TSID,找到具體的TS Entry,再根據條件過濾具體的列數據,最終得到需要讀取的數據。

三、發展歷程

LinDB從2年前正式慢慢服務于公司的監控系統起,從1.0發展到2.0,已經穩定運行2年多,除了一次RocksDB的問題,幾乎沒出過什么問題。到現在,3.0性能大幅提升,我們基本都是站在業界一些成熟方案的基礎上,慢慢演進而來。

也有人問,LinDB為什么這么快,其實我們是參考了很多TSDB的作法,然后取其好的設計,再結合時序的特征做一些優化。

  • 時序一般都是***寫入,但也是一種隨機寫,我們會先在內存中把隨寫變成循序寫,最終到寫文件都是順序寫,所有數據都是有序,這樣查詢的時候也是順序讀,這一點很關鍵;
  • 把寫入的measurement/tags/fields都轉化成Int,再生成倒排索引,最終生成一個TSID(類似Luence的doc ID),這樣就大大減少了最終的數據量,畢竟指標這樣字符串是占絕對的大頭,這點很像OpenTSDB,雖然InfluxDB已經把一段時間的按Block來存儲,但還是在Block的頭放這些數據,這些都是成本,特別是在compact的時候;
  • 不像別的TSDB會把timestamp直接存下來,一般timestamp到毫秒級別占8個節點,雖然根據時間有序的優勢再用delta-encoded壓縮也是很好,但我們想做到***,我們是用一個bit來表示時間,具體的做法就是根據上面的描述,把時間的高位和存儲Interval,把高位的時間放在目錄上,再結合高位算一個delta,把delta以1bit的格式存儲,來表示有沒有數據,因為監控數據絕大部分都是連續的數據, 所以這樣做也是合理的,因此在時間這個數據上的存儲也大大減少了空間;
  • 我們發現對一個指標的多個Field的數據,每個Field的數據相鄰的一些點基本是很相近的,LinDB 2.0存儲直接是用RocksDB,多個Field放在一起存儲,再把相鄰的點進行壓縮,這樣其實壓縮率不會很高, 而且每取查詢取Field的時候都要把所有的數據讀出來,這也是LinDB 3.0我們考慮自己實現列式存儲的原因。我們把相同列存在一塊,以提高壓縮率,查詢的時候只讀需要的數據。整個壓縮我們也沒有用gzip、snappy、zlib,因為這些不大適合用于數值類型,我們是直接參考了facebook的gorilla論文的xor的方式來的,這個現在已經被很多TSDB采用;
  • 基于上面這些基本的順序讀已經不成問題,基于TSID查詢的更不是問題,因為整個設計都是基于TSID→data來設計的,所以還要解決一個根據倒排查出一組TSID對數據的隨機讀,如上我們是把TSID放在Bitmap,然后通過Bitmap計算出Offset,直接找到數據,通過存儲時的優化,做到TSID查詢精準查找,而不是通過二分查找;
  • 還有一點就是LinDB在新建數據庫時指定完Interval之后,系統會自己Rollup,不像InfluxDB要寫很多Continue Query,LinDB所有的這一切都是自動化的;
  • 查詢計算并行流式處理。

所以用一句話來總結就是——一個高效的索引外加一堆數值,然后怎么玩好這堆數值。

自身監控

LinDB也自帶了自身的一些監控功能:

Overview

Dashboard

未來的展望

  • 豐富查詢函數;
  • 優化內存使用率;
  • 自身監控的提升;
  • 如果有可能,計劃開源。

對比測試

下面是與InfluxDB和LinDB2.0的一些查詢性能對比。由于InfluxDB集群化要商業版,所以都是單機默認配置下,無Cache的測試。服務器配置阿里云機器:8 Core 16G Memory

大維度

Tags:host(40000),disk(4),partition(20),模擬服務器磁盤的監控,總的Series數為320W,每個Series寫一個數據點:

小維度的1天內的聚合測試

Tags:host(400),disk(2),partition(10),模擬服務器磁盤的監控,總的Series數為8K,每個Series寫一天的數據 每個維度每2s寫入1個點,每個維度一天內總共43200個點,所有維度總共43200 * 8000個點,共345600000即3億多數據:

小維度的7天內的聚合測試

Tags:host(400),disk(2),partition(10),模擬服務器磁盤的監控,總的Series數為8K,每個Series寫7天的數據,每個維度每5s寫入1個點,每個維度一天內總共17280個點,所有天數所有維度總共172808000 7 個點,即967680000,9億多個點。

這個測試要說明一下,得利于LinDB自動的Rollup,如果InfluxDB開Continue Query的話相信應該也還好。

 

 

責任編輯:龐桂玉 來源: 快資訊
相關推薦

2019-05-30 08:31:39

數據庫QTSDB分布式

2018-04-19 14:47:19

時序數據庫HiTSDB

2017-11-20 11:37:19

時序數據數據存儲HBase

2022-07-06 15:41:55

數據庫

2018-01-03 09:57:19

異地雙活數據庫

2022-09-23 07:44:48

時序數據庫物聯網

2023-08-27 16:11:35

數據庫分布式事務數據庫

2021-03-08 10:18:55

數據庫數據Prometheus

2021-03-15 10:10:29

數據庫數據查詢

2024-04-29 08:42:23

2015-06-17 14:10:34

Redis分布式系統協調

2021-09-26 10:08:33

TSDB時序數據庫壓縮解壓

2023-10-16 09:00:00

數據庫分布式系統

2014-06-30 14:20:05

NoSQL數據庫

2020-03-11 09:50:21

時序數據庫快速檢索

2021-08-30 11:21:03

數據庫工具技術

2024-04-08 11:04:03

2023-12-18 10:24:59

2022-07-11 10:45:12

數據庫分析
點贊
收藏

51CTO技術棧公眾號

国产精品久久久久久免费观看| 最近2019年手机中文字幕 | www.国产视频.com| 黄网站在线免费| 成人精品免费视频| 国产99久久精品一区二区| 网爆门在线观看| 白白在线精品| 欧美性高清videossexo| 奇米777四色影视在线看| 青青视频在线观| 极品美女销魂一区二区三区免费| 国内精品免费午夜毛片| 欧美波霸videosex极品| 91午夜精品| 欧美日韩一区小说| 欧美亚洲一二三区| 黄色网页在线看| 久久久精品2019中文字幕之3| 国产在线高清精品| 日韩欧美三级视频| 中文字幕一区二区三区乱码图片| 亚洲欧美日韩精品久久亚洲区 | 久久久999国产| 国产艳俗歌舞表演hd| 996久久国产精品线观看| 色综合久久66| 2019日韩中文字幕mv| 9色在线视频| 26uuu久久综合| 99热99热| 国产视频一区二区三| 日韩成人一级片| 97av视频在线| 国产一级淫片免费| 亚洲综合色网| 中日韩美女免费视频网站在线观看| 国产又黄又粗又猛又爽的视频| 欧美国产亚洲精品| 在线播放国产精品二区一二区四区| 国产日韩一区二区在线观看| 国产福利电影在线播放| 亚洲一区二区三区四区在线观看| 在线观看欧美亚洲| 91电影在线播放| 国产欧美综合色| 久久精品日产第一区二区三区精品版| 成人午夜免费在线观看| 国产精品一级黄| 亚洲精品免费网站| 国产精品国产一区二区三区四区 | 中文字幕在线播放| 2020国产精品自拍| 久久久com| 青春草在线观看| 91日韩一区二区三区| 久久精品中文字幕一区二区三区 | 自拍偷拍欧美亚洲| 亚洲全部视频| 97国产精品免费视频| www.天天色| 亚洲电影成人| 97免费中文视频在线观看| 国产真实夫妇交换视频| 亚洲伦理中文字幕| 成人精品视频久久久久| 亚洲婷婷综合网| 一区二区三区福利| 97视频在线看| 国产乱国产乱老熟| 男女精品网站| 国产精品国模在线| 欧美三级网站在线观看| 奇米在线7777在线精品| 国产精品久久久久久久av大片| 中文字幕在线天堂| 免费不卡在线视频| 成人精品视频99在线观看免费| 91精品国自产| 国产精品一二二区| 爱情岛论坛亚洲入口| 国精产品乱码一区一区三区四区| 成人黄色一级视频| 欧美精品亚洲| 日本最黄一级片免费在线| 亚洲丝袜自拍清纯另类| www.国产在线播放| www.成人爱| 欧美视频完全免费看| 搡的我好爽在线观看免费视频| 亚洲1区在线| 日韩毛片中文字幕| 91香蕉视频网| 国一区二区在线观看| 4p变态网欧美系列| 中文字幕人妻互换av久久| 国产在线视频一区二区三区| 精品日韩电影| 自拍视频在线免费观看| 亚洲国产精品麻豆| 91国产精品视频在线观看| 中文字幕久久精品一区二区 | 国内揄拍国内精品| 久久国产乱子伦精品| 精品亚洲国产成人av制服丝袜| 国产高清一区视频| www.黄在线观看| 亚洲一区在线观看视频| 玩弄japan白嫩少妇hd| 久久在线观看| 亚洲色图13p| 国产一级在线视频| 久久精品国产亚洲aⅴ| 国产私拍一区| 香蕉视频在线播放| 欧美色视频日本版| 99国产精品免费视频| 国产午夜一区| 久久久伊人欧美| 国产精品老熟女视频一区二区| 91一区二区在线观看| 亚洲高潮无码久久| 影音成人av| 亚洲美女自拍视频| 精品视频久久久久| 国产一区二区在线看| 日韩久久精品一区二区三区| 激情aⅴ欧美一区二区欲海潮| 91精品国产欧美一区二区| 国产ts在线播放| 极品日韩av| 91国产丝袜在线放| 9色在线视频网站| 欧美小视频在线| www.四虎精品| 中文字幕一区二区三区久久网站 | youjizz在线视频| 国产69精品久久久久毛片| 一级日韩一区在线观看| 日韩在线影院| 日韩乱码在线视频| 免费在线观看黄网站| 成人av资源网站| 黄网站色视频免费观看| 成人在线啊v| xxxxx成人.com| 亚洲怡红院av| 国产精品美女www爽爽爽| www.男人天堂网| 欧美日韩免费高清| 欧美xxxx黑人又粗又长| 欧美日韩精品三区| 国产一区二区三区四区五区六区 | 亚洲欧美日韩视频一区| www成人在线| ww亚洲ww在线观看国产| 国产精品国产亚洲精品看不卡| 1204国产成人精品视频| 欧美激情视频免费观看| 风流少妇一区二区三区91| 亚洲综合激情另类小说区| 男插女视频网站| 欧美1区3d| 成人在线观看av| 91九色在线看| 亚洲精品动漫100p| 特级做a爱片免费69| 久久色在线视频| 欧美精品无码一区二区三区| 欧洲grand老妇人| 国产精品自产拍在线观| 欧美三级理伦电影| 日韩一卡二卡三卡| 国产乱码久久久久久| 99国内精品久久| 国产精品无码av无码| 日韩欧美伦理| 91在线播放视频| 91www在线| 亚洲欧美在线看| 亚洲天堂avav| 亚洲精品国产视频| 欧美黑人欧美精品刺激| 免费不卡在线视频| 成人区一区二区| 一区二区三区韩国免费中文网站| 国产精品欧美风情| 色yeye免费人成网站在线观看| 亚洲精品久久久一区二区三区| 中文字幕在线观看视频网站| 中文字幕乱码一区二区免费| 999久久久精品视频| 亚洲巨乳在线| 一区二区成人国产精品| 久久a级毛片毛片免费观看| 国产精品爱久久久久久久| 国产乱色在线观看| 日韩精品小视频| 97在线视频人妻无码| 欧美日韩国内自拍| 成人无码精品1区2区3区免费看| 国产99久久久国产精品免费看| 99精品免费在线观看| 欧美韩日精品| 五月婷婷综合色| 国产一区调教| 国产欧美在线播放| 8x8ⅹ拨牐拨牐拨牐在线观看| 亚洲色图50p| 欧美熟妇交换久久久久久分类 | 91av视频在线观看| 日本精品一区二区三区在线播放| 日韩精品一区二区三区第95| 99久久久国产精品无码免费| 色综合久久综合网| 久久久香蕉视频| **性色生活片久久毛片| 亚洲精品国产91| av影院午夜一区| 国产一级免费大片| 日韩综合小视频| 一二三四视频社区在线| 亚洲精品二区三区| 视频一区免费观看| 国产一区三区在线播放| 国产精品久久久久免费| 精品视频在线播放一区二区三区| 国产高清在线不卡| 中文字幕在线视频网站| 欧美激情一级二级| 欧美性爽视频| 久久亚洲国产精品| 黄色av电影在线播放| 亚洲性日韩精品一区二区| 婷婷国产在线| 日韩精品中文字幕一区二区三区 | 日韩精品视频三区| 亚洲欧美另类综合| 日韩欧美黄色影院| 99热这里只有精品66| 4438成人网| 一区二区www| 欧美精品日韩精品| 亚洲网站免费观看| 欧美日本在线观看| 国产又粗又大又爽视频| 欧美色网一区二区| 中文字字幕在线中文乱码| 在线看一区二区| 免费精品一区二区| 欧美影视一区在线| 天天干天天插天天射| 欧美在线免费播放| 无码人妻丰满熟妇区bbbbxxxx| 日韩欧美精品中文字幕| 成人免费毛片视频| 在线观看区一区二| 一级久久久久久久| 717成人午夜免费福利电影| 国产美女精品视频国产| 日韩精品专区在线影院观看| 欧美特黄一级视频| 亚洲免费视频观看| 岛国最新视频免费在线观看| 日韩在线观看免费| av在线app| 性欧美xxxx交| 美女18一级毛片一品久道久久综合| 国产成人精品免费久久久久 | 久99久在线| 免费短视频成人日韩| 亚洲精品成人久久久998| 日本大胆欧美| 国产91沈先生在线播放| 亚洲作爱视频| 国产91色在线观看| 国产精品一品视频| 久久国产精品无码一级毛片| 国产精品美女视频| 丰满少妇高潮久久三区| 欧美日韩激情视频| 91精品国产乱码久久久久| 欧美mv日韩mv| 国产黄色在线| 欧美精品在线免费观看| 无遮挡爽大片在线观看视频| 国产免费亚洲高清| 久久大胆人体视频| 亚洲午夜在线观看| 亚洲国产网站| 欧美男女交配视频| 丁香桃色午夜亚洲一区二区三区| 我和岳m愉情xxxⅹ视频| 成人欧美一区二区三区白人| 日韩特黄一级片| 欧美日韩精品欧美日韩精品一综合| 亚洲国产精品久久久久爰性色 | 欧美中文字幕| 免费国偷自产拍精品视频| 久久在线观看免费| 欧美做爰爽爽爽爽爽爽| 色婷婷精品久久二区二区蜜臂av| 99久久婷婷国产一区二区三区| 亚洲美女自拍视频| 日韩影视在线| 国产欧美日韩综合精品| 一区二区美女| 亚洲国产成人精品无码区99| 久久成人免费网站| 亚洲国产欧美视频| 亚洲影院在线观看| 136福利视频导航| 亚洲精品一区在线观看香蕉| 亚洲图区一区| 成人av.网址在线网站| 国产欧美一区| 少妇高潮毛片色欲ava片| 精品一区二区在线播放| 亚洲狠狠婷婷综合久久久久图片| 一区二区激情小说| 中文字幕精品一区二区精| 日韩精品www| 丰满诱人av在线播放| 亚洲free性xxxx护士白浆| 欧美一二区在线观看| 久久婷婷国产精品| 成人av在线资源网站| 久久免费小视频| 欧美一二三四区在线| 国产一区久久精品| 91久久久亚洲精品| 欧美激情理论| 一级黄色特级片| 中文在线资源观看网站视频免费不卡| 国产三级av片| 国产视频精品久久久| www.51av欧美视频| 黑人另类av| 一区二区黄色| 人人妻人人澡人人爽人人精品| 午夜视频在线观看一区二区三区| 精品国产无码AV| 欧美另类交人妖| 欧美在线在线| 无码粉嫩虎白一线天在线观看| 国产成人在线免费| 免费在线观看黄色av| 精品盗摄一区二区三区| 8x8ⅹ拨牐拨牐拨牐在线观看| 好看的日韩精品视频在线| 一区二区国产精品| 色呦呦一区二区| 精品久久久久久中文字幕大豆网 | 日韩在线观看视频免费| 久久国内精品| 欧美aaa在线观看| 国产精品系列在线播放| 免费人成视频在线| 亚洲第一男人天堂| 久久久男人天堂| 裸模一区二区三区免费| 久久中文在线| 一区二区三区在线播放视频| 欧美日韩一区二区三区视频| 麻豆传媒在线免费| 999国内精品视频在线| 精品成人一区| 国产精品无码久久久久久| 色哟哟国产精品免费观看| www黄在线观看| 成人黄色av免费在线观看| 欧美日本免费| 亚洲精品女人久久久| 欧美最猛黑人xxxxx猛交| 免费观看久久久久| 999精品在线观看| 一本色道88久久加勒比精品| 亚洲理论片在线观看| 91精品国产综合久久久久久久久久| 黄视频网站在线| 国产一区二区精品免费| 久久精品观看| 极品久久久久久| 日韩经典第一页| 国产91精品在线| 国产肉体ⅹxxx137大胆| 久久毛片高清国产| 一级片视频播放| 久久理论片午夜琪琪电影网| 免费久久精品| 一级日本黄色片| 欧美视频裸体精品| 在线观看美女网站大全免费| 福利视频一区二区三区| 久久久久久9| avtt天堂在线| 亚洲新声在线观看| 一区二区三区四区精品视频| 91av俱乐部| 亚洲一二三级电影|