精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲最大视频网| 91久久久久久久一区二区| 九九热精品在线播放| 又爽又大又黄a级毛片在线视频| 久久先锋影音| 中文字幕国产亚洲2019| 午夜精品久久久久久久99热影院| gogo在线高清视频| 成人高清视频在线观看| 色综合久综合久久综合久鬼88| 一级黄色免费视频| 成人免费看视频网站| 欧美激情综合五月色丁香 | 久久久久亚洲av无码专区桃色| 日韩精品极品| 国产精品高潮久久久久无| 91精品视频大全| 国产一级淫片免费| 伊人春色精品| 91精选在线观看| 亚洲免费色视频| 日韩av免费在线播放| 999久久久国产| 风间由美一区二区av101| 色婷婷综合中文久久一本| 手机成人av在线| 欧美一级做性受免费大片免费| 亚洲一区自拍| 久久影视电视剧免费网站清宫辞电视| 国产精品入口麻豆| 欧美aaa级| 黄色成人在线播放| 中文字幕一区二区三区乱码| 国产精品丝袜黑色高跟鞋| 亚洲精品韩国| 久久国产加勒比精品无码| 亚洲色图14p| 免费看一区二区三区| 色av综合在线| 僵尸世界大战2 在线播放| 在线免费看a| 狠狠色丁香九九婷婷综合五月| 欧美激情影音先锋| 国产免费久久久久| 国产精品片aa在线观看| 精品国精品自拍自在线| 五月天中文字幕在线| 欧美xxx网站| 亚洲国产成人av网| 国产免费xxx| 中文字幕在线免费| 国产亚洲欧美中文| 精品婷婷色一区二区三区蜜桃| 国产免费一区二区三区最新不卡 | 国产麻豆91精品| 国产精品久久久久久久天堂| 日韩精品视频免费看| 一二三区不卡| 国产日韩欧美一区二区三区综合 | 浴室偷拍美女洗澡456在线| 黄色视屏网站在线免费观看| www.欧美亚洲| 国产区二精品视| 成人午夜视频一区二区播放| 国产中文一区二区三区| 国产精品一区二区三区久久| 日本中文字幕久久| 亚洲欧美日韩一区在线观看| 久久免费少妇高潮久久精品99| 婷婷在线精品视频| 欧美久久久久| 久久这里只有精品99| 成人在线观看免费高清| 成人久久综合| 日日骚av一区| 青青青视频在线免费观看| 欧美码中文字幕在线| 日韩精品免费在线视频| 97人妻天天摸天天爽天天| 另类春色校园亚洲| 亚洲黄色av网站| 国产制服丝袜在线| 中文有码一区| 国产一区二区三区直播精品电影 | 亚洲国产精选| 欧美高清性hdvideosex| 在线视频观看91| 日本在线一区二区三区| 亚洲精品一区二区三区99| 无套内谢丰满少妇中文字幕| 亚洲91网站| 亚洲国产精品人人爽夜夜爽| 欧美深性狂猛ⅹxxx深喉| 欧美一区二区三区久久| 亚洲欧美中文字幕| 国产一区在线观看免费| 亚洲女同另类| 久久久久久美女| 人妻无码一区二区三区四区| 欧美黄色免费看| 亚洲精品成人无限看| 欧美久久久精品| 日韩三级小视频| 日韩精品一二区| 成人免费福利在线| 亚洲爱情岛论坛永久| 久久蜜桃av一区二区天堂| 一区二区三区欧美成人| 成人爽a毛片免费啪啪动漫 | 日本高清不卡码| 日本vs亚洲vs韩国一区三区二区 | 伊人365影院| 西西裸体人体做爰大胆久久久| 国产精品美女在线观看| 精品久久久久久亚洲综合网站 | 91免费看片在线| 人成网站在线观看| 国产亚洲欧美在线| 欧美人成在线观看| 欧美性xxx| 精品剧情v国产在线观看在线| 人妻丰满熟妇av无码久久洗澡| jlzzjlzz亚洲女人| 午夜精品一区二区三区在线播放 | 国产精品久久久久久久免费大片 | 亚洲经典在线| 国产精品伦子伦免费视频| 性一交一乱一乱一视频| 中文一区在线播放| 超碰超碰超碰超碰超碰| 精品成人av| 精品乱人伦小说| 波兰性xxxxx极品hd| 在线日韩欧美| 国产免费一区二区三区在线能观看| 亚洲自拍中文字幕| 国产毛片在线视频| 国产午夜精品福利| 水蜜桃色314在线观看| 国产一区二区三区| 国产一区二区三区网站| 国产午夜小视频| 韩国v欧美v日本v亚洲v| 日韩精品无码一区二区三区| 成人三级高清视频在线看| 日韩欧美中文字幕一区| 亚洲av熟女国产一区二区性色| 一区免费在线| 3d动漫精品啪啪一区二区三区免费| 成人一区二区不卡免费| 日韩欧美国产成人| 绯色av蜜臀vs少妇| 中文不卡在线| 成人动漫网站在线观看| 国产在线黄色| 色婷婷综合久久久中文字幕| 在线观看免费视频黄| 91成人看片| 91情侣偷在线精品国产| 欧美精品电影| 在线看日本不卡| 久操视频免费看| 老**午夜毛片一区二区三区| 蜜桃av噜噜一区二区三| 18video性欧美19sex高清| 日韩欧美一区电影| 久久久久久久久久久久久久久久久| 精品一区二区三区在线播放| 日韩亚洲视频在线| 欧美大胆成人| 亚洲天堂男人的天堂| 国产成人精品777777| 97se亚洲国产综合自在线不卡| 国产乱子伦精品无码专区| 亚洲视频国产| 国语对白做受69| 欧美一级在线免费观看| 舔着乳尖日韩一区| 中文精品在线观看| 日韩国产精品久久| 亚洲国产高清国产精品| 亚洲一区二区av| 久久99精品久久久久久噜噜| 欧美一区二区视频在线| 在线免费黄色| 91精品国产欧美一区二区18| 国产免费无码一区二区视频| 丰满岳乱妇一区二区三区| 久操网在线观看| 久草在线成人| 成人网在线视频| 欧美另类极品| 亚洲国产成人91精品| 在线免费黄色av| 国产精品久久久久影院| 在线观看中文av| 亚洲高清激情| 欧美亚洲一级二级| 日韩一区中文| 欧美另类极品videosbestfree| 国内精品偷拍视频| 欧美性jizz18性欧美| 在线观看国产免费视频| 日韩精品乱码av一区二区| 中文字幕99| 色婷婷综合久久久久久| 国产欧美日韩精品专区| 怡红院av在线| 亚洲欧美国产高清va在线播| 亚洲专区第一页| 亚洲一二三四区不卡| 草草地址线路①屁屁影院成人| 美女视频一区在线观看| 日韩a∨精品日韩在线观看| 成人免费av| 国产一区免费视频| 成人看片毛片免费播放器| 最近2019年好看中文字幕视频 | 国产伦精品一区二区三| 91av一区| 97国产成人精品视频| yiren22综合网成人| 精品欧美乱码久久久久久| 黄色av一区二区| 亚洲高清一区二区三区| 青青操在线播放| 91丨国产丨九色丨pron| 成人不卡免费视频| 性高湖久久久久久久久| 图片区小说区区亚洲五月| 精品欧美午夜寂寞影院| 成人性教育视频在线观看| 免费毛片在线看片免费丝瓜视频 | 91最新在线观看| 亚洲欧洲另类| 99er在线视频| 在线成人动漫av| 国产精品久久久久久久久久久久冷 | 亚洲精品午夜国产va久久成人| 中文字幕亚洲成人| 制服 丝袜 综合 日韩 欧美| 99精品视频一区| 中文av字幕在线观看| 老司机午夜免费精品视频| 日韩xxxx视频| 国内精品嫩模av私拍在线观看| 亚洲午夜久久久影院伊人| 深爱激情综合网| 精品久久精品久久| 国产成人aa在线观看网站站| 亚洲自拍偷拍色图| 欧美极品在线| 成人av在线亚洲| 99只有精品| 国产精品美女av| 国产精品成人无码| 精品久久久中文| 91porny在线| 日本韩国欧美三级| 中文字幕乱码在线观看| 欧美精品成人一区二区三区四区| 国产三级按摩推拿按摩| 日韩情涩欧美日韩视频| 日韩永久免费视频| 亚洲欧美日韩中文视频| 91精品专区| 超碰97人人做人人爱少妇| 高h视频在线播放| 97精品视频在线| 亚洲伦乱视频| 91久久精品www人人做人人爽| 99这里只有精品视频| 精品午夜一区二区三区| 国产一区二区三区日韩精品 | 亚洲精品国产成人av在线| 97精品久久久午夜一区二区三区| 久久精品老司机| 国产精品对白交换视频| 欧美黄色一区二区三区| 欧美视频在线看| 一卡二卡三卡在线| 精品国产污污免费网站入口 | 91av俱乐部| 亚洲+小说+欧美+激情+另类| 一区二区三区的久久的视频| 亚洲欧美一区在线| 成人在线免费在线观看| 久草中文综合在线| 国产乱了高清露脸对白| 国产精品久久久久久久久搜平片 | 欧美性色黄大片| 精品国产av 无码一区二区三区| 亚洲精品黄网在线观看| 在线激情免费视频| 国模视频一区二区| 九九久久国产| 久久香蕉综合色| 婷婷综合激情| 亚洲成熟丰满熟妇高潮xxxxx| 国内精品视频一区二区三区八戒 | 亚洲黄页在线观看| 艳母动漫在线观看| 美女91精品| 在线播放av网址| 国产精品久久久久久亚洲毛片| www.av视频在线观看| 欧美欧美午夜aⅴ在线观看| 好男人www在线视频| 日日骚久久av| 日韩电影免费观| 国产一区二区三区奇米久涩| 亚洲九九在线| 久久久久久久久久久久91| gogogo免费视频观看亚洲一| 国产一二三区精品| 欧美日韩一区二区不卡| 日韩资源在线| 久久人人爽人人爽人人片av高清| 91丨精品丨国产| 视频在线一区二区三区| 亚洲主播在线| 中文字幕免费高清视频| 一级精品视频在线观看宜春院| 亚洲视频在线观看一区二区| 国产亚洲精品久久久久动| 欧美gv在线| 精品在线一区| 国产亚洲精品自拍| 亚洲激情 欧美| 亚洲综合男人的天堂| 精品国产伦一区二区三区| 久久久极品av| 日韩护士脚交太爽了| 亚洲欧洲国产日韩精品| 男女男精品网站| 亚洲精品成人av久久| 欧美中文字幕一区二区三区| 国产女人在线视频| 国产精品99久久久久久www| 免费成人高清在线视频theav| 各处沟厕大尺度偷拍女厕嘘嘘| 成人黄色大片在线观看| 日韩手机在线观看| 中文字幕欧美一| 色婷婷精品久久二区二区密| 一区二区三区高清| 精品人妻无码一区二区三区蜜桃一| 成人444kkkk在线观看| 精品国产鲁一鲁****| 国产在线无码精品| 成人性生交大片免费看视频在线| 国产精品久久久久久久精| 日韩一区二区三区在线观看| 18av在线视频| av免费观看久久| 在线欧美三区| 风间由美一二三区av片| 91精品办公室少妇高潮对白| 精品电影在线| 国产在线视频欧美| 亚洲精品一区二区在线看| 久久久久亚洲av片无码v| 亚洲国产精品久久久久婷婷884| 香港一级纯黄大片| 国产精品久久一区主播| 国产精品88久久久久久| 国产调教打屁股xxxx网站| 午夜电影网一区| jizz日韩| 亚洲综合精品一区二区| 精品电影一区| a级大片在线观看| 欧美酷刑日本凌虐凌虐| 牛牛精品视频在线| 麻豆成人av| 麻豆国产欧美一区二区三区| 亚洲国产成人精品综合99| 亚洲的天堂在线中文字幕| 456亚洲精品成人影院| aaa免费在线观看| 99久久精品国产麻豆演员表| 在线视频精品免费| 久久成人精品电影| 天堂在线精品| 伊人色在线观看| 亚洲成av人**亚洲成av**| 国产一级在线观看| 99高清视频有精品视频| 久久久夜精品| 欧美日韩精品一区二区三区视频播放 | 性欧美视频videos6一9| 色天天综合网| 日韩综合第一页| 欧美性色黄大片| 爱看av在线入口| 亚洲一区二区三区精品在线观看| 成人免费视频视频| 亚洲综合成人av| 久久91精品国产| 色135综合网|