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

Spring Cloud 全鏈路灰度發(fā)布方案

開發(fā) 前端
灰度發(fā)布(又名金絲雀發(fā)布)是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。在其上可以進行A/B testing,即讓一部分用戶繼續(xù)用產(chǎn)品特性A,一部分用戶開始用產(chǎn)品特性B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來。

實際生產(chǎn)中如有需求變更,并不會直接更新線上服務(wù),最通常的做法便是:切出線上的小部分流量進行體驗測試,經(jīng)過測試后無問題則全面的上線。

這樣做的好處也是非常明顯,一旦出現(xiàn)了BUG,能夠保證大部分的客戶端正常使用。

要實現(xiàn)這種平滑過渡的方式就需要用到本篇文章介紹到的全鏈路灰度發(fā)布。

圖片圖片

什么是灰度發(fā)布?

灰度發(fā)布(又名金絲雀發(fā)布)是指在黑與白之間,能夠平滑過渡的一種發(fā)布方式。在其上可以進行A/B testing,即讓一部分用戶繼續(xù)用產(chǎn)品特性A,一部分用戶開始用產(chǎn)品特性B,如果用戶對B沒有什么反對意見,那么逐步擴大范圍,把所有用戶都遷移到B上面來?;叶劝l(fā)布可以保證整體系統(tǒng)的穩(wěn)定,在初始灰度的時候就可以發(fā)現(xiàn)、調(diào)整問題,以保證其影響度。

為什么是全鏈路灰度發(fā)布?

在陳某前面一篇文章有介紹到網(wǎng)關(guān)的灰度發(fā)布實現(xiàn),僅僅是實現(xiàn)了網(wǎng)關(guān)路由轉(zhuǎn)發(fā)的灰度發(fā)布,如下圖:

圖片圖片

如上圖,網(wǎng)關(guān)灰度發(fā)布實現(xiàn)的是網(wǎng)關(guān)通過灰度標記路由到文章服務(wù)B(灰度服務(wù)),至于從文章服務(wù)B到評論服務(wù)是通過openFeign內(nèi)部調(diào)用的,默認無法實現(xiàn)灰度標記grayTag的透傳,因此文章服務(wù)B最終調(diào)用的是評論服務(wù)A,并不是評論服務(wù)B。

全鏈路灰度發(fā)布需要實現(xiàn)的是:

  • 網(wǎng)關(guān)通過灰度標記將部分流量轉(zhuǎn)發(fā)給文章服務(wù)B
  • 文章服務(wù)B能夠?qū)崿F(xiàn)灰度標記grayTag的透傳,最終調(diào)用評論服務(wù)B

經(jīng)過以上分析,全鏈路灰度發(fā)布需要實現(xiàn)兩個點:

  • 網(wǎng)關(guān)路由轉(zhuǎn)發(fā)實現(xiàn)灰度發(fā)布
  • 服務(wù)內(nèi)部通過openFeign調(diào)用實現(xiàn)灰度發(fā)布(透傳灰度標記grayTag)。

網(wǎng)關(guān)層的灰度路由轉(zhuǎn)發(fā)

本篇文章將使用Ribbon+Spring Cloud Gateway 進行改造負載均衡策略實現(xiàn)灰度發(fā)布。

實現(xiàn)思路如下:

  • 在網(wǎng)關(guān)的全局過濾器中根據(jù)業(yè)務(wù)規(guī)則給流量打上灰度標記
  • 將灰度標記放入請求頭中,傳遞給下游服務(wù)
  • 改造Ribbon負載均衡策略,根據(jù)流量標記從注冊中心獲取灰度服務(wù)
  • 請求路由轉(zhuǎn)發(fā)

第一個問題:根據(jù)什么條件打上灰度標記?

這個需要根據(jù)實際的業(yè)務(wù)需要,比如根據(jù)用戶所在的地區(qū)、使用客戶端類型、隨機截取流量.....

這里我將直接使用一個標記grayTag,只要客戶端請求頭中攜帶了這個參數(shù),并且設(shè)置為true,則走灰度發(fā)布邏輯。

請求頭中攜帶:grayTag=true

第二個問題:為什么要在請求頭中添加灰度標記傳遞給下游服務(wù)?

這一步非常關(guān)鍵,實現(xiàn)灰度標記透傳給下游服務(wù)的關(guān)鍵,將灰度標記放在請求頭中,下游服務(wù)只需要從請求頭中獲取灰度標記便知道是否是灰度發(fā)布,這個和令牌中繼一個原理。

第三個問題:灰度標記如何請求隔離?

Spring MVC中的每個請求都是開啟一個線程進行處理,因此可以將灰度標記放置在ThreadLocal中進行線程隔離。

第四個問題:如何知道注冊中心的服務(wù)哪個是灰度服務(wù)?

Nacos支持在服務(wù)中配置一些元數(shù)據(jù),可以將灰度標記配置在元數(shù)據(jù)中,這樣就能區(qū)分哪些是灰度服務(wù),哪些是正常服務(wù)。

第五個問題:如何針對特定的服務(wù)進行灰度發(fā)布?

比如我的《Spring Cloud Alibaba實戰(zhàn)》中涉及的一條調(diào)用鏈路如下圖:

圖片圖片

需求:現(xiàn)在只對文章服務(wù)、評論服務(wù)進行灰度發(fā)布,其他服務(wù)依然使用線上正在運行的服務(wù)

此時的調(diào)用關(guān)系就變成了下圖:

圖片圖片

我們知道網(wǎng)關(guān)路由中配置的服務(wù)很多,如何只針對文章服務(wù)進行灰度發(fā)布呢?

很簡單:只需要將自定義的Ribbon灰度發(fā)布規(guī)則只對文章服務(wù)生效。

這里涉及到Ribbon中的一個注解:@RibbonClients ,只需要在其中的value屬性指定需要生效的服務(wù)名稱,那么此時網(wǎng)關(guān)中的配置如下:

@RibbonClients(value ={
        //只對文章服務(wù)進行灰度發(fā)布
        @RibbonClient(value = "article-server",configuration = GrayRuleConfig.class)
} )
@SpringBootApplication
public class GatewayApplication {
   
}

@RibbonClient可以指定多個,這個注解有如下兩個屬性:

  • value:指定服務(wù)的名稱,在注冊中心配置的服務(wù)名稱
  • configuration:自定義的負載均衡策略,這里是灰度發(fā)布的策略

@RibbonClients其中有一個屬性defaultConfiguration,一旦使用這個屬性,那么灰度發(fā)布的策略對網(wǎng)關(guān)路由中配置的所有服務(wù)都將生效。

第六個問題:說了這么多,具體如何實現(xiàn)?

網(wǎng)關(guān)中首先需要定義一個全局過濾器,偽代碼如下:

public class GlobalGrayFilter implements GlobalFilter{
    @Override
    public Mono<Void> filter(ServerWebExchange exchange, GatewayFilterChain chain) {
         //① 解析請求頭,查看是否存在灰度發(fā)布的請求頭信息,如果存在則將其放置在ThreadLocal中
        HttpHeaders headers = exchange.getRequest().getHeaders();
        if (headers.containsKey(GrayConstant.GRAY_HEADER)){
            String gray = headers.getFirst(GrayConstant.GRAY_HEADER);
            if (StrUtil.equals(gray,GrayConstant.GRAY_VALUE)){
                //②設(shè)置灰度標記
                GrayRequestContextHolder.setGrayTag(true);
            }
        }
       //③ 將灰度標記放入請求頭中
   ServerHttpRequest tokenRequest = exchange.getRequest().mutate()
    //將灰度標記傳遞過去
    .header(GrayConstant.GRAY_HEADER,GrayRequestContextHolder.getGrayTag().toString())
    .build();
            ServerWebExchange build = exchange.mutate().request(tokenRequest).build();
            return chain.filter(build);
    }
}

①處的代碼:從請求頭中獲取客戶端傳遞過來的灰度標記(這里根據(jù)自己業(yè)務(wù)需要自行更改),判斷是否是灰度發(fā)布

②處的代碼:GrayRequestContextHolder則是自定義的ThreadLocal實現(xiàn)的線程隔離工具,用來存放灰度標記

③處的代碼:將灰度標記放置在請求頭中,傳遞給下游微服務(wù),這里是和令牌一個邏輯。

注意:這個全局過濾器一定要放在OAuth2.0鑒權(quán)過濾器之前,優(yōu)先級要調(diào)高

全局過濾器中已經(jīng)將灰度標記打上了,放置在GrayRequestContextHolder中,下面只需要改造Ribbon的負載均衡的策略去注冊中心選擇灰度服務(wù)。

創(chuàng)建GrayRule,代碼如下:

/**
 * 灰度發(fā)布的規(guī)則
 */
public class GrayRule extends ZoneAvoidanceRule {

    @Override
    public void initWithNiwsConfig(IClientConfig clientConfig) {
    }

    @Override
    public Server choose(Object key) {
        try {
            //從ThreadLocal中獲取灰度標記
            boolean grayTag = GrayRequestContextHolder.getGrayTag().get();
            //獲取所有可用服務(wù)
            List<Server> serverList = this.getLoadBalancer().getReachableServers();
            //灰度發(fā)布的服務(wù)
            List<Server> grayServerList = new ArrayList<>();
            //正常的服務(wù)
            List<Server> normalServerList = new ArrayList<>();
            for(Server server : serverList) {
                NacosServer nacosServer = (NacosServer) server;
                //從nacos中獲取元素劇進行匹配
                if(nacosServer.getMetadata().containsKey(GrayConstant.GRAY_HEADER)
                        && nacosServer.getMetadata().get(GrayConstant.GRAY_HEADER).equals(GrayConstant.GRAY_VALUE)) {
                    grayServerList.add(server);
                } else {
                    normalServerList.add(server);
                }
            }
            //如果被標記為灰度發(fā)布,則調(diào)用灰度發(fā)布的服務(wù)
            if(grayTag) {
                return originChoose(grayServerList,key);
            } else {
                return originChoose(normalServerList,key);
            }
        } finally {
            //清除灰度標記
            GrayRequestContextHolder.remove();
        }
    }

    private Server originChoose(List<Server> noMetaServerList, Object key) {
        Optional<Server> server = getPredicate().chooseRoundRobinAfterFiltering(noMetaServerList, key);
        if (server.isPresent()) {
            return server.get();
        } else {
            return null;
        }
    }
}

邏輯很簡單,如下:

  • 獲取灰度標記
  • 從Nacos注冊中心獲取灰度服務(wù)和正常服務(wù)
  • 根據(jù)灰度標記去判斷,如果灰度發(fā)布則選擇特定的灰度服務(wù)進行轉(zhuǎn)發(fā)

定義一個配置類,注入改造的灰度策略GrayRule,如下:

/**
 * 灰度部署的負載規(guī)則配置類
 * 注意:這個類一定不要被Spring Boot 掃描進入IOC容器中,一旦掃描進入則對全部的服務(wù)都將生效
 */
public class GrayRuleConfig {
    @Bean
    public GrayRule grayRule(){
        return new GrayRule();
    }
}

注意:這個GrayRuleConfig不能被掃描進入IOC容器,一旦掃描進入則全局生效

因為不僅僅網(wǎng)關(guān)需要用到這個灰度發(fā)布策略,凡是涉及到OpenFeign調(diào)用的微服務(wù)如果需要配置灰度發(fā)布都需要用到,因此這里陳某定義了一個公用的gray-starter。

經(jīng)過上述步驟網(wǎng)關(guān)的灰度發(fā)布則已經(jīng)配置完成,此時只需要通過@RibbonClients指定對應(yīng)哪個服務(wù)灰度發(fā)布。

openFeign透傳灰度標記

上面在介紹網(wǎng)關(guān)的灰度發(fā)布配置時,是將灰度標記(grayTag=true)放在了請求頭中,因此在下游服務(wù)中需要做的就只是從請求頭中將灰度標記取出來,然后將其存入GrayRequestContextHolder上下文中。

這樣一來下游服務(wù)中的GrayRule則能從GrayRequestContextHolder獲取到灰度標記,從注冊中心獲取灰度服務(wù)進行調(diào)用了。

問題來了:如何從請求頭中取出灰度標記?

在介紹OAuth2.0相關(guān)知識時,曾經(jīng)出過一篇文章:實戰(zhàn)!openFeign如何實現(xiàn)全鏈路JWT令牌信息不丟失?

其中介紹了令牌中繼的解決方案,使用的是openFeign的請求攔截器去配置請求頭信息。

圖片圖片

如上圖:openFeign在調(diào)用時并不是用的原先的Request,而是內(nèi)部新建了一個Request,其中復(fù)制了請求的URL、請求參數(shù)一些信息,但是請求頭并沒有復(fù)制過去,因此openFeign調(diào)用會丟失請求頭中的信息。

但是可以通過實現(xiàn)RequestInterceptor將原先的請求頭給復(fù)制過去,代碼如下:

@Component
@Slf4j
public class FeignRequestInterceptor implements RequestInterceptor {
    @Override
    public void apply(RequestTemplate template) {
        HttpServletRequest httpServletRequest = RequestContextUtils.getRequest();
        Map<String, String> headers = getHeaders(httpServletRequest);
        for (Map.Entry<String, String> entry : headers.entrySet()) {
            //② 設(shè)置請求頭到新的Request中
            template.header(entry.getKey(), entry.getValue());
        }
    }

    /**
     * 獲取原請求頭
     */
    private Map<String, String> getHeaders(HttpServletRequest request) {
        Map<String, String> map = new LinkedHashMap<>();
        Enumeration<String> enumeration = request.getHeaderNames();
        if (enumeration != null) {
            while (enumeration.hasMoreElements()) {
                String key = enumeration.nextElement();
                String value = request.getHeader(key);
                //將灰度標記的請求頭透傳給下個服務(wù)
                if (StrUtil.equals(GrayConstant.GRAY_HEADER,key)&&Boolean.TRUE.toString().equals(value)){
                    //① 保存灰度發(fā)布的標記
                    GrayRequestContextHolder.setGrayTag(true);
                    map.put(key, value);
                }
            }
        }
        return map;
    }
}

①處的代碼:從請求頭中獲取灰度發(fā)布的標記,設(shè)置到GrayRequestContextHolder上下文中

②處的代碼:將這個請求頭設(shè)置到新的Request中,繼續(xù)向下游服務(wù)傳遞。

其實配置一下RequestInterceptor就已經(jīng)完成了,關(guān)于灰度發(fā)布策略只需要復(fù)用網(wǎng)關(guān)的GrayRule

注意:也需要使用@RibbonClients注解去標注文章服務(wù)調(diào)用的哪些服務(wù)需要灰度發(fā)布。

代碼如下:

@RibbonClients(value = {
        //指定對comments這個服務(wù)開啟灰度部署
        @RibbonClient(value = "comments",configuration = GrayRuleConfig.class)
})
public class ArticleApplication {}

Nacos中服務(wù)如何做灰度標記

其實很簡單,分為兩種:

1、在配置文件中指定,如下:

spring:
  cloud:
    nacos:
      discovery:
        metadata:
          ## 灰度標記
          grayTag: true

2、在Nacos中動態(tài)的指定灰度標記

圖片圖片

配置完成之后,在客戶端請求的時候只需要攜帶grayTag=true這個請求頭即可調(diào)用灰度服務(wù)。

總結(jié)

微服務(wù)中全鏈路灰度發(fā)布方案其實很簡單,重要的就是灰度打標,整體流程如下:

  1. 網(wǎng)關(guān)中通過全局過濾器實現(xiàn)灰度打標,將灰度標記放入請求頭中傳遞給下游服務(wù)
  2. 網(wǎng)關(guān)通過自定義的負載均衡策略,從注冊中心獲取灰度服務(wù),進行轉(zhuǎn)發(fā)
  3. 在openFeign調(diào)用時需要從請求頭中獲取灰度標記,放入上下文中
  4. openFeign調(diào)用同樣是根據(jù)自定義的負載均衡策略從注冊中心獲取灰度服務(wù),進行調(diào)用。
責任編輯:武曉燕 來源: 碼猿技術(shù)專欄
相關(guān)推薦

2025-03-04 08:53:10

2024-01-05 00:29:36

全鏈路灰度發(fā)布云原生

2021-11-18 10:01:00

Istio 全鏈路灰度微服務(wù)框架

2023-11-21 09:35:49

全量部署微服務(wù)

2023-11-13 10:41:44

Spring微服務(wù)

2022-08-31 22:25:53

微服務(wù)架構(gòu)DevOPs

2023-02-20 10:13:00

灰度發(fā)布實現(xiàn)

2023-11-14 09:04:15

用戶節(jié)點不可用

2009-10-29 16:46:12

LinkProof多鏈路負載均衡

2018-07-03 15:56:59

騰訊

2023-01-30 22:34:44

Node.js前端

2022-01-05 08:27:17

C++全鏈路追蹤

2022-12-26 11:57:41

數(shù)據(jù)庫治理

2022-01-19 18:31:54

前端灰度代碼

2023-10-16 23:43:52

云原生可觀測性

2022-12-05 09:08:12

微服務(wù)灰度發(fā)布

2021-07-20 10:22:11

京東云零售云

2021-06-04 08:48:46

Spring ClouMaven Centr版本

2022-01-04 17:08:02

全鏈路觀測平臺

2022-07-22 07:59:17

日志方案
點贊
收藏

51CTO技術(shù)棧公眾號

日韩毛片中文字幕| 亚洲一区在线观看免费观看电影高清| 国产精品高潮粉嫩av| 91麻豆精品久久毛片一级| 91嫩草国产线观看亚洲一区二区| 一区二区三区日韩欧美精品| 久久日韩精品| 国产女人高潮的av毛片| 国产午夜精品一区二区三区欧美 | 日本激情视频网站| 久久综合影音| 欧美精品国产精品日韩精品| 亚洲成人网在线播放| 精品国产乱码一区二区三区| 欧美丝袜一区二区| 久久国产精品免费观看| 九色在线免费| 国产高清在线观看免费不卡| 奇门遁甲1982国语版免费观看高清| 成年人视频软件| 美日韩黄色大片| 56国语精品自产拍在线观看| 欧美日韩亚洲一| 最新av在线播放| 国产女人aaa级久久久级| 国产三区精品| 国产极品久久久| 免费高清不卡av| 国产91精品久久久| 四虎永久在线精品| 亚洲色图88| 中文字幕亚洲综合久久| 无码人妻aⅴ一区二区三区 | 肉丝袜脚交视频一区二区| 欧美国产乱视频| 多男操一女视频| 精品理论电影在线| 国产午夜精品久久久| 亚洲AV成人精品| 欧美h版在线观看| 欧美日韩国产综合视频在线观看 | 亚洲美女精品成人在线视频| 麻豆蜜桃在线| 在线精品一区| 久久伊人精品天天| 91成人精品一区二区| 亚洲精品国产setv| 精品成a人在线观看| 热久久久久久久久| 欧美mv和日韩mv国产网站| 国产久一道中文一区| 97在线公开视频| 日韩高清欧美激情| 日本精品久久电影| 色网站在线播放| 亚洲高清自拍| 97视频在线观看亚洲| 国产亚洲欧美精品久久久久久| 91精品在线观看国产| 久久久国产视频91| www欧美com| 欧美日本免费| 久久久久国产精品www| 精品处破女学生| 最新国产乱人伦偷精品免费网站| 久久久久久噜噜噜久久久精品| 久久久99精品| 亚洲美女网站| 欧美一区第一页| 免费看毛片网站| 日韩国产成人精品| 国产自摸综合网| 99精品国产99久久久久久97| 国产成人亚洲综合a∨猫咪| 99久热re在线精品996热视频| 国产wwwxxx| 99久精品国产| 日韩精品无码一区二区三区| 香蕉视频免费在线播放| 中文字幕日本不卡| 国产传媒久久久| 涩涩在线视频| 欧美日韩精品福利| 精品人妻二区中文字幕| 思热99re视热频这里只精品| 这里只有精品在线观看| 国产成人在线网址| 国产精品啊啊啊| 日韩美女免费视频| 97人妻精品一区二区三区| 国产成人精品亚洲777人妖| 国产精品二区三区| 国产亚洲依依| 一区av在线播放| 欧美日韩福利在线| 精品国产欧美日韩一区二区三区| 欧美一区二区三区在线观看视频 | 国产一级视频在线观看| 三级欧美在线一区| 91精品国产高清久久久久久91裸体 | 午夜影院免费在线| 色狠狠桃花综合| 久久黄色一级视频| 国产精品美女久久久久久不卡| 久久精品国产2020观看福利| 精品国产乱码一区二区| 极品少妇xxxx偷拍精品少妇| 国产伦精品一区二区三| 婷婷成人激情| 岛国av一区二区在线在线观看| 午夜宅男在线视频| 亚洲va久久久噜噜噜久久| 久久精品成人欧美大片古装| 一级片在线观看免费| 国产精品亚洲一区二区三区在线| 玛丽玛丽电影原版免费观看1977| av网站大全在线| 91传媒视频在线播放| 成人啪啪18免费游戏链接| 日本一区二区免费高清| 91高潮在线观看| 亚洲黄色一级大片| 亚洲欧洲成人自拍| 亚洲免费av一区二区三区| 麻豆视频一区| 欧美韩日一区二区| 国产女人18毛片18精品| 欧美高清在线视频| 免费无码国产v片在线观看| 视频精品国内| 久久精品一区中文字幕| 亚洲无码精品国产| 国产欧美一区二区精品性| 97国产精东麻豆人妻电影 | 午夜剧场免费在线观看| 日韩国产精品久久久久久亚洲| 久久精品欧美| 白白色在线观看| 日韩欧美亚洲另类制服综合在线| 天天干天天操天天拍| 日韩vs国产vs欧美| 青青草久久网络| 二区三区不卡| 亚洲美女黄色片| 国产精品va无码一区二区三区| 成人性视频免费网站| 日本一本中文字幕| 成功精品影院| 97久久国产精品| 天堂在线资源8| 午夜久久久影院| 国产精品无码在线| 亚洲综合电影一区二区三区| 激情五月综合色婷婷一区二区| 77thz桃花论族在线观看| 精品国产三级电影在线观看| 精品午夜福利视频| gogogo免费视频观看亚洲一| 国产婷婷一区二区三区| 外国成人在线视频| 日本高清不卡在线| 淫片在线观看| 欧美一区二区在线视频| 久久久www成人免费毛片| 成人免费视频caoporn| 欧美深夜福利视频| 曰本一区二区三区视频| 国产精品第七影院| 老司机av在线免费看| 欧美一级国产精品| 日韩黄色精品视频| 国产亚洲人成网站| 天天干天天玩天天操| 亚洲精品2区| 国产亚洲一区在线播放| 日韩欧美看国产| 最近2019中文字幕第三页视频| 91美女精品网站| 亚洲图片一区二区| 成人免费无遮挡无码黄漫视频| 免费在线观看视频一区| www.欧美黄色| 亚洲制服一区| 91深夜福利视频| av中文字幕在线观看第一页| 亚洲视频日韩精品| 国产三级伦理片| 欧美性生交xxxxx久久久| 后入内射无码人妻一区| 东方aⅴ免费观看久久av| 欧美亚洲日本在线观看| 亚洲成人二区| 欧美极品一区二区| 久久久久久久久成人| 91精品国产电影| 麻豆传媒视频在线观看| 亚洲精品第一页| 亚洲视频在线免费播放| 亚洲成人高清在线| jizzjizzjizz国产| av网站免费线看精品| 亚洲天堂av一区二区| 在线亚洲自拍| 欧美少妇一区二区三区| 综合国产视频| 动漫精品视频| 精品久久在线| 欧美在线激情视频| 色呦呦在线播放| 中文字幕日韩在线观看| 神马久久久久| 精品少妇一区二区三区在线视频| av手机天堂网| 第一福利永久视频精品| 欧美日韩国产精品综合| 国产精品丝袜一区| 成人乱码一区二区三区av| 国产精品原创巨作av| 91日韩视频在线观看| 一本久久知道综合久久| www国产免费| 无码一区二区三区视频| 亚洲国产另类久久久精品极度| 噜噜噜天天躁狠狠躁夜夜精品| 91高跟黑色丝袜呻吟在线观看| 亚洲成人av观看| 国产mv久久久| 午夜欧美激情| 91国内免费在线视频| 黑人玩欧美人三根一起进| 久久精品中文字幕免费mv| 番号集在线观看| 亚洲欧美国产一本综合首页| 人人妻人人澡人人爽久久av| 日韩三级中文字幕| 国产露脸91国语对白| 精品视频在线免费看| 波多野结衣一区二区在线| 欧美日韩亚洲视频| 亚洲精品视频在线观看免费视频| 亚洲综合色婷婷| 久久精品视频免费在线观看| 亚洲视频一二三区| 免费三级在线观看| 亚洲欧美乱综合| 国产波霸爆乳一区二区| 亚洲欧美另类在线| 久久久精品国产sm调教| 一二三区精品福利视频| 久久久久久久久久一区二区三区| 亚洲免费看黄网站| 久草免费在线观看视频| 亚洲一区在线观看网站| 日韩久久精品视频| 欧美性猛交xxxx富婆弯腰| 91玉足脚交嫩脚丫在线播放| 色婷婷国产精品| 免费精品一区二区| 欧美日韩色综合| 国产农村老头老太视频| 精品国产免费人成电影在线观看四季| 亚洲国产视频一区二区三区| 亚洲成人网av| 日本免费一区二区三区最新| 亚洲人成亚洲人成在线观看| jizz日韩| 美女福利精品视频| 国产白丝在线观看| 欧洲亚洲免费在线| 日韩av黄色| 国产精品国产三级国产专区53 | 亚洲国产精品成人一区二区| 亚洲欧美日韩成人在线| 中文国产成人精品久久一| 麻豆视频在线观看免费| 久久久久久亚洲精品中文字幕 | 成人在线精品视频| 北条麻妃一区二区三区在线| 久久久久久久久久久久久9999| 精品久久久久久久久久久下田| 伊人久久大香线蕉精品| 亚洲二区免费| 久久婷五月综合| 国产91丝袜在线18| av中文字幕免费观看| 国产精品久久久久久久久久免费看| 欧美片一区二区| 色爱区综合激月婷婷| hs视频在线观看| 亚洲色图日韩av| 午夜在线激情影院| 国产精品国产福利国产秒拍 | 奇米色一区二区| 精品人妻无码中文字幕18禁| 91看片淫黄大片一级| 国产免费久久久久| 欧美日韩国产精品一区二区三区四区 | 精品伦精品一区二区三区视频| 欧美日韩国产免费观看视频| 99在线免费视频观看| 久久精品国产亚洲a| 三级视频网站在线观看| 中文字幕一区三区| 6080午夜伦理| 精品美女在线播放| 午夜影院福利社| 青青草自拍偷拍| 93久久精品日日躁夜夜躁欧美| 亚洲综合第一区| 精品久久久久久久久久ntr影视| 国产又黄又爽视频| 国产亚洲精品美女| 色偷偷偷在线视频播放| 69174成人网| 国产精品久久占久久| 日本999视频| 91在线视频免费91| 一级aaa毛片| 精品久久久久久久久久久久包黑料 | 希岛爱理中文字幕| 欧美性大战xxxxx久久久| 亚洲 国产 欧美 日韩| 欧美日韩国产成人高清视频| 亚洲国产一区二区久久| 日韩国产一区久久| 免播放器亚洲| 日本xxxx裸体xxxx| 婷婷国产在线综合| 国产综合视频在线| 欧美激情亚洲视频| 亚洲精品国产九九九| 99亚洲国产精品| 激情五月婷婷综合| a级黄色免费视频| 欧美色网站导航| 高清性色生活片在线观看| 国产精品福利在线观看网址| 免费不卡中文字幕在线| 国产1区2区在线| 91久色porny| 国产99免费视频| 在线播放国产一区二区三区| 成人做爰视频www| 欧美va亚洲va日韩∨a综合色| 日本韩国在线不卡| 亚州av一区| 97国产精东麻豆人妻电影| 99久久伊人精品| 黄色片免费观看视频| 亚洲精品国产精品乱码不99按摩| av日韩中文| 精品蜜桃传媒| 日韩中文字幕亚洲一区二区va在线 | av漫画网站在线观看| 精品欧美国产一区二区三区不卡| 亚洲视频成人| 久久午夜福利电影| 欧美日韩国产经典色站一区二区三区| 五月婷婷在线观看| 亚洲aa中文字幕| 亚洲大胆视频| 久久久久久亚洲中文字幕无码| 色婷婷久久99综合精品jk白丝| 成人免费在线观看| 91在线精品播放| 亚洲午夜久久久久久尤物| 我和岳m愉情xxxⅹ视频| 欧美性生活大片视频| av免费在线观看网站| 国产欧美日韩亚洲| 丝袜美腿亚洲一区| 国产色无码精品视频国产| 日韩欧美www| 日本免费久久| 综合操久久久| 99视频国产精品| 久久久久久av无码免费看大片| 精品国产网站地址| 国产成人一二片| 亚洲成人福利在线观看| 亚洲精品中文在线观看| 五月婷婷狠狠干| 国产欧美亚洲精品| 亚洲精品美女91| 一本色道久久88| 精品国产一区二区三区不卡| 日本美女一区| 日韩黄色片在线| 国产日韩欧美不卡| 肥臀熟女一区二区三区| 国产精品激情自拍| 国一区二区在线观看| 人人妻人人澡人人爽| 日韩免费福利电影在线观看| 成人国产二区| 日韩国产小视频| 国产精品久久久久久妇女6080| 懂色av一区二区三区四区| 成人观看高清在线观看免费| 99xxxx成人网|