美文网首页Spring Cloud开源框架-SpringCloud系列
springcloud分布式服务灰度grey解决方案实战(案例)

springcloud分布式服务灰度grey解决方案实战(案例)

作者: 源码互助空间站 | 来源:发表于2019-10-18 11:28 被阅读0次

    一、写在前面

    这几天一直在解决一个灰度的问题,心情烦躁。先说下背景,服务是springcloud架构,由于需要灰度测试,所以重写了ribbonclient的规则。

    问题:3个服务,使用fegin远程调用。A服务先调用B服务,返回结果后接着A调用C服务。服务启动后首次调用成功,再次A服务调用B服务返回的竟然是C服务的serverList,C服务当然没有B服务的方法,所有报404。

    多级服务连级调用问题

           当我们只是对一个微服务进行调用的时候,Ribbon提供的支持好像没什么问题。不过在我们进行多个微服务调用时会产生异常,这也是大多数人忽略的。

          A掉B的时候,会创建一个名称为B的ribbonclient,B调C创建了名称为C的ribbonclient,特别注意的是当前把名称为B的ribbonclient覆盖掉了。加了@ribbonclient,就使用了通用的ribbonclient,避免了覆盖。

    二、灰度解决方案实战

    1、步骤

    ①给整个微服务打上灰度标记

    ②自定义Filter,拦截请求是否进入灰度服务

    ③重写ribbon负载均衡Rule规则,把灰度服务器和正常服务器区分开,然后再负载均衡

    ④配置自定义负载均衡规则

    ⑤选择服务器后正常请求

    2、给整个微服务打上灰度标记

    这里使用的是springcloud eureka自定义元数据。自定义key=grayVersion,自定义value=V1.0.0

    eureka.instance.metadata-map.grayVersion =V1.0.0

    3、自定义Filter,拦截请求是否进入灰度服务

    灰度服务拦截器

    4、重写ribbon负载均衡Rule规则

    自定义ribbonRule

    5、配置自定义负载均衡规则

    创建规则Config

    启动类加载这个新负载均衡规则

    配置负载均衡config

    6、正常访问(有灰度标记)

    带有灰度标记的接口访问


    三、总结

    本次出现的问题总结就是,fegin ribbon多服务调用时,一没有加@RibbonClients,二自定义负载均衡规则配置不正确。多学习多总结

    参考:

    Spring Cloud Feign使用详解

    SpringCloud-灰度发布方案简介

    相关文章

      网友评论

        本文标题:springcloud分布式服务灰度grey解决方案实战(案例)

        本文链接:https://www.haomeiwen.com/subject/xdximctx.html