国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

Nacos17# NacosSync雙向復(fù)制源碼分析

共 25920字,需瀏覽 52分鐘

 ·

2021-09-06 22:47

引言

通過(guò)開(kāi)源同步工具NacosSync的分析,對(duì)我們實(shí)現(xiàn)自定義的同步工具提供參考。文本就同步任務(wù)分發(fā)與Nacos集群之間、從zk到Nacos的同步源碼做個(gè)分析。

一、內(nèi)容提要

任務(wù)和配置入庫(kù)

  • 集群配置入庫(kù)
  • 同步任務(wù)入庫(kù)

同步任務(wù)分發(fā)

  • 每三秒調(diào)度一次任務(wù)列表
  • 新增任務(wù)發(fā)布同步任務(wù)事件SyncTaskEvent并由listenerSyncTaskEvent處理
  • 刪除任務(wù)發(fā)布刪除任務(wù)事件DeleteTaskEvent并由listenerDeleteTaskEvent處理
  • 任務(wù)的發(fā)布和訂閱使用Guava的EventBus

Nacos集群之間同步邏輯

  • 兩個(gè)Nacos集群之間進(jìn)行同步,同步任務(wù)在Service維度(AppId)建立
  • 對(duì)源集群注冊(cè)監(jiān)聽(tīng)獲取注冊(cè)節(jié)點(diǎn)列表,通過(guò)剔除無(wú)效節(jié)點(diǎn)后,將新的節(jié)點(diǎn)注冊(cè)到目標(biāo)集群

從zk集群同步到Nacos集群

  • NacosSync從zk集群同步到Nacos只支持dubbo路徑
  • 第一次先同步所有節(jié)點(diǎn)過(guò)去,再監(jiān)聽(tīng)源集群路徑變化,同步到目標(biāo)集群

二、任務(wù)和配置入庫(kù)

入庫(kù)部分比較簡(jiǎn)單,只列出入口和處理類(lèi)。

集群配置入庫(kù)

請(qǐng)求入口:ClusterApi#clusterAdd

入庫(kù)處理:ClusterAddProcessor#process

clusterAccessService.insert(clusterDO);

同步任務(wù)入庫(kù)

請(qǐng)求入口:TaskApi#taskAdd

入庫(kù)處理:TaskAccessService#addTask

 taskAccessService.addTask(taskDO);

三、同步任務(wù)分發(fā)

同步任務(wù)入庫(kù)了,緊著需要任務(wù)進(jìn)行分發(fā)。代碼翻到QuerySyncTaskTimer實(shí)現(xiàn)了springboot的CommandLineRunner接口。

定時(shí)任務(wù)調(diào)度

public void run(String... args) {
 scheduledExecutorService.scheduleWithFixedDelay(new CheckRunningStatusThread(), 03000,
 TimeUnit.MILLISECONDS);
}

備注: 定時(shí)任務(wù)每3秒鐘調(diào)度一次。

調(diào)度任務(wù)執(zhí)行

private class CheckRunningStatusThread implements Runnable {

    @Override
    public void run() {

        Long start = System.currentTimeMillis();
        try {
           // 注解@1
            Iterable<TaskDO> taskDOS = taskAccessService.findAll();
            taskDOS.forEach(taskDO -> {
               // 注解@2 
                if ((null != skyWalkerCacheServices.getFinishedTask(taskDO))) {
                    return;
                }
               // 注解@3
                if (TaskStatusEnum.SYNC.getCode().equals(taskDO.getTaskStatus())) {
                    eventBus.post(new SyncTaskEvent(taskDO));
                    log.info("從數(shù)據(jù)庫(kù)中查詢(xún)到一個(gè)同步任務(wù),發(fā)出一個(gè)同步事件:" + taskDO);
                }
        // 注解@4
                if (TaskStatusEnum.DELETE.getCode().equals(taskDO.getTaskStatus())) {
                    eventBus.post(new DeleteTaskEvent(taskDO));
                    log.info("從數(shù)據(jù)庫(kù)中查詢(xún)到一個(gè)刪除任務(wù),發(fā)出一個(gè)同步事件:" + taskDO);
                }
            });

        } catch (Exception e) {
            log.warn("CheckRunningStatusThread Exception", e);
        }
    // 注解@5
        metricsManager.record(MetricsStatisticsType.DISPATCHER_TASK, System.currentTimeMillis() - start);
    }
}

注解@1 查詢(xún)所有同步任務(wù)

注解@2 過(guò)濾已完成的任務(wù)

注解@3 發(fā)布一個(gè)同步任務(wù)事件SyncTaskEvent

注解@4 發(fā)布一個(gè)刪除任務(wù)事件DeleteTaskEvent

注解@5 通過(guò)metric統(tǒng)計(jì)本次調(diào)度任務(wù)執(zhí)行的耗時(shí)情況

小結(jié): 當(dāng)有新增任務(wù)或者刪除任務(wù)時(shí)通過(guò)Guava的EventBus發(fā)布一個(gè)同步事件或刪除事件,該檢測(cè)3秒執(zhí)行一次。

四、同步事件處理

代碼EventListener#listenerSyncTaskEvent訂閱了同步事件SyncTaskEvent。

@Subscribe
public void listenerSyncTaskEvent(SyncTaskEvent syncTaskEvent) {

    try {
        long start = System.currentTimeMillis();
       // 注解@6
        if (syncManagerService.sync(syncTaskEvent.getTaskDO())) {    
           // 注解@7
            skyWalkerCacheServices.addFinishedTask(syncTaskEvent.getTaskDO());
           // 注解@8
            metricsManager.record(MetricsStatisticsType.SYNC_TASK_RT, System.currentTimeMillis() - start);
        } else {
            log.warn("listenerSyncTaskEvent sync failure");
        }                
    } catch (Exception e) {
        log.warn("listenerSyncTaskEvent process error", e);
    }

}

注解@6 執(zhí)行同步任務(wù)

注解@7 標(biāo)記該同步任務(wù)完成

注解@8 記錄任務(wù)執(zhí)行時(shí)間

代碼EventListener#listenerDeleteTaskEvent訂閱了刪除任務(wù)事件DeleteTaskEvent。

@Subscribe
public void listenerDeleteTaskEvent(DeleteTaskEvent deleteTaskEvent) {

    try {
        long start = System.currentTimeMillis();
        if (syncManagerService.delete(deleteTaskEvent.getTaskDO())) {
            skyWalkerCacheServices.addFinishedTask(deleteTaskEvent.getTaskDO());
            metricsManager.record(MetricsStatisticsType.DELETE_TASK_RT, System.currentTimeMillis() - start);
        } else {
            log.warn("listenerDeleteTaskEvent delete failure");
        }                
    } catch (Exception e) {
        log.warn("listenerDeleteTaskEvent process error", e);
    }

}

小結(jié):  listenerSyncTaskEvent和listenerDeleteTaskEvent代碼結(jié)構(gòu)一致,執(zhí)行任務(wù)邏輯,執(zhí)行完緩存已完成任務(wù),最后記錄耗時(shí)情況。

五、Nacos集群之間同步邏輯

先看下Nacos集群之間的同步,代碼在NacosSyncToNacosServiceImpl#sync部分。

執(zhí)行同步邏輯

@Override
public boolean sync(TaskDO taskDO) {
  String taskId = taskDO.getTaskId();
  try {
    // 注解@7
    NamingService sourceNamingService =
      nacosServerHolder.get(taskDO.getSourceClusterId(), taskDO.getNameSpace());

    // 注解@8
    NamingService destNamingService = nacosServerHolder.get(taskDO.getDestClusterId(), taskDO.getNameSpace());


    this.listenerMap.putIfAbsent(taskId, event -> {
      if (event instanceof NamingEvent) {
        try {
          // 注解@9
          List<Instance> sourceInstances = sourceNamingService.getAllInstances(taskDO.getServiceName(),
                                                                               getGroupNameOrDefault(taskDO.getGroupName()), new ArrayList<>(), true);

          // 注解@10
          this.removeInvalidInstance(taskDO, destNamingService, sourceInstances);

          // 注解@11
          if (sourceInstances.isEmpty()) {
            sourceInstanceSnapshot.remove(taskId);
            return;
          }

          // 注解@12
          this.syncNewInstance(taskDO, destNamingService, sourceInstances);
        } catch (Exception e) {
          log.error("event process fail, taskId:{}", taskId, e);
          metricsManager.recordError(MetricsStatisticsType.SYNC_ERROR);
        }
      }
    });

    sourceNamingService.subscribe(taskDO.getServiceName(), getGroupNameOrDefault(taskDO.getGroupName()),
                                  listenerMap.get(taskId));
  } catch (Exception e) {
    log.error("sync task from nacos to nacos was failed, taskId:{}", taskId, e);
    metricsManager.recordError(MetricsStatisticsType.SYNC_ERROR);
    return false;
  }
  return true;
}

注解@7 創(chuàng)建源集群的NameService

注解@8 創(chuàng)建目標(biāo)集群的NameService

注解@9 獲取服務(wù)注冊(cè)的實(shí)例

注解@10 先刪除已失效的節(jié)點(diǎn)

private void removeInvalidInstance(TaskDO taskDO, NamingService destNamingService,
    List<Instance> sourceInstances)
 throws NacosException 
{

    String taskId = taskDO.getTaskId();
    if (this.sourceInstanceSnapshot.containsKey(taskId)) {
        // 注解@10.1
        Set<String> oldInstanceKeys = this.sourceInstanceSnapshot.get(taskId);
        List<String> newInstanceKeys = sourceInstances.stream().map(this::composeInstanceKey)
            .collect(Collectors.toList());
        // 注解@10.2
        Collection<String> instanceKeys = Collections.subtract(oldInstanceKeys, newInstanceKeys);
        for (String instanceKey : instanceKeys) {
            log.info("任務(wù)Id:{},移除無(wú)效同步實(shí)例:{}", taskId, instanceKey);
            String[] split = instanceKey.split(":", -1);
            // 注解@10.3
            destNamingService
                .deregisterInstance(taskDO.getServiceName(), getGroupNameOrDefault(taskDO.getGroupName()), split[0],
                    Integer.parseInt(split[1]));

        }
    }
}

注解@10.1   緩存的舊節(jié)點(diǎn)信息

注解@10.2  從舊節(jié)點(diǎn)中剝離出廢棄無(wú)效的節(jié)點(diǎn)

注解@10.3 將廢棄無(wú)效節(jié)點(diǎn)注銷(xiāo)

注解@11 如果同步實(shí)例已經(jīng)為空代表該服務(wù)所有實(shí)例已經(jīng)下線,清除本地持有快照

注解@12  同步新節(jié)實(shí)例到目標(biāo)集群并更新緩存

private void syncNewInstance(TaskDO taskDO, NamingService destNamingService,
    List<Instance> sourceInstances)
 throws NacosException 
{
    Set<String> latestSyncInstance = new TreeSet<>();
    // 再次添加新實(shí)例
    String taskId = taskDO.getTaskId();
    // 注解@12.1
    Set<String> instanceKeys = sourceInstanceSnapshot.get(taskId);
    // 注解@12.2
    for (Instance instance : sourceInstances) {
        if (needSync(instance.getMetadata())) {
            String instanceKey = composeInstanceKey(instance);
            // 注解@12.3
            if (CollectionUtils.isEmpty(instanceKeys) || !instanceKeys.contains(instanceKey)) {
                destNamingService.registerInstance(taskDO.getServiceName(),
                    getGroupNameOrDefault(taskDO.getGroupName()),
                    buildSyncInstance(instance, taskDO));
            }
            // 注解@12.4
            latestSyncInstance.add(instanceKey);
        }
    }
    if (CollectionUtils.isNotEmpty(latestSyncInstance)) {

        log.info("任務(wù)Id:{},已同步實(shí)例個(gè)數(shù):{}", taskId, latestSyncInstance.size());
        // 注解@12.5
        sourceInstanceSnapshot.put(taskId, latestSyncInstance);
    }
}

注解@12.1 緩存的舊節(jié)點(diǎn)信息

注解@12.2 遍歷新節(jié)點(diǎn)信息

注解@12.3 當(dāng)新節(jié)點(diǎn)信息不為空并且舊節(jié)點(diǎn)不存在,則注冊(cè)到目標(biāo)集群

注解@12.4 收集新節(jié)點(diǎn)

注解@12.5 更新緩存節(jié)點(diǎn)信息

小結(jié): 在兩個(gè)Nacos集群之間進(jìn)行同步,同步任務(wù)在Service維度(AppId)建立。通過(guò)對(duì)源集群注冊(cè)監(jiān)聽(tīng)獲取注冊(cè)節(jié)點(diǎn)列表,通過(guò)剔除無(wú)效節(jié)點(diǎn)后,將新的節(jié)點(diǎn)注冊(cè)到目標(biāo)集群的過(guò)程。

執(zhí)行刪除任務(wù)邏輯

代碼翻到NacosSyncToNacosServiceImpl#delete部分

public boolean delete(TaskDO taskDO) {
    try {
        NamingService sourceNamingService =
            nacosServerHolder.get(taskDO.getSourceClusterId(), taskDO.getNameSpace());
        NamingService destNamingService = nacosServerHolder.get(taskDO.getDestClusterId(), taskDO.getNameSpace());
        // 注解@13
        sourceNamingService
            .unsubscribe(taskDO.getServiceName(), getGroupNameOrDefault(taskDO.getGroupName()),
                listenerMap.remove(taskDO.getTaskId()));
        sourceInstanceSnapshot.remove(taskDO.getTaskId());

        // 注解@14
        List<Instance> sourceInstances = sourceNamingService
            .getAllInstances(taskDO.getServiceName(), getGroupNameOrDefault(taskDO.getGroupName()),
                new ArrayList<>(), false);
        for (Instance instance : sourceInstances) {
            if (needSync(instance.getMetadata())) {
               // 注銷(xiāo)操作
                destNamingService
                    .deregisterInstance(taskDO.getServiceName(), getGroupNameOrDefault(taskDO.getGroupName()),
                        instance.getIp(),
                        instance.getPort());
            }
        }
    } catch (Exception e) {
        log.error("delete task from nacos to nacos was failed, taskId:{}", taskDO.getTaskId(), e);
        metricsManager.recordError(MetricsStatisticsType.DELETE_ERROR);
        return false;
    }
    return true;
}

注解@13 移除該任務(wù)(service)源集群訂閱

注解@14 刪除目標(biāo)集群中同步的實(shí)例列表

小結(jié): 刪除邏輯比較簡(jiǎn)單,取消源集群訂閱,將目標(biāo)集群的注冊(cè)節(jié)點(diǎn)移除。


六、從zk集群同步到Nacos集群

再看從zk集群同步到Nacos集群,代碼翻到ZookeeperSyncToNacosServiceImpl#sync()

@Override
public boolean sync(TaskDO taskDO) {
    try {
        if (treeCacheMap.containsKey(taskDO.getTaskId())) {
            return true;
        }
        // 注解@1
        TreeCache treeCache = getTreeCache(taskDO);
        // 注解@2
        NamingService destNamingService = nacosServerHolder.get(taskDO.getDestClusterId(), null);
        // 注解@3
        registerAllInstances(taskDO, destNamingService);
        // 注解@4
        Objects.requireNonNull(treeCache).getListenable().addListener((client, event) -> {
            try {
                String path = event.getData().getPath();
                Map<String, String> queryParam = parseQueryString(path);
                if (isMatch(taskDO, queryParam) && needSync(queryParam)) {
                    processEvent(taskDO, destNamingService, event, path, queryParam);
                }
            } catch (Exception e) {
                // ...
            }
        });
    } catch (Exception e) {
        // ...
        metricsManager.recordError(MetricsStatisticsType.SYNC_ERROR);
        return false;
    }
    return true;
}

注解@1 監(jiān)聽(tīng)zk源集群 路徑為「/dubbo」

注解@2 目標(biāo)Nacos集群構(gòu)建

注解@3 初次執(zhí)行任務(wù)統(tǒng)一注冊(cè)所有實(shí)例

private void registerAllInstances(TaskDO taskDO, NamingService destNamingService) throws Exception {
    CuratorFramework zk =  zookeeperServerHolder.get(taskDO.getSourceClusterId(), "");
    // 注解@3.1
    if(!ALL_SERVICE_NAME_PATTERN.equals(taskDO.getServiceName())) {
        registerALLInstances0(taskDO, destNamingService, zk, taskDO.getServiceName());
    } else {
        // 注解@3.2
        List<String> serviceList = zk.getChildren().forPath(DUBBO_ROOT_PATH);
        for(String serviceName : serviceList) {
            registerALLInstances0(taskDO, destNamingService, zk, serviceName);
        }
    }
}

注解@3.1 同步特定服務(wù)注冊(cè)節(jié)點(diǎn)(Dubbo)

注解@3.2 同步全部所有的zk節(jié)點(diǎn)到Nacos

注解@4 注冊(cè)zk監(jiān)聽(tīng)監(jiān)聽(tīng)新增和更新的同步

private void processEvent(TaskDO taskDO, NamingService destNamingService, TreeCacheEvent event, String path,
                          Map<String, String> queryParam)
 throws NacosException 
{
    if(!com.alibaba.nacossync.util.StringUtils.isDubboProviderPath(path)) {
        return;
    }

    Map<String, String> ipAndPortParam = parseIpAndPortString(path);
    Instance instance = buildSyncInstance(queryParam, ipAndPortParam, taskDO);
    String serviceName = queryParam.get(INTERFACE_KEY);
    switch (event.getType()) {
        case NODE_ADDED:
        case NODE_UPDATED:
            // 注解@4.1
            destNamingService.registerInstance(
                getServiceNameFromCache(serviceName, queryParam), instance);
            break;
        case NODE_REMOVED:
            // 注解@4.2
            destNamingService.deregisterInstance(
                getServiceNameFromCache(serviceName, queryParam),
                ipAndPortParam.get(INSTANCE_IP_KEY),
                Integer.parseInt(ipAndPortParam.get(INSTANCE_PORT_KEY)));
            nacosServiceNameMap.remove(serviceName);
            break;
        default:
            break;
    }
}

注解@4.1 同步節(jié)點(diǎn)新增更新到目標(biāo)集群

注解@4.2 源集群節(jié)點(diǎn)被刪除同步注銷(xiāo)目標(biāo)集群

小結(jié): NacosSync從zk集群同步到Nacos只支持dubbo路徑,可參考基于二次改造。第一次先同步所有節(jié)點(diǎn)過(guò)去,再監(jiān)聽(tīng)源集群路徑變化,同步到目標(biāo)集群。


瀏覽 60
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)
評(píng)論
圖片
表情
推薦
點(diǎn)贊
評(píng)論
收藏
分享

手機(jī)掃一掃分享

分享
舉報(bào)

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 99热免费在线| 久久99无码| 黄色三级在线观看| 亚洲日韩欧美视频| a无码视频在线观看| 日韩一区二区免费看| 超碰大香蕉| 美女久久久| 天堂婷婷| 久久青青草在线视频| 看国产AA免费| 山东wBBBB搡wBBBB| www.激情| 91爱在线| 91人人妻人人澡人人爽人人精品 | 四虎激情| 婷婷色网| 国产成人AV在线| 三级片一区二区| 九九韩剧网最新电视剧免费观看| 激情婷婷色五月| 中国老太卖婬HD播放| 欧美性爱视频免费看| 97精品视频在线观看| 人人摸人人看人人草| 国产寡妇亲子伦一区二区三区四区 | 欧美老妇另类BBwBBw| 九九久久国产精品| 成人亚洲| 大香蕉伊人影院| 51国产黑料吃瓜在线入口| 岛国电影av| 安微妇搡BBBB搡BBBB日| 日韩无码人妻久久一区二区三区| 久久性| 日本乱伦中文字幕| 国产亚洲欧美精品综合在线| 日韩无码操逼| 国产免费小视频| 九九人妻| 国产精品一区二| 亚洲福利电影| 国产一视频| 成人AV在线资源| 麻豆激情| www.狠狠操| 亚洲影院第一页在线观看| 男人日女人视频| 日韩潮喷| 一区二区三区网站| 久久久久久久久毛片| 伊人综合久久| 色婷婷亚洲综合| 亚洲国产成人精品综合99| 特黄特色免费视频| 中文字幕你懂的在线三级| 99国产在线视频| 亲子乱AⅤ一区二区三区| 97在线视频免费观看| 综合激情AV| 波多野结衣视频无码| 香蕉国产在线视频| 国精产品秘一区二区| 山东熟妇搡BBBB搡BBBB| 天天撸天天操| 日韩一级免费毛片| 91色在线| 蜜臀久久99精品久久久兰草影视| 7799综合| 国产精品日韩高清北条麻衣| 亚洲视频在线观看网站| 51嘿嘿嘿国产精品伦理| 97福利导航| 天天撸天天干天天日| 青青青在线视频| 波多野结衣亚洲| 91香蕉麻豆| 有码一区二区三区| 99久久婷婷国产综合精品hsex | 成人三级黄色| 操逼视频免费| 六月婷婷五月丁香| 91精品一区| 人人操操| 陈冠希和张柏芝mv| 亚洲成人av在线观看| 天天干天天日天天色| 色婷婷一区二区三区久久| 少妇激情av| 91探花在线播放| 99黄色电影| 人妻人操| 成人性爱视频在线| 88AV在线观看| 激情五月天av| 国产一区二区不卡视频| 七区九区一区在线| 亚洲AV无码精品岛国| 色色视频免费看| 日本一级婬片A片免费看| 国产性爱精品影片免费看| 成人久久久| 无码一道本| 欧美成人性爱网| 日本黄色视频在线播放| 欧美一级免费| 色综合色综合| 制服丝袜乱伦| 性生活毛片| 国产精品国产精品国产专区不片| 久久久久久亚洲AV无码专区 | www.天天干| 亚洲无码偷拍| 亚洲色图欧美| 久草福利| 国产一级黄片| 欧美天堂成人三级| 永井玛丽亚av无码中出流出 | 最新中文字幕无码| A片黄色毛片| 人妻久操| 草久在线观看| A级毛片视频| 蜜桃91精品| 自拍欧美亚洲| 狠狠干狠狠艹| 安徽妇搡BBBB搡BBBB按摩| 日本电影一区二区三区| 日本免费在线视频| 色婷婷一区二区三区久久| 99re免费视频| 中文有码视频| 色片在线| 特黄aaaaaaaa真人毛片| 小處女末发育嫩苞AV| 在线观看国产黄色| 毛片二区| 日韩一级片在线观看| 亚洲中文字幕av| 色我影院| 人妻无码A| 久在草| 99色综合网| 精品中文视频| 欧美一二三| 俄罗斯老熟妇与子伦| 国产乱论视频| 国产亲子乱XXXXimim/| 激情网站在线观看| 午夜精品秘一区二区三区| 久久夜色精品| 91成人精品视频| 黄片免费视频在线观看| 日韩十八禁网站| 西西444WWW无码视频软件| 欧美精品久久久久久久多人混战| 内射久久| 超碰人人摸| 欧美日韩免费视频| 91导航| 一级片欧美| 亚洲无码专区在线| 中日韩欧美一级A片免费| 欧美黄片网站| 狠狠躁夜夜躁人人爽人妻| 黄色免费a级片一级片| 国产久久视频在线观看| 国产成人自拍视频在线| 亚洲精品无码免费| 99re超碰| www.97超碰| 粉嫩av懂色av蜜臀av分享| 婷婷香蕉| 色婷婷无码| 91麻豆大奶巨乳一区白虎| 亚洲天堂2014| 午夜理论在线| 亚洲国产成人无码a在线播放| 大香蕉日| 国产乱子伦精品免费,| 久久久成人免费电影| 小處女末发育嫩苞AV| 操逼操| 综合色国产精品欧美在线| 国产免费操逼| 国产婬片lA片www777| 国产a精品| 91精品人妻少妇无码影院| 囯产精品久久久久久久| 国产女人18毛片精品18水| 大肉大捧一进一出两腿| 一区二区免费| 韩国一区二区三区在线观看| 热九九精品| 国产内射网站| 能看的av网站| 精品人妻一区二区三区-国产精品| 亚洲人妻视频| 不卡一二三区| 伊人666| 日韩无码黄| 国产精品揄拍500视频| 国产免费性爱视频| 成人精品一区二区无码| 欧美日韩性爱网站| 一区二区三区精品视频| 人妻视频在线| 欧美一二三区黄色免费视屏| 五月花在线视频| 久久国产日韩| 操逼爽| 色汉综合| 国产精品久久久久久久久久王安宇 | 男女一区二区| 日韩AV一级| 就要草| 亚洲日韩中文字幕| 成人三级AV在线| 日B视频网站| 无码av免费| 97久久人人| 婷婷五月丁香网| 色情一级A片成人片| 四川妇搡BBBB搡BBBB| 久久精品视频国产| 中文字幕高清无码在线观看| 上床网站| 奇米影视色偷偷| 超碰人人干人人操| 精品成人在线视频| 国产精品无码天天爽视频| 特级444WWW大胆高清| 亚洲天堂人妻少妇| 大荫蒂精品另类| 亚洲片在线观看| 亚洲人妻在线观看| 日韩一区二区三区在线观看| 人妻无码精品久久人妻成人| 一区二区三区www污污污网站| 久久极品| 亚洲无码视频免费看| 欧美亚洲成人精品| 婷婷五月色播| 五月天亚洲色图| 91亚洲视频在线观看| 国产欧美综合视频| 亚洲人人18XXX—20HD| 免费观看AV| 老熟女露脸25分钟91秒| 嘿咻无码| 狼友在线播放| 一区二区在线看| 婷婷伊人| 九热大香蕉| 欧美国产中文| 亚洲电影无码| 日本免费一区二区三区| 91丨豆花丨国产极品| AⅤ在线观看| 国产精品一区二区性色AV | 亚洲精品色色| 人人看人人澡| 成人做爰100部免费网站| 蜜桃视频| 亚洲AV永久无码国产精品久久| 人人看人人搂人人摸| 无码高清一区| 91大长腿美女花外围在线观看| 九色蝌蚪9l视频蝌蚪9l视频成人熟妇 | 婷婷色网| 亚洲免费视频网站| 国产三级小视频| 亚洲精品秘一区二区三线观看| 啪啪视频国产| 91搞鸡| 北条麻妃高清无码| 久久人搡人人玩人妻精AV香蕉| 国产成人片在线观看| 91av免费| 精品国产AV| 国产1区在线观看| 日韩中文字幕在线免费观看| 成人午夜福利网站| 俺也去俺也来| 欧美A在线观看| 黑人丰满大荫蒂| 日韩成人片无码| 日韩一区二区三区精品| 最好看的MV中文字幕国语| 毛片69| 五月天黄色片| 国产黄| aaa免费| xxxxxbbbbb| www.国产精品| 国产欧美二区综合中文字幕精品一 | 婷婷五月天色色| 亚洲中文在线播放| 中文字幕无码综合| 激情深爱五月| 亚洲天堂中文字幕| 翔田千里无码一区| 欧美特黄AAAAAAAAA片| 不迷路福利视频| 国产精品久久久久久久久久久久久久久久 | 人妻斩り43歳| 成人操B视频| 中文字幕成人在线播放| 91在线无码精品秘入口男同| 四川少妇搡bbbbb搡多人| 亚洲视频精选| 色婷婷AV一区二区三区之e本道 | 91av免费在线观看| 国产无码免费视频| 精品成人网| 欧美一级大香蕉| www.国产豆花精品区| jt33免费观看高清| 亚洲一区二区av| 边吃奶边做爱| 午夜激情乱伦| 成人在线视频观看| 一本道精品在线| 欧美成人精品欧美一级私黄| 午夜福利av在线| 中文字幕在线视频第一页| 久久久天堂| 国产无码电影网| 免费超碰在线| 色999在线播放视频| 黄色视频在线免费观看网站| 欧美青青草| 黄色视频免费| 大香蕉伊人网站| 欧美色视频在线观| 91久久人澡人妻人人做人人爽97| 国产日韩精品无码去免费专区国产 | 北条麻妃AV观看| 一道本AV| 国产精品久久久久久久牛牛| 情侣av| 免费黄色成人网站| 婷婷丁香五月花| av无码免费| 热逼视频| 婷婷五月天免费视频| A国产| 婷婷色综合视频二区| 色777网站| 久久爱成人| 国产精品免费久久| 精品综合网| 天天操夜夜操视频免费高清| 久久在线精品| 人人做人人爽| 亚洲一区欧美| 亚洲成人视频| 十八女人高潮A片免费| 成人自拍偷拍| 日本午夜无码| 欧美性爱自拍| 四虎看片| 人人澡人人看| av播播| 国产一卡二卡三卡| 色欲一区二区三区| 成人免费Av| 五月网婷婷| 老熟女露脸25分钟91秒| 天天干天天上| 亚洲操B视频| 一区二区三区无码视频| 91国产做爱| 国产一级a毛一级a毛视频在线网站? | 免费内射网站| 中文字幕无码在线| 99精品视频国产| 欧美一区二区在线观看| 超碰成人欧美| 在线视频91| 99国产免费视频| 少妇搡BBBB搡BBBB毛多多| 国产亚洲无码激情前后夹击| 久热精品视频在线观看| 色欲AV秘无码一区二区三区| 日韩高清不卡| 国产第五页| 麻豆乱码国产一区二区三区| 91原创国产内射| 色人阁人妻中文字幕| 四虎成人无码A片观看| 日韩91| 懂色AV成人| 国产精品无码一区二区在线欢| 在线观看免费黄网站| 在线观看黄A片免费网站| 翔田千里被操120分钟| 免费无码av| 就爱操逼网| 成人网站毛片| 大香蕉伊人网视频| 久久精品国产亚洲| 久久青青操| 激情五月综合| 国产黄片免费视频| 麻豆蜜桃wwww精品无码| 欧美日韩国产中文字幕| 久久久精品无码| 欧美级毛片一夜| 人妻综合第一页| 免费看黄色大片| 2025最新国产成人精品| 中文字幕三级av片| 成人精品三级麻豆| 大香蕉美女视频| 久久99老妇伦国产熟女| 免费视频爱爱| 北条麻妃在线视频聊天| 成人网站视频在线免费观看| 精品人妻一区二区蜜桃视频| 国产精品一区二区AV日韩在线 | 中日韩黄色视频| 色婷婷一区| 国产成人视频免费在线观看| 六月婷婷五月丁香| 日韩AV无码一区二区三区| 国产精品成人国产乱| 青青草国产亚洲精品久久| 人人弄人人| 亚洲操逼网站| 久久久精品久久久| 国产精品久久久久久久久A| 韩日无码视频| 欧美日韩成人网站| 91精品无码| 撸一撸AV| 五月天在线电影| 免费看黃色AAAAAA片| 国产欧美日韩在线播放| 国产福利视频| 有码一区二区三区| aV无码av天天aV天天爽第一| 人人干人人爽| 人人妻人人要| 能看的黄色视频| 无码国产99精品久久久久网站 | 一级特黄大片录像i| 亚洲va国产va天堂va久久| AV大片在线观看| 国产A片录制现场妹子都很多| 蝌蚪窝视频在线| 国产久久视频| 亚洲人妻无码一区| 无码一区二区三区免费看| 日韩欧美国产高清91| 国产三级在线免费观看| 亚洲无码A片在线| 久久久久久亚洲AV无码专区| 91欧美性爱| 欧美精品一区二区少妇免费A片 | 看一级黄色片| 中文字幕+乱码+中文字幕一区| 精品操逼| 欧美性BBB槡BBB槡BBB| 香蕉视频a| 国产激情视频在线观看| 欧美伦妇AAAAAA片| 欧美三区四区| www.三级| 婷婷夜色福利网| 日韩精品无码人妻| 91sese| 亚洲字幕无码| 日韩无码视频一区二区| 亚洲无码一区二区三| 国产无码电影| 中文字幕免费在线播放| 天天日天天| 丁香五月天在线播放| 成人视频免费网站| 日韩欧美中文在线| 久久AV无码| 日韩毛片| 国产成人无码一区二区| 91久久精品日日躁夜夜躁欧美| 日本三级网址| 怡春院av| 三级AV网站| 日本AⅤ中文字幕| 天天操天天看| 成人h视频| 日韩一区二区三区无码电影| 亚洲第一狼人综合网| 东京热视频一区| 国产视频在线免费观看| 亚洲插逼视频| 一区二区三区成人| 亚洲图片欧美另类| 亚洲毛片网站| 欧美视频手机在线| 国产高清无码视频在线观看| 亚洲午夜在线| 年轻女教师高潮2| 欧美不卡在线播放| 欧美精品在线播放| 翔田千里53歳在线播放| 91激情| 无码精品ThePorn| 插插网站| 天天看片天天爽| 黄色片久久| 水蜜桃成人在线| 成熟的国模冰莲[2]| 狠狠干| 黄色美女视频网站| 在线播放内射| av在线无码观看| 成人AV在线电影| 久久伊人影院| 一本道视频在线| 人人干超碰| 国产一精品| 欧美a在线| 无码视频一区二区三区| 天干天干天夜夜| 日本久久不卡| 亚洲日韩中文字幕| 日本人人操| 亚洲久久在线| 69色色| 欧美偷拍一区二区| 中文字幕成人在线| 人人操人人草| 探花在线综合| 翔田千里无码一区| 人妻无码91| 激情五月综合| 七十路の高齡熟妇无码| 亚洲第一色婷婷| AV在线资源观看| av资源播放| 一级国产黄色视频| 中文字幕免费视频在线播放| 黄色大片免费看| 91人人爽| 国产一级生活片| 欧美精品xxx| 99在线精品视频| 天堂成人网| 欧洲成人午夜精品无码区久久| 日本久久成人| 亚洲AAA电影| 国产精品久久久久久久久久| 成人国产综合| 大黄网站在线观看| 欧美精产国品一二三产品价格| 国产成人三级片在线观看| 很很日| 操逼动漫| 老司机av| 九九九九色| 成人精品一区日本无码网站suv| 在线免费黄色网址| 五月天激情午夜福利| 黄色大片在线免费观看| 猛男大粗猛爽H男人味| 日韩特一级| 波多野结衣视频免费在线观看| av日韩在线播放| 国产激倩都市一区二区三区欧美 | 91狠狠| 日韩动态图| 97超碰大香蕉| 久久久久久久久久久高清毛片一级| 日韩人妻无码一区二区| 欧美美穴| 国产一级无码| 一夲道无码专区av无码A片| 日本性爱网址| 一级AA片| 99在线视频免费观看| 99国产精品免费视频观看8| 日韩免费中文字幕A片| 国产精品国产三级国产AⅤ中文| 亚洲成人一| 俺来了俺去了www色官网| 四虎永久www成人影院| 日韩无码性爱| 一本高清无码| 人人爱天天做| 欧美精产国品一二三区别| 日韩欧美高清无码| 国产人妻人伦精品1国产丝袜 | 婷婷亚洲五月色综合| 久久久人妻无码精品蜜桃| 嘿咻无码推油| 自拍超碰| 在线你懂| 成人无码区免费A片| 亚洲AV无码精品成人| 性爱视频小说| 爱就色色网| 国产SM视频| 日本绿色精品视频| 亚洲一二期视频| www.久久久久| 国产精品91视频| 国产麻豆视频| 国产精品18进进出出17c| 高清无码免费在线视频| 777国产盗摄偷窥精品0000| 国产在线视频第一页| 亚洲色图欧美| 国产福利网| 国产无遮挡A片又黄又爽小直播| 激情免费视频| 日韩天堂在线观看| 无码国产精品一区二区视频| 成年网站| 中日韩黄色视频| 刘玥精品A片在线观看| 性爱一级视频| 亚洲综合免费观看高清完整版在线| 2018天天操| 爱干视频| 欧美、日韩、中文、制服、人妻| 日韩福利在线| 黄色成人网站免费在线观看| 二区在线观看| 日韩在线中文字幕视频| 亚洲最大福利视频| 偷拍-91爱爱| 亚洲乱伦小说网| 少妇人妻av| 俄罗斯老熟妇与子伦| 人妻综合第一页| 欧美熟妇擦BBBB擦BBBB| 夜夜骑免费视频| 九九九色视频| 日韩一级电影在线| 亚洲AV自拍| 按摩忍不住BD中文字幕| 五夜福利成人视频| 蜜臀久久久久久999| 2018天天操| 嘿咻嘿咻动态图| 日韩精品一区在线| 色综合天天综合网国产成人网| 青青草操逼视频| 成人在线免费观看国产| 黄片精品| 在线观看的AV| 91大神在线免费观看| 精品人人操| 精品吃奶一区二区三区视频| 97人人操人人干| 日本www视频| 国产精品无码一区二区三| 久久成人18免费网站波多野结衣| 影音先锋成人视频| 菊花插综合网| 免费一级黄色毛片| 18sav| 亚洲精品字幕久久久久| 国产又大又粗又爽| 久久久97精品久久| 国产中文人人国际| 免费在线性爱视频| 亚洲v欧美v| 成人影片亚洲| 久艹在线观看视频| 西西444WWW无码大胆在线观看| 蜜桃视频免费网站| 国产精品无码成人AV电影 | 人人操人人爽人人妻| 成人午夜婬片A片| 日本欧美一区二区三区| 香蕉成人网站| 午夜福利AV在线| 国产黄色小视频在线观看| 欧洲一区在线观看| 五月天综合视频| 在线国产91| 大香蕉婷婷五月天| 日韩AV毛| 超碰77| 国产精品成人AV在线| 亚洲中文字幕日韩在线| 亚洲欧美不卡| www.51av| 黄色a片在线观看| 久久足交| 九九色视频| 女人的天堂网| 久久艹网| 看毛片网站| 双腿张开被9个男人调教| 国产精品一级a毛一级a| 欧美三级片在线| 精品国产精品三级精品AV网址 | 国产精品一| 亚洲午夜久久久久久久久红桃| av中文在线| 中文字幕+乱码+中文乱码91在线观看 | 国产1区2区| 成人午夜小电影| 久色悠悠| 亚洲系列| 中文字幕无码Av在线| 撒尿BBw搡BBwBBw| 天天做天天爱天天高潮| 亚洲字幕AV| 操逼福利| 韩日无码人妻| 一道本无码在线视频| 欧美成人无码片免费看A片秀色| 亚洲视频偷拍| 大香蕉伊人影院| 苍井空一区二区三区四区| 一区二区三区四区视频在线| 久久久久久久香蕉视频| 熟妇女人妻丰满少妇中文字幕 | 在线观看亚| 成人性爱视频在线观看| 小小拗女BBw搡BBBB搡| 亚洲AV无码成人精品区大猫| 亚州精品国产精品乱码不99勇敢| 五月婷婷六月丁香综合| 欧美日韩中文字幕| 99爱免费视频| 2025精品偷拍视频| 男人手机天堂| 九九九精品视频| 99免费视频在线| 亚洲精品无码久久久| 中文字幕在线欧美| 国产小视频在线播放| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 色播国产成人AV| 国产剧情一区二区三区| 亚洲欧美卡通| 五月婷婷网站| 在线观看黄色av| 另类一区| 日本人妻中出| 欧美日韩一区二区三区视频| 欧产日产国产swag| 中文字幕日韩一级| 肏逼网| 国产99精品视频| 欧美午夜福利| 人人射人人爱| 黄色免费网站| 欧美久久免费| www.91超碰在线| 免费看黄色毛片| 国产一级a一片成人AV| 91黑人| 欧美a在线观看| 8050午夜网| 亚洲性爱专区| 成人性生交片无码免费看人| 豆花视频免费| 91无码秘蜜桃一区二区三区-百度 精品人妻一区二区三区在线视频不卡 | 久久99无码| 少妇厨房愉情理伦BD在线观| 亚洲无码资源| 亚洲精品999| 日韩毛片网站| 超碰91在线| 国产成人视频在线播放| 蜜芽视频| 女同久久另类99精品国产91 | 欧美综合区| 无码a级| 91久久精品视频| 日皮视频免费| 99精品视频在线观看| 尤物av在线| 久久伊人电影| 激情五月婷婷丁香| 黄色一级片免费看| 日韩欧美一级| 91亚色视频| 久久97人妻AⅤ无码一区| 操逼网首页123| 久久93| 精品九九| 亚洲在线视频网站| 青青草娱乐视频| 狠狠干天天日| 老司机av| 黄片网站免费观看| 色臀av| 香蕉成人网站| 日批视频在线观看| 99久久精品国产一区色| 木下凛凛子AV888AV在线观看| 97爱爱视频| 中文字字幕在线| 久久福利社| av不卡在线| 国产精品免费久久影院| 亚洲AV永久无码精品国产精| 毛茸茸BBBBBB毛茸茸| 色色爱爱| 亚洲一二三| 翔田千里无码视频| 成人在线网址| 91在线无码精品秘入口三人| 日韩一区二区无码| 日韩黄色电影在线免费观看| 国产美女自拍| 日韩无码字幕| 午夜黄色电影| 久久中文字幕综合| 深爱激情综合网| 囯产精品一区二区三区线一牛影视1 | 一本久道无码| 欧美激情片| 日本草逼| 黄色免费a级片一级片| 国产主播专区| 在线免费观看亚洲| 69视频网| 国产精品视频瘾无码| 国产又黄又| 午夜久久久| 国产AV影视| 亚洲一级二级片| 亚洲无码一区在线| v在线| 亚洲三级视频| 亚洲精品美女视频| 91精品久久久久久久久久| 日韩在线综合| AV三级无码| 成人一区二区在线观看| 嫩BBB揍BBB揍BBB| 成人精品一区二区三区| 国产毛片18水真多18精品| 婷婷午夜精品久久久久久性色| 精品乱子伦一区二区三区免费播放 | 爱射综合| 亚洲成人大香蕉视频| 青青草原国产视频| 2025av天堂网| 狠狠躁日日躁夜夜躁A片无码视频 强伦轩一区二区三区四区播放方式 | 骚熟妇| 亚洲最大黄色| 久久久久少妇| 亚洲第一无码| 小黄片网站| 国产精品可站18| 欧美性爱XXXX黑人XYX性爽 | 亚洲欧美成人电影| 日日夜夜干| 91福利院| 囯产精品一区二区三区线一牛影视1| 久久久1| 国产精品久久久91| www.操操操| 7777av| 看毛片视频| 久久91精品| 一级片无码| 日韩插插| 欧美日韩一区在线观看| 欧美熟妇精品黑人巨大一二三区 | 天天日天天爽| 国产内射久久| 91久久久久国产一区二区| 超碰精品| 欧美日韩亚洲另类| 黄片在线免费播放| 五月婷婷中文字幕| 69AV免费视频| 91欧美精品| 婷婷激情五月| 动漫无码视频| 天天撸天天射| 亚洲乱码国产乱码精品天美传媒| 亚洲高清电影| 久久午夜福利| 成人欧美一区二区三区白人| 亚洲社区在线观看| 99er热精品视频| 亚洲AV片一区二区三区| 中文字幕av第一页| 久草91| 乱伦一区二区三区| 亚洲无码成人片| 黄色影视不卡| 麻豆精品秘国产| 在线无码免费观看| 91精品国产一区二区三区四区大 | 天堂网在线播放| 永久免费黄色| 欧美特黄AAAAAA| 久草热视频|