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

Flink Task調度部署機制

開發 前端
Flink開源社區較活躍,Task側的部署鏈路也一直在演進中,持續跟進并深入了解內部實現邏輯能更好的支持我們解決Flink個性化調度策略上的一些問題。

1背景

在日常Flink使用過程中,我們經常遇到Flink任務中某些Slot或者TM負載過重的問題,對日常的資源調配、運維以及降本都帶來了很大的影響,所以我們對Flink的task部署機制進行了梳理和調研,準備在后續的工作中進行優化。由于jobGraph的生成以及任務提交流程因任務部署方式而不同,對我們后續的分析也沒有影響,這里忽略前置流程,直接從Dispatcher出發,重點關注submit后executionGraph構建以及后續的任務部署過程。

2Flink Scheduling Components 構成

2.1   SchedulerNG

在Dispatcher收到submit請求后,先是啟動了JobManagerRunner,再啟動JobMaster,在初始化jobMaster的過程中,我們注意到這里開始了整個作業的Scheduling第一步,創建SchedulerNG。

this.schedulerNG =
createScheduler(
slotPoolServiceSchedulerFactory,
executionDeploymentTracker,
jobManagerJobMetricGroup,
jobStatusListener);

我們看下SchedulerNG的職責,可以看到調度的發起,作業狀態的跟蹤以及我們熟悉的cp,sp的trigger都是在這里:

圖片

我們這次主要跟蹤構建executionGraph,然后根據Scheduling策略發起的整個部署過程。

2.2   ExecutionGraph

現階段(1.13)SchedulerNG默認實現是DefaultScheduler,初始化過程中就會開始構建我們的ExecutionGraph,ExecutionGraph中有幾個重要元素

  1. ExecutionJobVertex: 代表jobGraph中的一個JobVertex,是所有并行Task的集合
  2. ExecutionVertex: 代表ExecutionJobVertex中并行task中的一個,一個ExecutionJobVertex可能同時有很多并行運行的ExecutionVertex
  3. Execution: 代表ExecutionVertex的一次部署/執行,一個ExecutionVertex可能會有很多次Execution

這里executionGraph通過jobGraph的拓撲圖構建了自己的核心結構,看下從JobVertex到ExecutionJobVertex 的轉換流程:

// topologically sort the job vertices and attach the graph to the existing one
List<JobVertex> sortedTopology = jobGraph.getVerticesSortedTopologicallyFromSources();
executionGraph.attachJobGraph(sortedTopology){
1. executionGraph第一步拿到了jobGraph中的有序JobVertex列表
2. 接著一對一創建ExecutionJobVertex
3. 根據producer并行度生成producedDataSets(IntermediateDataSet)
4. 再根據自身并行度生成所屬的ExecutionVertex[]
5. 構建stateBackend信息和checkpointStorage信息等
6. 最后完成executionGraph的拓撲構建executionTopology
}

2.3   執行層拓撲結構

我們知道Flink引擎在不停的致力于批流一體建設,調度層的統一也是其中核心的一層。為了提高failover后recovery速度,減少對Flink任務的影響,現在Flink對于批、流的任務task調度都是以pipeline region為基礎。

Pipeline region的構建內嵌在executionGraph的初始化過程中,我們知道Flink中各個節點之間的鏈接都會有IntermediateDataSet這一種邏輯結構,用來表示JobVertex的輸出,即該JobVertex中包含的算子會產生的數據集。這個數據集的ResultPartitionType有幾種類型:

BLOCKING:都上游處理完數據后,再交給下游處理。這個數據分區可以被消費多次,也可以并發消費。這個分區并不會被自動銷毀,而是交給調度器判斷。
BLOCKING_PERSISTENT:類似于Blocking,但是其生命周期由用戶端指定。調用JobMaster或者ResourceManager的API來銷毀,而不是由調度器控制。
PIPELINED:流交換模式。可以用于有界和無界流。這種分區類型的數據只能被每個消費者消費一次。且這種分區可以保留任意數據。
PIPELINED_BOUNDED:該策略在PIPELINED的基礎上保留有限制的buffer,避免對barrier造成阻塞。
PIPELINED_APPROXIMATE:和PIPELINED_BOUNDED類似,可以支持下游task重啟后繼續消費,用來支持task failover后的Approximate Local-Recovery策略。

接下來我們看看executionGraph的核心拓撲結構ExecutionTopology是如何構建的:

第一步 先根據executionTopology構建rawPipelinedRegions,多個vertex能否組合成一個pipeline region的關鍵在于這個vertex的consumedResult.getResultType().isReconnectable(),如果支持重連,那么兩個vertex之間就會進行拆分,劃到不同的region。這里的isReconnectable就和我們的ResultPartitionType類型有關,流處理中的PIPELINED和PIPELINED_BOUNDED都是默認的false,在這種情況下所有的vertex其實都會放入同一個region。故我們日常的flink作業其實都只會生成一個pipeline region。
第二步 根據不同的pipeline region構建自己的resultPartition信息,這個是為了構建后續的PartitionReleaseStrategy,決定一個resultPartition何時finish以及被release
第三步 對vertex的coLocation情況進行校驗,保證co-located tasks必須在同一個pipeline Region里。這里是因為后續的scheduling strategy里會保證不同pipeline region的調度部署是階段隔離的,可能無法滿足colocation-constraint

2.4   Scheduling 策略

SchedulerNG Scheduling策略默認為PipelinedRegionSchedulingStrategy,在executionGraph完成之后,就可以根據生成的剛剛executionTopology來初步構建初步的Scheduling策略了。這里看下startScheduling代碼,可以看到Scheduling過程就是我們常說的基于pipeline region的Scheduling。

@Override
public void startScheduling() {
final Set<SchedulingPipelinedRegion> sourceRegions =
IterableUtils.toStream(schedulingTopology.getAllPipelinedRegions())
.filter(this::isSourceRegion)
.collect(Collectors.toSet());
maybeScheduleRegions(sourceRegions);
}

2.5   Execution Slot 分配器

默認實現是SlotSharingExecutionSlotAllocator,在schedulerNG完成executionGraph構建完成后,需要進一步構建Execution Slot 分配器。用于將physical shared slots分配到我們的logical slots 上,并將logical slot 分配給我們executionGraph中的execution(task)。通過代碼我們可以看到ExecutionSlotAllocator的職責非常簡單,只有簡單的allocate和cancel。

圖片

但在實現上這里有幾個重要元素需要了解:

LocalInputPreferredSlotSharingStrategy :在Flink內部,所有的slot分配都是基于sharingslot來操作的,在滿足co-location的基礎上,Flink期望將producer和consumeNode task盡可能的分布在一起,以減少數據傳輸成本。

SlotProfile:slot的資源信息,對task -> logical slot -> physical slot的mapping有非常重要的作用,包含了task的資源信息,slot的物理資源信息,傾向的location(TaskManagerLocation),傾向的allocation以及整個executionGraph之前分配過的allocation(用于黑名單,重啟后盡量避免分配在之前的slot里)。

ResourceProfileRetriever: 用于獲取executionVertex的實際資源信息。默認是unknown,如果有明細配置會用于后續的executionSlotSharingGroup資源構建。

ExecutionSlotSharingGroup:Flink task資源申請的最終邏輯載體,用于將sharing到一起的task(execution group)組合成一個group用于生成資源,后續部署也會綁定對應的task。

3Scheduling 主要過程

在JobMaster完成自身構建之后,就委托SchedulerNG來開始了整個job的Scheduling:

@Override
protected void startSchedulingInternal() {
log.info(
"Starting scheduling with scheduling strategy [{}]",
schedulingStrategy.getClass().getName());
transitionToRunning();
schedulingStrategy.startScheduling();
}

可以看到這里是由schedulingStrategy來負責整個調度過程的,也就是我們的PipelinedRegionSchedulingStrategy

one by one將pipeline region進行部署

private void maybeScheduleRegions(final Set<SchedulingPipelinedRegion> regions) {
final List<SchedulingPipelinedRegion> regionsSorted =
SchedulingStrategyUtils.sortPipelinedRegionsInTopologicalOrder(
schedulingTopology, regions);


final Map<ConsumedPartitionGroup, Boolean> consumableStatusCache = new HashMap<>();
for (SchedulingPipelinedRegion region : regionsSorted) {
maybeScheduleRegion(region, consumableStatusCache);
}
}

遍歷region中的ExecutionVertex依次進行部署

final List<ExecutionVertexDeploymentOption> vertexDeploymentOptions =
SchedulingStrategyUtils.createExecutionVertexDeploymentOptions(
regionVerticesSorted.get(region), id -> deploymentOption);
schedulerOperations.allocateSlotsAndDeploy(vertexDeploymentOptions);

將vertexDeployment交給SlotSharingExecutionSlotAllocator處理

private List<SlotExecutionVertexAssignment> allocateSlots(
final List<ExecutionVertexDeploymentOption> executionVertexDeploymentOptions) {
return executionSlotAllocator.allocateSlotsFor(
executionVertexDeploymentOptions.stream()
.map(ExecutionVertexDeploymentOption::getExecutionVertexId)
.collect(Collectors.toList()));
}
接下來整個allocate的主要過程如下(忽略physical fail等情況)

通過SlotSharingStrategy拿到每個execution對應的ExecutionSlotSharingGroup

  1. 先從 corresponding co-location constraint 去mapping中尋找是否有存在的slot sharing group
  2. 接著從producer 的角度來逐一檢查是否可以合并到同一個slot sharing group.
  3. 最后嘗試所有剩下的slot sharing group看是否符合execution 的要求(如同屬于一個job vertex的task不能分配到同一個 slot sharing group).
  4. 如果以上都沒有滿足條件的就創建一個新的slot sharing group
  1. 檢查ExecutionSlotSharingGroup是否已經有了對應的sharedSlot
  2. 遍歷尚未得到分配的ExecutionSlotSharingGroup
  3. 計算對應的SlotProfile
  4. 向PhysicalSlotProvider申請新的physical slot
  1. rm側會先檢查是否已經有滿足條件的excess slot

  2. 如果沒有嘗試會申請新的woker以提供資源

  3. 由sharedSlotProfileRetriever來創建對應的slotProfile并構建PhysicalSlotRequest

  4. PhysicalSlotProvider向slotPool申請新的slot

  5. slotPool會向rm側申請新的slot

  1. 利用physical slot  future提前創建sharedSlotFutrue

  2. 將sharedSlotFutrue 分配給所有相關的executions

  3. 最后生成所有的SlotExecutionVertexAssignments

在完成所有的SlotExecutionVertexAssignment之后,生成對應的DeploymentHandle并等待所有的assignedSlot創建完畢,正式開始部署對應的任務。?

4問題思考

我們對整個Flink task的部署過程完成梳理后,重新對我們一開始的問題進行思考:

4.1   為什么會出現slot負載過重的情況?如何避免?

問題的產生在于大量的task集中分配到了統一個sharedSlot,這個我們可以發現其實是在ExecutionSlotSharingGroup的構建過程中產生的。我們看下源碼,可以很直接的看到整個group的分配是一個roundRobin過程,而executionVertices來自于有序拓撲結構,中間傳遞過程也保證了有序性,所以最終會導致大量的task分配的index靠前的group中,最后落到了同一個slot。

為了避免這種情況,我們的做法其實有比較多,一種是在保證各種constraint的同時添加隨機性,以打散各個不均勻的task;還有一種就是構建基于load-balance的分配過程,以盡可能的將task分布均勻。

附Flink部分源碼:

private void findAvailableOrCreateNewExecutionSlotSharingGroupFor(
final List<SchedulingExecutionVertex> executionVertices) {


for (SchedulingExecutionVertex executionVertex : executionVertices) {
final SlotSharingGroup slotSharingGroup =
getSlotSharingGroup(executionVertex.getId());
final List<ExecutionSlotSharingGroup> groups =
executionSlotSharingGroups.computeIfAbsent(
slotSharingGroup.getSlotSharingGroupId(), k -> new ArrayList<>());


ExecutionSlotSharingGroup group = null;
for (ExecutionSlotSharingGroup executionSlotSharingGroup : groups) {
if (isGroupAvailableForVertex(
executionSlotSharingGroup, executionVertex.getId())) {
group = executionSlotSharingGroup;
break;
}
}


if (group == null) {
group = new ExecutionSlotSharingGroup();
group.setResourceProfile(slotSharingGroup.getResourceProfile());
groups.add(group);
}


addVertexToExecutionSlotSharingGroup(executionVertex, group);
}
}
4.2   如何避免tm級別的負載過重?

這個問題主要是在于說有一些過重的task對應的slot都分配在了同一個tm上,導致整個tm壓力過大,資源難以協調。在整個過程中其實我們有看到tm信息的交互,在co-location constraint上。我們看下該hint職責:

The co-location group is used to make sure that the i-th subtasks for iteration head and iteration tail are scheduled on the same TaskManager.

也就是說其實是為了解決算子間相同index的task數據傳遞之類的問題,但對于task的均衡負載無法介入。對此我們嘗試去做的事情:

在當前不使用細粒度資源配置的情況下,考慮task-slot之間均衡分布的同事,task-tm也能做到一定的負載均衡。這種情況可以通過tm單slot來解決,也可以在保證task-slotSharingGroup足夠隨機性的同時,保證slotSharingGroup-tm的足夠隨機性。

在后續使用使用細粒度資源配置的情況下,不使用slotsharing,且將相同jobVertex對應的task盡量分布在同一個task當中。這個我們后續準備在slotProfile中加入jobVertex相關的tag,SlotAllocator做slot matching的時候加入jobVertex constraint來保證task的位置分配。

5寫在最后

Flink開源社區較活躍,Task側的部署鏈路也一直在演進中,持續跟進并深入了解內部實現邏輯能更好的支持我們解決Flink個性化調度策略上的一些問題。后續我們也準備進一步完善Flink在operator級別的細粒度資源配置能力,降低資源使用率的同時進一步提高Flink作業穩定性。

責任編輯:武曉燕 來源: 得物技術
相關推薦

2024-02-27 08:05:32

Flink分區機制數據傳輸

2014-01-06 17:09:10

ApacheMesos

2022-01-14 07:56:38

Checkpoint機制Flink

2025-08-27 10:00:00

FlinkCheckpoint大數據

2025-01-15 09:13:53

2021-11-02 06:58:55

FlinkWindow機制

2024-06-04 15:56:48

Task?.NET異步編程

2022-12-20 10:22:16

計算函數

2015-03-24 16:29:55

默認線程池java

2020-10-10 14:21:49

CDH6.3.2flink部署

2013-08-05 17:09:57

2023-06-20 07:32:04

2025-09-08 02:00:00

2025-10-29 07:00:00

FlinkSpark大數據

2021-07-30 19:44:51

AndroidJava線程

2020-03-03 08:29:07

時延敏感網絡TSN網絡

2022-06-20 06:38:50

Flink批作業算子

2025-06-03 07:00:00

大數據Flink并行度

2009-03-02 14:19:33

CiscoWi-Fi通話調度

2021-02-01 11:30:13

React前端調度
點贊
收藏

51CTO技術棧公眾號

www.激情网| 92国产精品视频| 波多野结衣 在线| 国产成人精品一区二区三区视频| 日本一区二区三区免费乱视频| 国产精品香蕉在线观看| 久久精品99国产精| 国产伦精品一区二区三区视频| 欧美三级在线视频| 成人午夜免费在线视频| 国产在线观看高清视频| 麻豆91精品视频| 久久久久久亚洲精品| 91成人破解版| 爱高潮www亚洲精品| 色婷婷综合久久| 成人在线视频一区二区三区| 国产在线一在线二| 粉嫩13p一区二区三区| 国产成人免费av| 欧美黑人一级片| 欧美日韩国产高清电影| 精品久久久久久久人人人人传媒| 国产极品美女高潮无套久久久| 国产鲁鲁视频在线观看特色| 久久午夜色播影院免费高清 | 亚洲综合视频| 色综合激情五月| 国产真实老熟女无套内射| 中国日本在线视频中文字幕| 97se亚洲国产综合在线| 97久久夜色精品国产九色| 亚洲精品一区二区二区| 亚洲影院免费| 欧美极品少妇xxxxⅹ免费视频| 成人精品一二三区| 国产一区二区三区四区五区传媒 | 国产美女精彩久久| 无码人妻久久一区二区三区| 亚洲激情另类| 欧美大尺度激情区在线播放| 日韩欧美视频免费观看| 亚洲视频分类| 日韩国产中文字幕| 涩视频在线观看| 日韩免费精品| 日韩一区二区免费在线电影| 一本一道久久a久久综合蜜桃| 久久久成人av毛片免费观看| 欧美性生交xxxxx久久久| www在线观看免费| 免费电影网站在线视频观看福利| 亚洲人成影院在线观看| 一区二区三区电影| 日韩美女网站| 亚洲免费毛片网站| 国内外成人激情免费视频| 二区三区四区高清视频在线观看| 亚洲人成在线观看一区二区| 真人做人试看60分钟免费| 在线免费av导航| 一区二区在线观看免费视频播放 | 大黑人交xxx极品hd| 精品福利一区| 日韩国产欧美区| 极品蜜桃臀肥臀-x88av| 日本精品黄色| 日韩性生活视频| 全程偷拍露脸中年夫妇| 亚洲欧美一区在线| 久久久久久国产精品美女| 国产在线一二区| 亚洲一区二区网站| 国产精品久久视频| 999精品国产| 福利电影一区二区| 欧美激情第六页| 91免费在线| 一区二区久久久久| 国产成人精品视频免费看| 日韩影片中文字幕| 欧美色男人天堂| 四川一级毛毛片| 国产精品网在线观看| 亚洲国产精品网站| 亚洲成人黄色av| 99久久激情| 久久久久久综合网天天| 神马久久久久久久| 久久99蜜桃精品| 国产精品.com| eeuss影院www在线观看| 综合久久给合久久狠狠狠97色 | 欧美一区二区在线免费播放| 色悠悠在线视频| 国产精品探花在线观看| 欧美成人网在线| 69国产精品视频免费观看| 九色|91porny| 久久久综合亚洲91久久98| 午夜激情视频在线| 一区二区视频免费在线观看| av片中文字幕| 这里视频有精品| 这里精品视频免费| 久久精品国产亚洲AV无码男同 | 国产视频福利在线| 亚洲一区二区在线播放相泽| www.日日操| 国产91精品入| 久久精品青青大伊人av| 日韩中文字幕在线观看视频| 国产美女视频一区| 亚洲欧洲久久| 123区在线| 欧美一二三在线| 欧美午夜激情影院| 国产精品久久久久久久免费软件 | 亚洲精品一区二区三区四区| 欧美经典一区二区| 男人操女人免费软件| 人人爱人人干婷婷丁香亚洲| 一区二区三区黄色| 一级片中文字幕| 国产成+人+日韩+欧美+亚洲 | 欧美视频亚洲视频| 国产在线999| 国产三级电影在线观看| 午夜久久久久久| xxxxwww一片| 亚洲精品成人无限看| 国产精品久久久久久久久久东京| 天堂中文在线观看视频| 亚洲制服欧美中文字幕中文字幕| 91女神在线观看| 日韩欧美视频在线播放| 国产精品av在线播放| 三级国产在线观看| 天天综合色天天综合色h| 亚洲成人激情小说| 一区二区中文字| 91夜夜未满十八勿入爽爽影院| 国产youjizz在线| 日本丶国产丶欧美色综合| 欧美做受喷浆在线观看| 99成人免费视频| 久久99国产精品| 天堂中文在线播放| 国产视频丨精品|在线观看| 亚洲国产成人精品激情在线| 成人午夜碰碰视频| 国产毛片视频网站| 美女一区二区在线观看| 性欧美长视频免费观看不卡| 日韩中文字幕免费观看| 精品久久久久久久大神国产| 午夜免费福利影院| 在线亚洲免费| 欧美一区二区视频17c| 中文字幕av一区二区三区佐山爱| 亚洲欧美国产精品专区久久| 国产精品免费无遮挡无码永久视频| 久久亚洲私人国产精品va媚药| 漂亮人妻被中出中文字幕| 久久99国产精一区二区三区| 国产成人97精品免费看片| 大胆av不用播放器在线播放| 欧美日韩精品欧美日韩精品| 免费精品在线视频| 国产成人精品免费| 国产日韩av网站| 久久99国内| 成人性生交大片免费看视频直播 | 中文字幕在线视频一区二区| 欧美日韩天堂| 国产精品日韩一区二区| 天堂av在线网| 日韩在线中文字| 亚洲第一精品网站| 欧美视频国产精品| 成人午夜免费影院| 国产福利精品导航| 男人天堂成人在线| 欧美另类综合| 欧美一区二区三区在线播放| 亚洲伊人精品酒店| 性色av一区二区三区| 在线看免费av| 亚洲国产成人精品久久久国产成人一区 | 欧美激情久久久久久久久久久| 国产成人精品国内自产拍免费看| 麻豆传媒视频在线| 日韩精品免费在线视频| 一级黄色片免费| 精品国产91久久久久久老师| 免费成人深夜蜜桃视频| 99精品1区2区| 亚洲男人天堂av在线| 99精品免费网| 日本一区二区三区四区五区六区| 色婷婷av一区二区三区丝袜美腿| 国产日产亚洲精品| 午夜影院在线播放| 欧美久久精品一级黑人c片| 精品欧美不卡一区二区在线观看| 正在播放亚洲一区| 中文字幕在线天堂| 五月天欧美精品| 四虎永久免费在线| 国产欧美日韩亚州综合| 国产精品成人99一区无码| 蜜臀精品一区二区三区在线观看 | 久一视频在线观看| 国产精品乱子久久久久| 国产艳俗歌舞表演hd| 国产成人精品影视| 国产成人在线综合| 日日夜夜免费精品视频| 狠狠干 狠狠操| 欧美日韩一卡| 大地资源第二页在线观看高清版| 亚洲制服一区| 久久久久久国产精品mv| 国产精品对白久久久久粗| 成人av在线亚洲| a屁视频一区二区三区四区| 欧美一区二区.| missav|免费高清av在线看| 久久大大胆人体| 天堂а√在线资源在线| 亚洲香蕉av在线一区二区三区| 人人妻人人澡人人爽人人欧美一区| 91麻豆精品久久久久蜜臀| 中文字幕在线观看视频一区| 色综合久久久久综合体桃花网| 九九热国产视频| 亚洲韩国精品一区| 国产大片aaa| 亚洲影视在线播放| 毛片a片免费观看| 亚洲一区在线免费观看| 九九热这里有精品视频| 一区二区在线免费| 久久一二三四区| 亚洲一区二区三区视频在线播放| 国产在线观看成人| 午夜伊人狠狠久久| 91美女免费看| 在线免费亚洲电影| 一级黄色免费片| 日韩欧美亚洲另类制服综合在线 | 日韩一区二区三区四区五区| 成人国产精品av| 日韩精品一区国产| 精品视频一区二区| 色棕色天天综合网| 亚洲精品一区二区三区樱花 | 欧美成人精品三级网站| 国产日韩欧美综合一区| 少妇按摩一区二区三区| 久久一日本道色综合| 性欧美丰满熟妇xxxx性仙踪林| 91免费在线看| 精品日韩在线视频| 亚洲欧美国产三级| 久久精品视频久久| 色妹子一区二区| 一本色道久久综合无码人妻| 制服丝袜成人动漫| 色欲久久久天天天综合网| 亚洲精品日韩丝袜精品| 91精品国产91久久久久游泳池| 久久精品中文字幕电影| 国产理论电影在线| 日本精品久久中文字幕佐佐木| 日韩精品一区二区三区av| 国产精品偷伦一区二区| 日韩视频一二区| 国产视频在线观看一区| 狠狠色狠狠色综合婷婷tag| 亚洲v国产v在线观看| 午夜精品偷拍| av在线播放亚洲| 丝袜美腿亚洲综合| 无码人妻一区二区三区在线视频| 国产成人久久精品77777最新版本| 又黄又色的网站| 国产清纯美女被跳蛋高潮一区二区久久w | 91久久久国产精品| 日韩精品免费视频一区二区三区 | 久久久久成人黄色影片| 69夜色精品国产69乱| 亚洲精品写真福利| av黄色在线看| 欧美精品精品一区| 日本美女一级视频| 国产一区二区三区在线播放免费观看| 婷婷五月在线视频| 国外成人免费在线播放| 91麻豆精品一二三区在线| 国产精品日韩一区二区三区| 国产成人一区| 日本在线xxx| 久久精品国产网站| 中文字幕人妻一区二区| 亚洲欧美区自拍先锋| 日韩网红少妇无码视频香港| 欧美疯狂性受xxxxx喷水图片| 囯产精品一品二区三区| 国产小视频国产精品| 国产乱码午夜在线视频| 国产专区欧美专区| 中文久久电影小说| 国产精品av免费| 另类国产ts人妖高潮视频| av电影在线播放| 国产精品久久久久永久免费观看 | 国内国产精品久久| 国产免费看av| 亚洲国产一区二区三区青草影视| 国产精品久久影视| 日韩理论片久久| 免费在线小视频| 99九九视频| 色综合天天综合网中文字幕| 亚洲性生活网站| 99在线精品免费| 国产精品自拍视频一区| 欧美日韩成人一区| 成人免费在线电影| 日韩av电影在线播放| 福利片一区二区| 精品无码国模私拍视频| 国产成人免费高清| 日韩精品123区| 欧美精品久久久久久久多人混战| 黄色在线免费观看大全| 欧美最猛性xxxxx亚洲精品| 亚洲精品不卡在线观看| 亚洲欧美国产精品桃花| 人人狠狠综合久久亚洲| www.超碰97| 午夜精品久久久久影视| 超碰福利在线观看| 久久国产精品影片| jvid一区二区三区| 伊人精品久久久久7777| 日韩电影网1区2区| 日本裸体美女视频| 欧美三级三级三级爽爽爽| 深夜视频在线免费| 日本精品久久久久久久| 久久av超碰| 性chinese极品按摩| 国产欧美精品区一区二区三区| 国内精品福利视频| 日韩禁在线播放| 亚洲小少妇裸体bbw| 51国偷自产一区二区三区的来源 | 亚洲福利影视| 三级网在线观看| 国产一区二区三区观看| 国产无遮挡又黄又爽在线观看| 日韩欧美国产1| 伦理av在线| 久久影院理伦片| 老司机亚洲精品| 青草影院在线观看| 亚洲成人xxx| 99久久精品一区二区成人| 亚洲视频在线观看日本a| 国产一区二区三区四| 青娱乐国产精品| 亚洲国产精品资源| yiren22亚洲综合| 伊人久久大香线蕉午夜av| 国产成人精品aa毛片| 黄网在线观看视频| 亚洲一区二区久久| 不卡的国产精品| 日韩在线视频在线| 久久久久久日产精品| 国产91av在线播放| 欧美激情精品久久久久久黑人| 麻豆一区一区三区四区| 做a视频在线观看| 亚洲成人免费电影| 欧美色图另类| 999国内精品视频在线| 亚洲麻豆av| 国产又粗又长又硬| 精品国产乱码久久久久久影片| 欧美成人资源| 一区二区三区日韩视频| 国产精品夜夜嗨| 久久国产香蕉视频| 精品少妇一区二区30p| 欧美精选一区二区三区| 久久精品无码一区二区三区毛片 | 最近2019中文免费高清视频观看www99 |