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

流批一體在京東的探索與實踐

數據庫
提到流批一體,不得不提傳統的大數據平臺 —— Lambda 架構。它能夠有效地支撐離線和實時的數據開發需求,但它流和批兩條數據鏈路割裂所導致的高開發維護成本以及數據口徑不一致是無法忽視的缺陷。

?摘要:本文整理自京東高級技術專家韓飛在 Flink Forward Asia 2021 流批一體專場的分享。主要內容包括:

  • 整體思考
  • 技術方案及優化
  • 落地案例
  • 未來展望??

01整體思考

圖片

提到流批一體,不得不提傳統的大數據平臺 —— Lambda 架構。它能夠有效地支撐離線和實時的數據開發需求,但它流和批兩條數據鏈路割裂所導致的高開發維護成本以及數據口徑不一致是無法忽視的缺陷。

通過一套數據鏈路來同時滿足流和批的數據處理需求是最理想的情況,即流批一體。此外我們認為流批一體還存在一些中間階段,比如只實現計算的統一或者只實現存儲的統一也是有重大意義的。

以只實現計算統一為例,有一些數據應用的實時性要求比較高,比如希望端到端的數據處理延時不超過一秒鐘,這對目前開源的、適合作為流批統一的存儲來說是一個很大的挑戰。以數據湖為例,它的數據可見性與 commit 的間隔相關,進而與 Flink 做 checkpoint 的時間間隔相關,此特性結合數據處理鏈路的長度,可見做到端到端一秒鐘的處理并不容易。因此對于這類需求,只實現計算統一也是可行的。通過計算統一去降低用戶的開發及維護成本,解決數據口徑不一致的問題。

圖片

在流批一體技術落地的過程中,面臨的挑戰可以總結為以下 4 個方面:

  • 首先是數據實時性。如何把端到端的數據時延降低到秒級別是一個很大的挑戰,因為它同時涉及到計算引擎及存儲技術。它本質上屬于性能問題,也是一個長期目標。
  • 第二個挑戰是如何兼容好在數據處理領域已經廣泛應用的離線批處理能力。此處涉及開發和調度兩個層面的問題,開發層面主要是復用的問題,比如如何復用已經存在的離線表的數據模型,如何復用用戶已經在使用的自定義開發的 Hive UDF 等。調度層面的問題主要是如何合理地與調度系統進行集成。
  • 第三個挑戰是資源及部署問題。比如通過不同類型的流、批應用的混合部署來提高資源利用率,以及如何基于 metrics 來構建彈性伸縮能力,進一步提高資源利用率。
  • 最后一個挑戰也是最困難的一個:用戶觀念。大多數用戶對于比較新的技術理念通常僅限于技術交流或者驗證,即使驗證之后覺得可以解決實際問題,也需要等待合適的業務來試水。這個問題也催生了一些思考,平臺側一定要多站在用戶的視角看待問題,合理地評估對用戶的現有技術架構的改動成本以及用戶收益、業務遷移的潛在風險等。

圖片

上圖是京東實時計算平臺的全景圖,也是我們實現流批一體能力的載體。中間的 Flink 基于開源社區版本深度定制。基于該版本構建的集群,外部依賴包含三個部分,JDOS、HDFS/CFS 和 Zookeeper。

  • JDOS 是京東的 Kubernetes 平臺,目前我們所有 Flink 計算任務容器化的,都運行在這套平臺之上;
  • Flink 的狀態后端有 HDFS 和 CFS 兩種選擇,其中 CFS 是京東自研的對象存儲;
  • Flink 集群的高可用是基于 Zookeeper 構建的。

在應用開發方式方面,平臺提供 SQL 和 Jar 包兩種方式,其中 Jar 的方式支持用戶直接上傳 Flink 應用 Jar 包或者提供 Git 地址由平臺來負責打包。除此之外我們平臺化的功能也相對比較完善,比如基礎的元數據服務、SQL 調試功能,產品端支持所有的參數配置,以及基于 metrics 的監控、任務日志查詢等。

連接數據源方面,平臺通過 connector 支持了豐富的數據源類型,其中  JDQ 基于開源 Kafka 定制,主要應用于大數據場景的消息隊列;JMQ 是京東自研,主要應用于在線系統的消息隊列;JimDB 是京東自研的分布式 KV 存儲。

圖片

在當前 Lambda 架構中,假設實時鏈路的數據存儲在 JDQ,離線鏈路的數據存在 Hive 表中,即便計算的是同一業務模型,元數據的定義也常常是存在差異的,因此我們引入統一的邏輯模型來兼容實時離線兩邊的元數據。

在計算環節,通過 FlinkSQL 結合 UDF 的方式來實現業務邏輯的流批統一計算,此外平臺會提供大量的公用 UDF,同時也支持用戶上傳自定義 UDF。針對計算結果的輸出,我們同樣引入統一的邏輯模型來屏蔽流批兩端的差異。對于只實現計算統一的場景,可以將計算結果分別寫入流批各自對應的存儲,以保證數據的實時性與先前保持一致。

對于同時實現計算統一和存儲統一的場景,我們可以將計算的結果直接寫入到流批統一的存儲。我們選擇了 Iceberg 作為流批統一的存儲,因為它擁有良好的架構設計,比如不會綁定到某一個特定的引擎等。

圖片

在兼容批處理能力方面,我們主要進行了以下三個方面的工作:

第一,復用離線數倉中的 Hive 表。

以數據源端為例,為了屏蔽上圖左側圖中流、批兩端元數據的差異,我們定義了邏輯模型 gdm_order_m 表,并且需要用戶顯示地指定 Hive 表和 Topic 中的字段與這張邏輯表中字段的映射關系。這里映射關系的定義非常重要,因為基于 FlinkSQL 的計算只需面向這張邏輯表,而無需關心實際的 Hive 表與 Topic 中的字段信息。在運行時通過 connector 創建流表和批表的時候,邏輯表中的字段會通過映射關系被替換成實際的字段。

在產品端,我們可以給邏輯表分別綁定流表和批表,通過拖拽的方式來指定字段之間的映射關系。這種模式使得我們的開發方式與之前有所差異,之前的方式是先新建一個任務并指定是流任務還是批任務,然后進行 SQL 開發,再去指定任務相關的配置,最后發布任務。而在流批一體模式下,開發模式變為了首先完成 SQL 的開發,其中包括邏輯的、物理的 DDL 的定義,以及它們之間的字段映射關系的指定,DML 的編寫等,然后分別指定流批任務相關的配置,最后發布成流批兩個任務。

第二,與調度系統打通。

離線數倉的數據加工基本是以 Hive/Spark 結合調度的模式,以上圖中居中的圖為例,數據的加工被分為 4 個階段,分別對應數倉的 BDM、FDM、GDM 和 ADM 層。隨著 Flink 能力的增強,用戶希望把 GDM 層的數據加工任務替換為 FlinkSQL 的批任務,這就需要把 FlinkSQL 批任務嵌入到當前的數據加工過程中,作為中間的一個環節。

為了解決這個問題,除了任務本身支持配置調度規則,我們還打通了調度系統,從中繼承了父任務的依賴關系,并將任務自身的信息同步到調度系統中,支持作為下游任務的父任務,從而實現了將 FlinkSQL 的批任務作為原數據加工的其中一個環節。

第三,對用戶自定義的 Hive UDF、UDAF 及 UDTF 的復用。

對于現存的基于 Hive 的離線加工任務,如果用戶已經開發了 UDF 函數,那么最理想的方式是在遷移 Flink 時對這些 UDF 進行直接復用,而不是按照 Flink UDF 定義重新實現。

在 UDF 的兼容問題上,針對使用 Hive 內置函數的場景,社區提供了 load hive modules 方案。如果用戶希望使用自己開發的 Hive UDF,可以通過使用 create catalog、use catalog、create function,最后在 DML 中調用的方式來實現, 這個過程會將 Function 的信息注冊到 Hive 的 Metastore 中。從平臺管理的角度,我們希望用戶的 UDF 具備一定的隔離性,限制用戶 Job 的粒度,減少與 Hive Metastore 交互以及產生臟函數元數據的風險。

此外,當元信息已經被注冊過,希望下次能在 Flink 平臺端正常使用,如果不使用 if not exist 語法,通常需要先 drop function,再進行 create 操作。但是這種方式不夠優雅,同時也對用戶的使用方式有限制。另一種解決方法是用戶可以注冊臨時的 Hive UDF,在 Flink1.12 中注冊臨時 UDF 的方式是 create temporary function,但是該 Function 需要實現 UserDefinedFunction 接口后才能通過后面的校驗,否則會注冊失敗。

所以我們并沒有使用 create temporary function,而是對 create function 做了一些調整,擴展了 ExtFunctionModule,將解析出來的 FunctionDefinition 注冊到 ExtFunctionModule 中,做了一次 Job 級別的臨時注冊。這樣的好處就是不會污染 Hive Metastore,提供了良好的隔離性,同時也沒有對用戶的使用習慣產生限制,提供了良好的體驗。

不過這個問題在社區 1.13 的版本已經得到了綜合的解決。通過引入 Hive 解析器等擴展,已經可以把實現 UDF、GenericUDF 接口的自定義 Hive 函數通過 create temporary function 語法進行注冊和使用。

圖片

資源占用方面,流處理和批處理是天然錯峰的。對于批處理,離線數倉每天 0 點開始計算過去一整天的數據,所有的離線報表的數據加工會在第二天上班前全部完成,所以通常 00:00 到 8:00 是批計算任務大量占用資源的時間段,而這個時間段通常在線的流量都比較低。流處理的負載與在線的流量是正相關的,所以這個時間段流處理的資源需求是比較低的。上午 8 點到晚上 0 點,在線的流量比較高,而這個時間段批處理的任務大部分都不會被觸發執行。

基于這種天然的錯峰,我們可以通過在專屬的 JDOS Zone 中進行不同類型的流批應用的混部來提升資源的使用率,并且如果統一使用 Flink 引擎來處理流批應用,資源的使用率會更高。

同時為了使應用可以基于流量進行動態調整,我們還開發了自動彈性伸縮的服務 (Auto-Scaling Service)。它的工作原理如下:運行在平臺上的 Flink 任務上報 metrics 信息到 metrics 系統,Auto-Scaling Service 會基于 metrics 系統中的一些關鍵指標,比如 TaskManager 的 CPU 使用率、任務的背壓情況等來判定任務是否需要增減計算資源,并把調整的結果反饋給 JRC 平臺,JRC 平臺通過內嵌的 fabric 客戶端將調整的結果同步到 JDOS 平臺,從而完成對 TaskManager Pod 個數的調整。此外,用戶可以在 JRC 平臺上通過配置來決定是否為任務開啟此功能。

上圖右側圖表是我們在 JDOS Zone 中進行流批混部并結合彈性伸縮服務試點測試時的 CPU 使用情況。可以看到 0 點流任務進行了縮容,將資源釋放給批任務。我們設置的新任務在 2 點開始執行,所以從 2 點開始直到早上批任務結束這段時間,CPU 的使用率都比較高,最高到 80% 以上。批任務運行結束后,在線流量開始增長時,流任務進行了擴容,CPU 的使用率也隨之上升。

02技術方案及優化

流批一體是以 FlinkSQL 為核心載體,所以我們對于 FlinkSQL 的底層能力也做了一些優化,主要分為維表優化、join 優化、window 優化和 Iceberg connector 優化幾個方面。

圖片

首先是維表相關的幾個優化。目前社區版本的 FlinkSQL 只支持部分數據源 sink 算子并行度的修改,并不支持 source 以及中間處理算子的并行度修改。

假設一個 FlinkSQL 任務消費的 topic 有 5 個分區,那么下游算子的實際并行度是 5,算子之間是 forward 的關系。對于數據量比較大的維表 join 場景,為了提高效率,我們希望并行度高一些,希望可以靈活設置它的并行度而不與上游的分區數綁定。

基于此,我們開發了預覽拓撲的功能,不論是 Jar 包、SQL 任務都可以解析并生成 StreamGraph 進行預覽,進一步還能支持修改分組、算子 chain 的策略、并行度、設置 uid 等。

借助這個功能,我們還可以調整維表 join 算子的并行度,并且將分區策略由 forward 調整為 rebalance,然后把這些調整后的信息更新到 StreamGraph。此外我們還實現了動態 rebalance 策略,可以基于 backLog 去判斷下游分區中的負載情況,從而選擇最優的分區進行數據分發。

圖片

為了提升維表 join 的性能,我們對所有平臺支持的維表數據源類型都實現了異步 IO 并支持在內存中做緩存。不論是原生的 forward 方式還是 rebalance 方式,都存在緩存失效和替換的問題。那么,如何提高維表緩存的命中率以及如何降低維表緩存淘汰的操作?

以原生的 forward 方式為例,forward 意味著每個 subtask 緩存著隨機的維表數據,與 joinkey 的值有關。對維表的 joinkey 做哈希,就能保證下游每一個算子緩存著與 joinkey 相關的、不同的維表數據,從而有效地提升緩存的命中率。

在實現層面我們新增了一條叫 StreamExecLookupHashJoinRule 的優化規則,并且把它添加到物理 rewrite 的階段。在最底層的掃描數據 StreamExecTableSourceScan 和維表 join StreamExecLookupJoin 之間增加了一個 StreamExecChange 節點,由它來完成對維表數據的哈希操作。可以通過在定義維表 DDL 時指定 lookup.hash.enable=true 來開啟這個功能。

我們對于 forward、rebalance、哈希三種方式開啟緩存,進行了相同場景的性能測試。主表一億條數據去 join 維表的 1 萬條數據,在不同的計算資源下,rebalance 相較于原生的 forward 方式有數倍的性能提升,而哈希相較于 rebalance 的方式又有數倍的性能提升,整體效果是比較可觀的。

圖片

針對維表 join 單條查詢效率比較低的問題,解決思路也很簡單,就是攢批,按照微批的方式去訪問 (mini-batch)??梢栽?DDL 的定義中通過設置 lookup.async.batch.size 的值來指定批次的大小。除此之外,我們還在時間維度上引入了 Linger 機制來做限制,防止極端場景出現遲遲無法攢夠一批數據而導致時延比較高的情況,可以通過在 DDL 的定義中設置 lookup.async.batch.linger 的值來指定等待時間。

經過測試,mini-batch 的方式能夠帶來 15% ~ 50% 的性能提升。

圖片

Interval join 也是生產上一個使用比較頻繁的場景,這類業務的特點是流量非常大,比如 10 分鐘百 GB 級別。Interval join 兩條流的數據都會緩存在內部 state 中,任意一邊的數據到達都會獲取對面流相應時間范圍的數據去執行 join function,所以這種大流量的任務會有非常大的狀態。

對此我們選用了 RocksDB 來做狀態后端,但是進行了調參優化后效果仍不理想,任務運行一段時間之后會出現背壓,導致 RocksDB 的性能下降,CPU 的使用率也比較高。

通過分析我們發現,根本原因與 Flink 底層掃描 RocksDB 是基于前綴的掃描方式有關。因此解決思路也很簡單,根據查詢條件,精確地構建查詢的上下界,把前綴查詢變為范圍查詢。查詢條件依賴的具體上下界的 key 變為了 keyGroup+joinKey+namespace+timestamp[lower,upper],可以精確地只查詢某些 timestamp 之間的數據,任務的背壓問題也得到了解決。而且數據量越大,這種優化帶來的性能提升越明顯。

圖片

Regular join 使用狀態來保存所有歷史數據,所以如果流量大也會導致狀態數據比較大。而它保存狀態是依賴 table.exec.state.ttl 參數,這個參數值比較大也會導致狀態大。

針對這種場景,我們改為使用外部存儲JimDB存儲狀態數據。目前只做了 inner join 的實現,實現機制如下:兩邊的流對 join 到的數據進行下發的同時,將所有數據以 mini-batch 的方式寫入到 JimDB,join 時會同時掃描內存中以及 JimDB 中對應的數據。此外,可以通過 JimDB ttl 的機制來實現 table.exec.state.ttl 功能,從而完成對過期數據的清理。

上述實現方式優缺點都比較明顯,優點是可以支持非常大的狀態,缺點是目前無法被 Flink checkpoint 覆蓋到。

圖片

對于 window 的優化,首先是窗口偏移量。需求最早來源于一個線上場景,比如我們想統計某個指標 2021 年 12 月 4 日 0 點 ~ 2021 年 12 月 5 日 0 點的結果, 但由于線上集群是東 8 區時間,所以實際統計的結果是 2021 年 12 月 4 日早上 8 點 ~ 2021 年 12 月 5 日早上 8 點的結果,這顯然不符合預期。因此這個功能最早是為了修復非本地時區跨天級別的窗口統計錯誤的問題。

在我們增加了窗口偏移量參數后,可以非常靈活地設置窗口的起始時間,能夠支持的需求也更廣泛。

其次,還存在另外一個場景:雖然用戶設定了窗口大小,但是他希望更早看到窗口當前的計算結果,便于更早地去做決策。因此我們新增了增量窗口的功能,它可以根據設置的增量間隔,觸發執行輸出窗口的當前計算結果。

圖片

對于端到端實時性要求不高的應用,可以選擇 Iceberg 作為下游的統一存儲。但是鑒于計算本身的特性、用戶 checkpoint 間隔的配置等原因,可能導致產生大量的小文件。Iceberg 的底層我們選用 HDFS 作為存儲,大量的小文件會對 Namenode 產生較大的壓力,所以就有了合并小文件的需求。

Flink 社區本身提供了基于 Flink batch job 的合并小文件的工具可以解決這個問題,但這種方式有點重,所以我們開發了算子級別的小文件合并的實現。思路是這樣的,在原生的 global commit 之后,我們新增了三個算子 compactCoordinator、 compactOperator 和 compactCommitter,其中 compactCoordinator 負責獲取待合并的 snapshot 并下發,compactOperator 負責 snapshot 的合并操作的執行,并且可以多個 compactOperator 并發執行,compactCommitter 負責合并后 datafiles 的提交。

我們在 DDL 的定義中新增了兩個參數,auto-compact 指定是否開啟合并文件的功能,compact.delta.commits 指定每提交多少次 commit 來觸發一次 compaction。

圖片

在實際的業務需求中,用戶可能會從 Iceberg 中讀取嵌套數據,雖然可以在 SQL 中指定讀取嵌套字段內部的數據,但是在實際讀取數據時是會將包含當前嵌套字段的所有字段都讀取到,再去獲取用戶需要的字段,而這會直接導致 CPU 和網絡帶寬負載的增高,所以就產生了如下需求:如何只讀取到用戶真正需要的字段?

解決這個問題,要滿足兩個條件,第一個條件是讀取 Iceberg 的數據結構 schema 只包含用戶需要的字段,第二個條件是 Iceberg 支持按列名去讀取數據,而這個本身已經滿足了,所以我們只需要實現第一個條件即可。

如上圖右側所示,結合之前的 tableSchema 和 projectFields 信息重構,生成了一個只包含用戶需要字段的新的數據結構 PruningTableSchema,并且作為 Iceberg schema 的輸入,通過這樣的操作實現了根據用戶的實際使用情況對嵌套結構進行列裁剪。圖中左下部的示例展示了用戶優化前后讀取嵌套字段的對比,可以看到基于 PruningTablesSchema 能夠對無用的字段進行有效的裁剪。

經過上述優化,CPU 使用率降低了 20%~30%。而且,在相同的數據量下,批任務的執行時間縮短了 20%~30%。

圖片

此外,我們還實現了一些其他優化,比如修復了 interval outer join 數據晚于 watermark 下發、且下游有時間算子時會導致的數據丟失問題,UDF 的復用問題,FlinkSQL 擴展 KeyBy 語法,維表數據預加載以及 Iceberg connector 從指定的 snapshot 去讀取等功能。

03落地案例

圖片

京東目前 FlinkSQL 線上任務 700+,占Flink總任務數的 15% 左右,FlinkSQL 任務累計峰值處理能力超過 1.1 億條/秒。目前主要基于社區的 1.12 版本進行了一些定制優化。

3.1 案例一

圖片

實時通用數據層 RDDM 流批一體化的建設。RDDM 全稱是 real-time detail data model - 實時明細數據模型,它涉及訂單、流量、商品、用戶等,是京東實時數倉的重要一環,服務了非常多的核心業務,例如黃金眼/商智、JDV、廣告算法、搜推算法等。

RDDM 層的實時業務模型與離線數據中 ADM 和 GDM 層的業務加工邏輯一致。基于此,我們希望通過 FlinkSQL 來實現業務模型的流批計算統一。同時這些業務也具備非常鮮明的特點,比如訂單相關的業務模型都涉及大狀態的處理,流量相關的業務模型對于端到端的實時性要求比較高。此外,某些特殊場景也需要一些定制化的開發來支持。

圖片

RDDM 的實現主要有兩個核心訴求:首先它的計算需要關聯的數據比較多的,大量的維度數據都存儲在 HBase 中;此外部分維度數據的查詢存在二級索引,需要先查詢索引表,從中取出符合條件的 key 再去維度表中獲取真正的數據。

針對上述需求,我們通過結合維表數據預加載的功能與維表 keyby 的功能來提升 join 的效率。針對二級索引的查詢需求,我們定制了 connector 來實現。

維表數據預加載的功能指在初始化的階段就將維表數據加載到內存中,這個功能結合 keyby 使用可以非常有效地減少緩存的數量,提高命中率。

部分業務模型關聯的歷史數據比較多,導致狀態數據比較大,目前我們是根據場景進行定制的優化。我們認為根本的解決方案是實現一套高效的基于 KV 的 statebackend,對于此功能的實現正在規劃中。

3.2 案例二

圖片

流量買賣黑產的輿情分析。它的主要流程如下:源端通過爬蟲獲取相關信息并寫入到 JMQ,數據同步到 JDQ 以后,通過 Flink 處理然后繼續寫下游的 JDQ。與此同時,通過 DTS 數據傳輸服務,將上游 JDQ 的數據同步到 HDFS,然后通過 Hive 表進行離線的數據加工。

此業務有兩個特點:首先,端到端的實時性要求不高,可以接受分鐘級別的延時;第二,離線和實時的加工邏輯一致。因此,可以直接把中間環節的存儲從 JDQ 換成 Iceberg,然后通過 Flink 去增量讀取,并通過 FlinkSQL 實現業務邏輯加工,即完成了流批兩套鏈路的完全統一。其中 Iceberg 表中的數據也可以供 OLAP 查詢或離線做進一步的加工。

上述鏈路端到端的時延在一分鐘左右,基于算子的小文件合并功能有效地提升了性能,存儲計算成本有了顯著的降低,綜合評估開發維護成本降低了 30% 以上。

04未來規劃

圖片

未來規劃主要分為以下兩個方面:

首先,業務拓展方面。我們會加大 FlinkSQL 任務的推廣,探索更多流批一體的業務場景,同時對產品形態進行打磨,加速用戶向 SQL 的轉型。同時,將平臺元數據與離線元數據做更深度的融合,提供更好的元數據服務。

其次,平臺能力方面。我們會繼續深挖 join 場景和大狀態場景,同時探索高效 KV 類型的狀態后端實現,并在統一計算和統一存儲的框架下不斷優化設計,以降低端到端時延。?

責任編輯:未麗燕 來源: Apache Flink
相關推薦

2023-09-05 07:22:17

Hudi數據存儲

2023-05-16 07:24:25

數據湖快手

2023-09-24 20:31:23

數字化

2023-03-30 07:40:03

FeatHub 項目特征工程開發

2020-01-13 14:39:06

FlinkSQL無限流

2021-08-02 10:19:08

Dataphin 數倉架構存儲計算分離

2019-07-01 15:40:53

大數據架構流處理

2024-06-25 13:08:31

2022-09-29 09:22:33

數據倉

2023-03-27 21:24:18

架構數據處理分析服務

2021-11-18 21:09:50

流批場景引擎

2024-10-15 08:14:51

2025-09-12 16:40:08

2023-12-20 07:35:03

大模型數據治理機器學習

2020-11-24 10:26:08

2021-06-30 09:20:08

數倉FlinkHive

2023-09-17 17:59:28

邊緣計算調度方案

2023-07-19 22:13:25

一體化推送平臺

2019-11-28 20:51:10

阿里云Alink開源

2024-07-18 08:38:31

點贊
收藏

51CTO技術棧公眾號

youjizz亚洲女人| 麻豆传媒网站在线观看| 中文字幕 国产精品| 国产精品不卡| 亚洲激情在线观看视频免费| 黄色片视频在线免费观看| 成人18在线| 国产成人综合在线观看| 日韩av手机在线看| 国产va在线播放| 久久超碰99| 日韩一卡二卡三卡国产欧美| 成年人免费大片| 免费毛片在线看片免费丝瓜视频| 久久嫩草精品久久久精品| 国产综合香蕉五月婷在线| 男女视频免费看| 亚洲高清资源在线观看| 亚洲欧洲日产国产网站| wwwxxx色| 久久久精品一区二区毛片免费看| 红桃视频成人在线观看| 大桥未久一区二区三区| 国产视频三级在线观看播放| 丁香网亚洲国际| 91免费观看网站| 黄色在线观看国产| 国产综合激情| 免费91麻豆精品国产自产在线观看| 97超碰在线资源| 国产精品极品| 日韩一区二区精品在线观看| 天天操狠狠操夜夜操| 日韩伦理精品| 天天亚洲美女在线视频| 国产免费裸体视频| 黄色片网站在线观看| 国产欧美一区二区精品久导航 | 加勒比中文字幕精品| 欧美日韩国产另类一区| 免费看污污网站| 欧美日韩视频网站| 欧美日韩性视频在线| 精品少妇人妻av免费久久洗澡| 成人短视频在线| 亚洲四区在线观看| 伊人狠狠色丁香综合尤物| 国产中文字幕在线看| 久久久亚洲高清| 蜜桃999成人看片在线观看| 欧美成熟毛茸茸复古| 欧美午夜视频一区二区| 精品影视av免费| 国产精品视频| 欧美成人一级视频| 日韩av影视大全| 日本亚洲欧洲无免费码在线| 91福利社在线观看| 嫩草av久久伊人妇女超级a| 久久国产高清视频| 国产美女精品视频免费观看| 精品亚洲视频在线| jizzyou欧美16| 欧美日韩国产精品自在自线| 久久久久久综合网| 欧美不卡在线观看| 精品国产乱码久久久久久蜜臀| 欧美丰满熟妇bbb久久久| www.神马久久| 国产网站欧美日韩免费精品在线观看 | 国产成人精品综合久久久久99| 99精品美女视频在线观看热舞 | 国产在线观看91精品一区| 伊人久久一区二区| 国产精品911| 国产伦精品一区二区| 色播色播色播色播色播在线 | 欧美日韩国产精品一卡| 国产乱子伦三级在线播放| 国产精品嫩草影院av蜜臀| 国产免费一区二区三区四在线播放| 黄色网在线免费观看| 亚洲高清视频在线| 国产一级做a爰片久久| 精品福利在线| 欧美不卡在线| 精品久久人人做人人爽| 特大黑人巨人吊xxxx| 九九热只有这里有精品| 丝袜视频国产在线播放| 中文字幕不卡的av| 成年在线观看视频| 亚洲黄色中文字幕| 91麻豆精品国产91久久久资源速度| 丰满少妇xbxb毛片日本| 国产一区二区三区电影在线观看| 久久亚洲国产精品| 国产尤物在线视频| 久久99精品视频| 久久精品一区二区三区不卡免费视频| 在线中文资源天堂| 亚洲成av人片| 国产精品嫩草影院8vv8| 精品三级av在线导航| 色先锋资源久久综合5566| 欧美日韩一级大片| 麻豆精品蜜桃视频网站| 极品校花啪啪激情久久| 麻豆影视国产在线观看| 黑人狂躁日本妞一区二区三区| 午夜激情影院在线观看| 欧美人与牛zoz0性行为| 久久久天堂国产精品女人| 在线观看免费观看在线| 97超碰欧美中文字幕| 国产精品无码乱伦| 婷婷激情一区| 亚洲精品97久久| 999精品视频在线观看播放| 日韩在线一区二区| 狠狠色噜噜狠狠狠狠色吗综合| 成年人网站在线| 欧美亚洲国产怡红院影院| 国产ts丝袜人妖系列视频| 欧美婷婷在线| 亚洲一区二区三| 午夜小视频在线| 色播五月激情综合网| 日本一区二区在线免费观看| 亚洲一区二区三区无吗| 国产精品视频在线播放| 第一福利在线| 精品久久久在线观看| 无码人妻一区二区三区在线| 欧美在线1区| 91色p视频在线| 日本在线免费播放| 欧美日精品一区视频| 山东少妇露脸刺激对白在线| 性色一区二区三区| 麻豆亚洲一区| 亚洲女同av| 亚洲精品中文字| av大片在线免费观看| 99精品视频一区二区三区| 国产在线精品91| 欧美黄色影院| 欧亚精品中文字幕| 日本成人一区| 91久久精品一区二区| 欧美成人国产精品一区二区| 男人的天堂亚洲一区| 四虎永久国产精品| 日本黄色成人| 欧美乱大交做爰xxxⅹ性3| 精品久久国产视频| 亚洲韩国精品一区| 7788色淫网站小说| 国产精品五区| 日韩亚洲不卡在线| 亚洲精品大片| 欧美国产日韩一区| 天天操天天爱天天干| 欧美午夜精品久久久久久人妖 | 超碰97久久| 国产综合在线看| 欧洲视频在线免费观看| 91久久香蕉国产日韩欧美9色| 欧美成人短视频| 国产精品白丝av| 少妇人妻无码专区视频| 五月综合久久| 国产拍精品一二三| 欧美性受ⅹ╳╳╳黑人a性爽| 亚洲成avwww人| 亚洲天堂视频网站| 国产精品日产欧美久久久久| 在线播放免费视频| 国产麻豆综合| 色乱码一区二区三区熟女| 99精品国产高清一区二区麻豆| 777777777亚洲妇女| 在线看的av网站| 日韩精品一区二区三区蜜臀| 日本视频免费在线| 国产精品乱码一区二三区小蝌蚪| 日韩精品xxx| 美女网站久久| wwwwww欧美| 欧美天天综合| 国产精品推荐精品| 99只有精品| 国产69精品久久久久9| av免费在线观看网址| 粉嫩欧美一区二区三区高清影视| 国产免费黄色小视频| 欧洲激情综合| 国产精品久久精品国产| 日日夜夜天天综合| 久久99久久亚洲国产| 免费一级在线观看| 日韩视频一区在线观看| 国产中文字幕视频| 亚洲欧美电影院| 精品人伦一区二区三电影 | 岛国毛片在线播放| 亚洲国内自拍| 中文字幕一区二区三区在线乱码| 欧美黄色网视频| 96pao国产成视频永久免费| 在线观看的黄色| 色综合久久精品亚洲国产| 国产视频二区在线观看| 欧美精品一区二区久久婷婷 | 韩日成人影院| 九九热99久久久国产盗摄| 97电影在线| 亚洲一区www| 青青视频在线观| 精品乱人伦小说| 国产精品伊人久久| 在线欧美日韩精品| 美日韩一二三区 | 黄色av一级片| 精品免费在线观看| 国产一级片免费看| 亚洲精选视频在线| 无码人妻精品中文字幕| 欧美韩日一区二区三区| 美国黄色一级毛片| 99久久er热在这里只有精品15| 肉色超薄丝袜脚交| 麻豆精品国产传媒mv男同| 少妇性l交大片| 久久亚洲风情| 国产xxxxx在线观看| 国产精品五区| 超碰97人人射妻| 欧美亚洲自偷自偷| 鲁一鲁一鲁一鲁一澡| 国产精品免费看| 18禁免费无码无遮挡不卡网站| 日韩午夜免费视频| 九一国产精品视频| 999在线观看精品免费不卡网站| 成人在线观看毛片| 欧美另类专区| 日韩黄色短视频| 亚洲三级影院| 国产淫片免费看| 久久精品伊人| 杨幂毛片午夜性生毛片| 美女国产一区二区| 日韩在线一区视频| 国产精品一区二区视频| 韩国三级在线看| 成人久久18免费网站麻豆| 69亚洲乱人伦| xf在线a精品一区二区视频网站| 亚洲av网址在线| 日本一区二区成人| 97在线观看视频免费| 一区二区三区自拍| 国产精品xxxx喷水欧美| 色婷婷av一区二区三区软件| jizz国产在线| 欧美一区二区在线观看| 精品人妻无码一区二区色欲产成人 | 美女少妇精品视频| a'aaa级片在线观看| 91成人精品网站| 久久日本片精品aaaaa国产| 国产区精品视频| 国产精品jk白丝蜜臀av小说| 蜜桃麻豆91| 午夜av一区| 成人黄色大片网站| 日韩有码一区二区三区| 一区二区三区四区毛片| 不卡一区中文字幕| 最近中文字幕在线mv视频在线 | 日韩av一区二区在线播放| 一本到三区不卡视频| 国产又黄又粗又硬| 亚洲精品福利免费在线观看| 国产福利在线看| 欧美成人在线网站| 成人线上视频| 2020国产精品久久精品不卡| 欧美在线导航| 黄色网zhan| 老司机一区二区三区| 日韩精品视频网址| 2020国产精品| 麻豆视频在线免费看| 欧美色播在线播放| 精品国产乱码久久久久久蜜臀网站| 日韩国产一区三区| 成人ww免费完整版在线观看| 国产999精品久久久| 国产精品一区二区三区四区在线观看| 九九九久久久| 亚洲欧美一区在线| 亚洲精品怡红院| gogogo免费视频观看亚洲一| 99久久99久久精品免费看小说.| 亚洲图片欧美一区| 国产精品特级毛片一区二区三区| 精品亚洲国产视频| 日韩经典av| 91夜夜未满十八勿入爽爽影院| 欧美男gay| 少妇高潮毛片色欲ava片| 国产在线视频一区二区| 69精品无码成人久久久久久| 亚洲一区在线观看网站| 亚洲专区第一页| 亚洲人成在线播放| 超级白嫩亚洲国产第一| 97在线电影| 天天做天天爱天天综合网2021 | 日本中文字幕在线免费观看| 欧美精品v日韩精品v韩国精品v| 精品无人乱码| 欧美尤物巨大精品爽| 动漫视频在线一区| 蜜桃网站在线观看| 精一区二区三区| 亚洲色图27p| 欧美色精品天天在线观看视频| 国产一二三区在线视频| 欧美一区二粉嫩精品国产一线天| 成人h动漫免费观看网站| 色一情一乱一乱一区91| 国产在线精品免费| 免费在线观看a级片| 欧美午夜精品久久久| 99青草视频在线播放视| 国产精品久久久久国产a级| 国产欧美日韩免费观看| 日韩中文字幕二区| 久久精品视频在线免费观看| 欧美黄色一级大片| 亚洲欧洲av一区二区| 丝袜国产在线| 久久婷婷国产综合精品青草| 精品少妇v888av| 免费一级黄色大片| 欧美亚洲日本一区| 二区在线观看| 国产精品免费一区| 日产午夜精品一线二线三线| 88av.com| 国产精品久久久久久妇女6080 | 黄色一区三区| 99精品免费视频| www.自拍偷拍| 欧美中文字幕亚洲一区二区va在线| 第一视频专区在线| 成人美女av在线直播| 欧美高清不卡| 69亚洲乱人伦| 色婷婷一区二区| 日本中文字幕在线看| 7777精品伊久久久大香线蕉语言 | 日本中文字幕成人| 红桃成人av在线播放| 99九九99九九九99九他书对| 亚洲精品免费在线| 亚洲国产精品一| 日韩av免费网站| 亚洲无中文字幕| 国产精品久久久久久亚洲av| 欧美日韩中文字幕综合视频| 高清福利在线观看| 91福利入口| 久久国产成人| 性色av无码久久一区二区三区| 亚洲精品在线一区二区| 精品国产免费人成网站| 亚洲免费久久| 丰满少妇久久久久久久| 免费观看日批视频| 久久久国产精品免费| 久久1电影院| 国产三级生活片| 午夜精品免费在线| 日本高清视频在线观看| julia一区二区中文久久94| 亚洲综合日韩| 欧美日韩精品在线观看视频 | 欧美男人的天堂| 韩国毛片一区二区三区| 久久午夜免费视频| 久久精品国产2020观看福利| 老牛精品亚洲成av人片| 亚洲涩涩在线观看| 在线视频国产一区| 成人影音在线| 黄色录像特级片|