通过了解阿里云函数计算新功能版本管理在事件驱动模式中的使用,我们看到了别名是如何简化新版本上线的过程的。然而现实是残酷的,直接更改别名指向的版本来升级服务时,往往会出现新版本引入带来的不稳定,有没有更好的方法呢?别名的灰度发布功能该登场了。函数计算提供的别名,可以指向一个主版本和一个灰度版本,并指定灰度版本的权重。这样就可以灵活调整两个版本间的流量分布,很大限度地减少上线新版本引起的不稳定。
如上图所示,假设我们已经有别名Prod指向稳定的版本1,此时版本2也已经发布好准备上线。我们可以采用灰度发布的方式,更改Prod别名将灰度版本设定为2,灰度百分比设置为5%。更新后Prod指向的主版本仍然为版本1,函数计算会转移5%的流量到版本2,剩余95%的流量仍然由版本1来服务。当确定版本2稳定运行后,再更新别名Prod的主版本为版本2,从而完全切换到新版本。
当别名的灰度发布功能被使用时,您可以通过以下三种方式来确定被调用的服务版本:
- 如果您为自己的服务配置了日志服务,每次函数调用,都可以查看到相关日志。日志中的“isDarkLaunch”字段表示此次调用命中的是灰度发布的版本,“externalServiceVersion”字段表示此次调用使用的具体服务版本。
每次函数调用,Context对象的Service信息中会包括版本信息,其中 “qualifier”字段表示调用函数时传入的版本信息,“versionId”表示根据qualifier解析出的具体版本号。
- 每次同步函数调用,响应中都包含 “x-fc-invocation-service-version” header以指示调用的服务版本。
通过别名的灰度发布功能,流量可以在不同的版本间轻松切换,让新版本的上线更安全!总结一下:
- 使用别名Prod指向稳定的版本1,线上的调用都通过别名来进行。
- 当新版本2准备上线时,将Prod的灰度版本设为版本2,权重从5%开始。
- 观察版本2在线上表现稳定后,更新别名Prod指向版本2。
版本管理功能文档: