Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

支持灰度发布的场景化能力 #631

Closed
andrewshan opened this issue Sep 6, 2022 · 7 comments
Closed

支持灰度发布的场景化能力 #631

andrewshan opened this issue Sep 6, 2022 · 7 comments
Labels
enhancement New feature or request keystone the key feature of the milestone
Milestone

Comments

@andrewshan
Copy link
Member

What is the feature you want to add?

Why do you want to add this feature?

How to implement this feature?

Additional context
Add any other context or screenshots about the feature request here.

@andrewshan andrewshan added the enhancement New feature or request label Sep 6, 2022
@chuntaojun chuntaojun added this to the v1.12.0 milestone Sep 6, 2022
@chuntaojun chuntaojun added the keystone the key feature of the milestone label Sep 6, 2022
@andrewshan
Copy link
Member Author

andrewshan commented Sep 6, 2022

蓝绿发布

蓝绿部署需要按照服务当前版本所占用的资源状况为服务新版本申请同样的资源规格,部署完毕之后将流量整体切换到服务新版本。

  • 实例打标。需要新部署一套全量的灰度环境,所有的并且对新的灰度环境打上新版本的标识,并且通过环境变量设置透传标签为version。
  • 部署实例:通过SCT自动注册的方式,或者通过k8s controller同步的方式,将实例标签注册到注册中心上。
  • 设置流量规则:部署完成后,使用网关的路由能力,将全部流量,切换到新版本上。(需要给出各个网关的使用方式:ENVOY/SCG/NGINX等)
  • 微服务路由(自动):微服务框架自动根据透传的版本标签进行路由,只会路由到相同版本的实例。
  • 灰度完成:灰度完成后,对老版本进行缩容,然后去掉流量规则。

image

@andrewshan
Copy link
Member Author

andrewshan commented Sep 6, 2022

金丝雀发布

金丝雀发布允许引流一小部分流量到微服务新版本,待验证通过后,逐步调大流量,充分验证微服务新版本的稳定性。

应用场景一:通过域名隔离进行金丝雀灰度

image

金丝雀环境和稳定环境有独立的域名进行隔离,网关层会将金丝雀的流量转发到金丝雀的域名,其他流量转发到稳定版本的域名。适用于按流量百分比进行灰度的场景,不需要用两个域名。

  • 实例打标:需要针对需要进行金丝雀发布的服务,打上金丝雀标识(canary=true),并且通过环境变量设置透传标签为version。
  • 关联域名:并且在流量入口的服务,设置域名canary.service.com关联金丝雀Deployment的实例
  • 部署实例:通过SCT自动注册的方式,或者通过k8s controller同步的方式,将实例标签注册到注册中心上。
  • 设置流量规则:部署完成后,使用网关的路由能力,将金丝雀的流量,路由到canary.service.com上。(需要给出各个网关的使用方式:ENVOY/SCG/NGINX等)
  • 微服务路由(自动):微服务框架自动根据透传的版本标签进行路由,只会路由到相同版本的实例。
  • 灰度完成:灰度完成后,将稳定环境升级到最新版本,去掉流量规则,对金丝雀环境进行缩容。

应用场景二:通过动态染色实现金丝雀发布

image

金丝雀环境和稳定环境共用同一个域名,网关层对金丝雀流量进行染色,适用于按流量百分比进行灰度的场景,不需要用两个域名。

  • 实例打标:需要针对需要进行金丝雀发布的服务,打上金丝雀标识(canary=true)。
  • 部署实例:通过SCT自动注册的方式,或者通过k8s controller同步的方式,将实例标签注册到注册中心上。
  • 设置流量规则:部署完成后,使用网关的路由能力,将金丝雀的流量,路由到金丝雀分组上。(需要给出各个网关的使用方式:ENVOY/SCG/NGINX等)
  • 设置染色规则:在网关上,通过add-header的方式,设置请求染色。
  • 微服务路由(自动):微服务框架自动根据透传的版本标签进行路由,只会路由到相同版本的实例。
  • 灰度完成:灰度完成后,将稳定环境升级到最新版本,去掉流量规则,对金丝雀环境进行缩容。

应用场景三:通过自定义路由实现金丝雀发布

image

金丝雀环境和稳定环境共用同一个域名,网关层不需要染色,只需要进行条件路由,适用于按请求参数进行灰度的场景。

  • 实例打标:需要针对需要进行金丝雀发布的服务,打上金丝雀标识(canary=true)。
  • 部署实例:通过SCT自动注册的方式,或者通过k8s controller同步的方式,将实例标签注册到注册中心上。
  • 设置流量规则:部署完成后,使用网关的条件路由能力,x-uid=200的流量,路由到金丝雀分组上。(需要给出各个网关的使用方式:ENVOY/SCG/NGINX等)
  • 设置自定义路由规则:在北极星设置自定义路由规则,将x-uid=200的流量,路由到全链路的微服务金丝雀的分组上
  • 微服务路由(自动):微服务框架自动根据透传的请求标签进行路由,优先路由到金丝雀实例。
  • 灰度完成:灰度完成后,将稳定环境升级到最新版本,去掉流量规则,对金丝雀环境进行缩容。

@JasonChen86899
Copy link
Contributor

想问下目前协议透传的功能已经有了么

@andrewshan
Copy link
Member Author

想问下目前协议透传的功能已经有了么

SCT社区已经排入了这个需求,预计月底会支持:Tencent/spring-cloud-tencent#563

@baerwang
Copy link

baerwang commented Oct 7, 2022

这个需求做了吗,如果没有做是否可以分配给我?

@chuntaojun
Copy link
Member

这个需求做了吗,如果没有做是否可以分配给我?

北极星自身的需求已经完成了~

@chuntaojun
Copy link
Member

这个需求做了吗,如果没有做是否可以分配给我?

剩下的是关于SDK的适配新的路由规则以及支持协议透传,比如 grpc-go-polaris、cloudwego-kitex-polaris这些

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request keystone the key feature of the milestone
Projects
None yet
Development

No branches or pull requests

4 participants