1. 灰度公布的原理

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

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

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


图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/bfenetwork...

2.2 基于流量比例的灰度策略反对

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


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

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

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

能够在上面的链接中查看对子集群设置分流权重的办法
https://github.com/baidu/bfe-...

3. 基于BFE管制面的操作

目前BFE的管制面组件曾经开源公布。在装置BFE的管制面组件后,对于基于流量特色的灰度公布和基于流量比例的灰度公布,都能够间接登录BFE的dashboard来操作,或者通过调用BFE API提供的接口来操作。

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

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

    • https://github.com/bfenetwork...
  • 对于子集群分流比例的配置:

    • https://github.com/bfenetwork...


图5 应用BFE Dashboard配置路由转发规定

BFE API的接口阐明,见上面这个链接:
https://github.com/bfenetwork...

4. 总结

“灰度公布”是互联网业务研发所需的重要能力。BFE对于灰度公布的两种形式(基于流量特色的灰度公布、基于流量比例的灰度公布)都提供了反对。联合曾经开源的BFE管制面组件,能够应用BFE Dashboard或BFE API实现灰度公布的相干配置。

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