Spring Cloud开源框架-SpringCloud系列

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

2019-10-18  本文已影响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-灰度发布方案简介

上一篇下一篇

猜你喜欢

热点阅读