关于SpringCloud灰度发布的实现
作者:haozhugogo
这篇文章主要介绍了关于SpringCloud灰度发布的实现,灰度发布又称金丝雀发布,是在系统升级的时候能够平滑过渡的一种发布方式,灰度发布可以保证整体系统的稳定,在初始灰度的时候就可以发现、调整问题,以保证其影响度,需要的朋友可以参考下
一、springcloud灰度发布思路
- 注册中心:不解释了
- 根据用户路由:user id关联路由标签
- 区分服务实例:给服务实例打标签 eureka.instance.metadata-map.key=value
- 负载均衡ribbon:修改路由规则,根据用户标签路由到对应服务
二、ribbon大致原理
- RibbonAutoConfiguration 是起始点,会在spring启动时被扫起来,实例化SpringClientFactory。
- SpringClientFactory 是获取Ribbon相关实例或配置的工厂类,可以获取指定服务的ILoadBalancer和IConfig等,继承自NamedContextFactory。
- NamedContextFactory 维护了每个服务相关的上下文AnnotationConfigApplicationContext;上下文在第一次调用时被创建,并注册、装配相关类、接口;外界获取相关类、接口就是从上下文中拿的。
- RibbonClientConfiguration 用来实例化自定义接口。
- XXXLoadBalancer 负责调用IRule选择Server,并启动定时任务更新ServerList列表。
- ZoneAvoidanceRule是默认的IRule,先利用XXXPredicate进行过滤,然后在从过滤的结果中选择。
三、最终代码实现
1.在目标服务上配置灰度标签。
2.将想要的灰度标签保存到threadlocal里,注意有线程池的情况。
3.自定义路由规则IRule以及预判规则Predicate,将不符合标签的服务过滤掉掉,然后从剩下的服务中选一个。
4.自定义RibbonClientConfiguration,指定用步骤3的自定义IRule。
到此这篇关于关于SpringCloud灰度发布的实现的文章就介绍到这了,更多相关SpringCloud灰度发布内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!