Spring Cloud灰度发布之Nepxion Discovery

架构升级,有单体架构升级为微服务架构。

服务的灰度发布,根据访问量逐渐切换用新版本替换老版本,并且能够做到代码零入侵的。

Nepxion Discovery是一款对Spring Cloud Discovery服务注册发现、Ribbon负载均衡、Feign和RestTemplate调用的增强中间件,其功能包括灰度发布(包括切换发布和平滑发布)、服务隔离、服务路由、服务权重、黑/白名单的IP地址过滤、限制注册、限制发现等。

同一个功能需要维护多个版本的接口。

在springcloud的微服务体系中,大多是使用eureka做为注册中心,ribbon做为负载均衡,hystrix做为断路器。

该项目是在spring-cloud-ribbon的基础上进行扩展,以实现接口的多个版本的调用及负载均衡,支持feign方式和断路器(spring-cloud-hystrix)。

spring cloud ribbon默认是轮询的方式将请求分别转到两个实例上。

可以扩展ribbon的负载均衡策略从而实现不同版本的请求转发到不同的服务实例上。

 

RequestVersionExtractor:这个接口负责获取请求需要访问的目标接口的版本。

上面三个接口只是简单的实现了获取请求的目标版本、触发ribbon请求的触发器,以及将信息向下一步传递。

 

灰度发布是在多版本控制的基础上进一步扩展实现出来的项目,抽象出灰度服务、灰度服务实例、灰度策略、灰度决策等。 灰度策略可以从request ip, request patameter, request header等方面进行去创建,也可以根据bamboo的LoadBalanceRequestTrigger结合graybuanny的接口去扩展灰度策略和灰度决策。

灰度策略。灰度开关。删除灰度标记。

服务实例和调用请求;服务实例的灰度管理是基础,调用请求时如何决策路由,都是根据服务实例的灰度策略去判断的。

 

实例注册:服务实例添加到灰度管理中。

实例下线:服务实例下线,从灰度管理中删除。

灰度开关:调整服务实例的灰度状态,有启用、禁用两个状态,禁用的实例不纳入灰度列表中。

灰度策略:请求是否可以被转发到该服务实例的条件,只有通过,请求才有可能会被转发到该实例上。

 

灰度决策:根据请求的信息去匹配灰度服务实例的灰度策略,如果匹配上,会将服务实例加入到通过列表中。如果都没有匹配上,就按bamboo的路由规则去筛选非灰度的服务实例进行转发。

 

Spring Cloud Gray 是一套开源的微服务灰度路由解决方案。

将发布产生的风险保持在可控范围内。

在Spring Cloud Gray 中定义了几个角色灰度客户端(gray-client)、灰度管控端(gray-server)、注册中心。