查看原文
其他

如何基于BFE做灰度发布

BFE开源项目 BFE开源项目 2024-04-14

1. 灰度发布的原理


互联网业务的研发提倡“小步快跑,快速迭代”。这要求在保证7*24小时不中断服务的前提下,可以高频度的升级服务,这就对“灰度发布”提出了需求。

       灰度发布(又名金丝雀发布,Canary Release)是指在黑与白之间,能够平滑过渡的一种发布方式(来自百度百科)。

       从流量转发的角度,灰度发布的原理如下图所示。用户流量由负载均衡器转发给服务。服务的部署分为正式服务和测试服务。由负载均衡器执行灰度发布策略,将符合条件的灰度流量转发给测试服务。


图1 灰度发布的原理


       灰度策略可能包括两类:

(1)   按照一定的流量特征来选择灰度流量。可能作为流量选择的特征包括:用户来源地,特殊的请求标签等。

(2)   按照一定的流量比例来选择灰度流量。例如,可以控制选择1%的流量作为灰度流量。


2. BFE对于灰度发布的支持


BFE对基于流量特征基于流量比例这两种灰度策略都提供了支持。


2.1 基于流量特征的灰度策略支持


    利用BFE的路由转发表,可以实现基于特征的灰度策略。

    在BFE中,对于每个租户都可以独立设置基础转发表高级转发表默认转发规则。图2和图3展示了利用高级转发表来实现基于特征的灰度策略的例子。

       在本例中,包括A、B、C、D、E共5种服务。其中A、B、C、D这四种服务都使用基础转发表中的配置来完成匹配,E服务作为默认的服务(如图2所示)。


图2 在灰度发布前的转发配置


    对于服务D,原本只在基础转发表中进行了配置。后来因为要进行灰度测试,于是在基础转发表中将www.c.c.com对应的目标集群设置为保留字“ADVANCED_MODE”(意为透传至高级转发表继续处理);同时在高级转发表中增加2条规则(基于BFE的条件表达式来描述匹配条件),将在cookie中key为deviceid、值的前缀为“x”的请求转发到D1这个灰度试验集群,将其它Host为www.c.com的流量仍然转发至D集群(如图3所示)。


图3 实现基于特征的灰度发布


    除了利用cookie外,也经常使用Header和query中的信息来区分测试流量。对于这些字段,在BFE中也有专用的条件原语用于描述相关的特征。可以在下面的链接中查看BFE支持的条件原语。

https://github.com/bfenetworks/bfe/blob/develop/docs/zh_cn/condition/condition_primitive_index.md


2.2 基于流量比例的灰度策略支持


    利用BFE提供的内网流量调度机制,可以实现基于流量比例的灰度策略。


图4 基于流量比例的灰度策略


    为了配合基于比例的灰度发布,可以常态准备2个子集群D1和D2。在BFE中,将2个子集群的分流比例设置为1%和99%。

    在做新功能上线的时候,新版本的程序首先在D1子集群上线。使用1%的流量,经过一段时间的验证无误之后,再将新版本的程序上线至D2子集群。

    可以在下面的链接中查看对子集群设置分流权重的方法

https://github.com/baidu/bfe-book/blob/version1/operation/configuration/proxy.md


3. 基于BFE控制面的操作


    目前BFE的控制面组件已经开源发布。在安装BFE的控制面组件后,对于基于流量特征的灰度发布和基于流量比例的灰度发布,都可以直接登录BFE的dashboard来操作,或者通过调用BFE API提供的接口来操作。


在BFE的Dashboard上操作的说明,见下面的链接:

  • 对于路由转发规则的配置:

https://github.com/bfenetworks/dashboard/blob/develop/docs/zh-cn/user-guide/tenant-view/route.md

  • 对于子集群分流比例的配置:

 https://github.com/bfenetworks/dashboard/blob/develop/docs/zh-cn/user-guide/tenant-view/backend.md


图5 使用BFEDashboard配置路由转发规则

4. 总结


    “灰度发布”是互联网业务研发所需的重要能力。BFE对于灰度发布的两种方式(基于流量特征的灰度发布、基于流量比例的灰度发布)都提供了支持。结合已经开源的BFE控制面组件,可以使用BFE Dashboard或BFE API完成灰度发布的相关配置。


注:本文章中包含多个指向github的链接。可以通过点击左下方的“阅读原文”来访问这些链接。



欢迎关注“BFE开源项目”微信公众号,获得本项目的更多更新。谢谢!




继续滑动看下一个
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存