金丝雀实践
金丝雀部署的基本想法是路由少量生产环境的流量,例如 1%,到两个新部署的应用环境中。 其中一个部署的是新版本应用,称之为金丝雀(canary),另一个部署的是与线上有相同版本和配置的应用, 称之为基线 (baseline)。
一般我们给 baseline 和 canary 都是三个新的 server 实例。
创建新的 baseline 可以最小化初始成本和限制系统的变量(差异)部分,保持 baseline 和 canary 的一致性。
然后对比 baseline 和 canary 之间,关键的性能和功能指标。来决定当前部署的成功性,决定是否要继续接下来的部署。
金丝雀分析,习惯上常为人工的或是专门的、统计的不正确指标。
举例来说:对于 baseline 和 canary 之间的 server 实例,需要人为地在监控/日志系统中,检查一系列相关的指标(CPU usage, memory usage, error rate, CPU usage per request),来为下一步的部署做决定。
Kayenta 实践
人工或是专有的指标分析会带来下面的风险和挑战。
- 速度和扩展性瓶颈:人工分析慢,尤其时在指标繁多,复杂度高和大规模的情况下
- 依赖人治: 人难免犯错
- 做出错误决定的风险:比较的是新部署的应用,短时间内的指标/考量,一些隐晦问题难发现
为解决该问题,Netflix 和 Google 合作开发了一款自动化的金丝雀分析工具 Kayenta
kayenta 的优势:
- 开源:避免了使用商用产品的信任度(提供敏感指标)和厂商锁定的情况
- 支持混合云和多云:方便集成到 Spinnaker (Netfix 的部署工具)
- 可扩展性:支持多样化的指标/数据源/环境改变等
- 易上手:不需要自定义脚本或是人为的获取/合并指标到分析系统中
- 灵活:支持高级案例,例如实时的边界或参数调整
- 洞察力:支持复盘
集成 spinnaker
Metric Comparison
Reports
更多阅读
- https://cloudplatform.googleblog.com/2018/04/introducing-Kayenta-an-open-automated-canary-analysis-tool-from-Google-and-Netflix.html
- https://medium.com/netflix-techblog/automated-canary-analysis-at-netflix-with-kayenta-3260bc7acc69
- https://www.spinnaker.io/guides/user/canary/#have-metrics-to-evaluate