
日升时奋斗,日落时自省
目录
1、实现框架
Spring Cloud全链路灰色发布实现构架:

灰度发布的具体实现 :
前端程序在灰度测试用户Header头中打上标签,例如Header中添加一个参数"gray-tay:true",其表示要进行会灰度测试的(访问灰度服务),而其他则为正式服务
在负载均衡器Spring Cloud LoadBalancer中,拿到Header中的"gray-tag"进行判断,如果此标签不为空,并等于"true"的话,表示要访问灰度发布的服务,否则只访问正式的服务
在网关Spring Cloud Gateway中,Header标签"gray-tag:true"继续往下一服务中传传递(因为通过网关的时候,是从新发送请求,Header中是没有灰度标签的)
在后续的调用服务中,需要实现以下两个关键功能:
- 在负载均衡器Spring Cloud LoadBalancer中,判断灰度发布标签,将请求分发到对应服务
- 将灰度发布标签(如果存在),继续传递给下一个调用的服务
经过第四步的反复传递之后,整个Spring Cloud全链路的灰度发布就完成了
2、负载均衡模块
实现ReactorServiceInstanceLoadBalancer接口
public class GrayLoadBalancer implements ReactorServiceInstanceLoadBalancer{
private static final Log log = LogFactory.getLog(GrayLoadBalancer.class);
private final String serviceId;
private AtomicInteger position; // 位置,下标
private ObjectProvider<ServiceInstanceListSupplier> serviceInstanceListSupplierProvider;
public GrayLoadBalancer(ObjectProvider<ServiceInstanceListSupplier> serviceInstanceListSupplierProvider, String serviceId) {
this.serviceId = serviceId;
this.serviceInstanceListSupplierProvider = serviceInstanceListSupplierProvider;
this.position = new AtomicInteger(new Random().nextInt(1000)); //随机进行设置一个值
}
public Mono<Response<ServiceInstance>> choose(Request request) {
// 提供备选的服务实例列表
ServiceInstanceListSupplier supplier = (ServiceInstanceListSupplier) this.serviceInstanceListSupplierProvider.getIfAvailable(NoopServiceInstanceListSupplier::new);
// 选择服务实例
return supplier.get(request).next().map((serviceInstances) -> {
return this.processInstanceResponse(supplier, serviceInstances, request);
});
}
pr
SpringCloud全链路灰度发布实现:负载均衡与灰度标签传递

本文详细介绍了如何在SpringCloud架构中实现全链路的灰度发布,涉及负载均衡器的选择、灰度标签的判断与传递,以及服务模块的配置。重点讲解了如何使用SpringCloudLoadBalancer和ReactorServiceInstanceLoadBalancer进行灰度服务实例的选择和灰度标签的处理。
最低0.47元/天 解锁文章
2750

被折叠的 条评论
为什么被折叠?



