(Spring Cloud微服务实战-发布篇)spring cloud zuul灰度发布

一、灰度发布解决线上什么问题?nginx

公司项目,每次发布上线都是在晚上时间段进行发布,这严重打乱了我的的做息,尤为是下单业务,每次上线,都是惊心胆颤的,为了消除这【心理】问题,在新项目时,须要把灰度发布引入进来,从而达到,妈妈不再用担忧个人做息了,想何时上线,看心情。git

灰度发布,我的理解,主要是采用一个切换流量的思路来上线或者用于其余场景(自行百度)github

 

二、灰度发布归类web

网上大部分考虑的都不够全面,有的说nginx+lua,有的说k8s,有的spring cloud zuul....太乱了redis

我的大总结:整个架构面临以下几种状况的灰度发布spring

    a、nginx+upstrem的tomcat的应用,须要实现,禁用流量到tomcat:nginx面临控制灰度发布tomcat

        实现思路:nginx+lua,openresty架构

    b、spring cloud zuul+通常的web服务/eureka上的服务(未注册到eureka和注册到eureka),须要实现,禁用流量到通常web服务,zuul面临控制灰度发布并发

    c、由于服务与服务之间也存在调用(不必定通过zuul网关), 注册到eureka的服务,须要实现,各个服务禁用流量,各个服务面临灰度发布测试

        实现思路:eureka的端点, 来禁用注册中心上的实例,而后等待sleep 1-2分钟,而后平滑的shutdown

 

三、但本文的重点描述,如上第二种(b)状况,详细实现

注意:网上有说采用ribbon-discovery-filter-spring-cloud-starter(https://github.com/jmnarloch/ribbon-discovery-filter-spring-cloud-starter

请慎重,由于刚开始我也是采用ribbon-discovery-filter-spring-cloud-starter的方式来实现,当采用jemter进行并发测试时,坑坑无数 。

那么怎么来实现:

实现思路:实现自定义rule,经过重写rule来实现灰度发布,可是.......若是我部署多台zuul,也会有问题,从而改进思路: 实现自定义rule,而后将须要禁用流量的服务信息,放于redis里面,从而实现多个zuul实例的灰度发布。每次须要上线一个服务时,经过sh脚本在将此实例信息放于redis,此时该服务实例就不会有流量进入,再进行发布

实现代码:

    a)、 实现自定义predicate,继承AbstractServerPredicate

    b)、 实现自定义rule,继承PredicateBasedRule

    c)、 在Configuration类里面,注入自定义rule

相关文章
相关标签/搜索