跳转至

金丝雀发布

金丝雀发布(Canary Release)这项技术实践的名称起源于矿工,他们将笼子里的金丝雀带到煤矿下。如果有毒气体泄漏到矿井中,它会在杀死矿工之前先杀死金丝雀。在影响整个软件系统或用户群之前,金丝雀版本为潜在问题提供了类似的预警形式。

金丝雀发布就是把应用程序的某个新版本部署到生产环境的部分服务器中,这部分生产环境被称作金丝雀环境,通过使新特性只对少数用户可用,可降低向每个人发布新功能的风险。是在现有正式环境外创建了一个全新的独立生产环境,将少部分用户路由到新的金丝雀环境以验证新特性。一旦证明金丝雀版本稳定并交付预期结果,剩余的用户就被路由到新环境。如果金丝雀发布存在问题,那么金丝雀环境的流量将被路由回正式环境。

金丝雀发布过程

  1. 在生产环境上新建或指定一部分节点作为金丝雀环境。
  2. 将新版本的应用程序部署到金丝雀环境。
  3. 通过临时节点进行冒烟测试或其它专项测试。
  4. 通过测试后会修改路由或者负载均衡让一小部分用户访问新的版本的应用程序。
  5. 通过缓存会话,用户标记等方式保持访问新版本的用户不会访问旧版本的应用程序。
  6. 当小部分用户测试通过,则逐渐增大新版本的部署规模并减少旧版本应用的部署规模,同时扩大用户的访问新版本应用程序规模。
  7. 当旧版本应用程序完全没有访问流量后,金丝雀发布完成。
  8. 如果金丝雀环境在发布后检测出异常,则需要回滚应用。并对先前访问新版本应用程序的用户进行进一步的运营和数据进行清理。

应用技巧和注意事项

  1. 金丝雀发布可以作为A/B 测试的技术实现手段之一。另一种实现方式是特性开关
  2. 如果金丝雀发布过程太长,则会增加在生产环境运营两个版本的成本和风险。

工具

参考和引用