Dogfooding-爱奇艺移动端后台灰度环境优化实践

449 阅读7分钟

灰度上线是服务质量保证的重要手段。通常的灰度上线方式是划取一部分机器/实例作为灰度环境机器,代码上线时先上线这部分机器,观察一段时间,没有问题后再全量上线。但是如果要更好的发挥灰度上线的效果,需要解决如下的问题:

(1)如何方便地接入灰度环境进行验证?

(2)灰度环境的问题如何快速得到反馈?

(3)灰度环境的指标,包括前端指标和后端指标,如何覆盖得更全面?

(4)不同服务之间的灰度环境如何打通?

本文将介绍爱奇艺移动端后台如何通过灰度环境优化解决以上的问题。

一、Dogfooding介绍

Dogfooding一词**最早出自于1970年代的一则Alpo牌狗粮的电视广告中,**洛恩·格林表示他用Alpo牌狗粮喂食自家的狗。

而在IT业界这句俚语可能最早是于1988年开始使用的。当时微软公司的高级主管保罗·马瑞兹曾写过一封题为“Eating our own Dogfood”(吃我们自家的狗粮)的邮件,在邮件中他向微软局域网管理工具项目的测试主管布莱恩·瓦伦蒂尼提出**“提高内部使用自家产品比重”的挑战。**而从此以后,这一俚语在公司内就传播开来了。

**Dogfooding - 吃自己的狗粮,顾名思义,指的是通过内部员工使用自身的产品,及时的发现产品的问题。**该思想与后端灰度环境相结合,可以理解为:后端代码上线前,先发布到内部环境,由内部员工使用并收集反馈,确认没有问题后再全量发布到线上。

因为内部员工往往是产品的重度用户,一旦代码灰度上线后有问题,可以第一时间收到内部的保障,从而能够第一时间进行修复。

二、灰度环境优化目标

作为爱奇艺移动端业务,**需求迭代速度非常快,需求从开发到上线周期越来越短。**为了避免把潜在的问题带到线上,就要求能在上线前问题得到最快的发现和反馈。结合Dogfooding的思想,我们期望灰度环境能够达到如下效果:

(1)内网用户直连灰度环境:方便验证,快速发现问题;

(2)支持设备白名单,可将设备加入灰度流量;

**(3)灰度指标监控全面覆盖:**前端崩溃率,后端成功率,响应时间,错误日志;

(4)打通内网服务:灰度标识透传;

(5)支持配置类服务灰度发布。

三、实现方案

**首先,我们对灰度流量进行了云控,这样可以进行后续的灵活调整。**客户端在启动时调用后台服务判断是否命中灰度,如果命中,在后续的请求的header中,会携带灰度标识。服务端根据灰度标识进行流量区分和指标收集。

(一)灰度流量云控

灰度流量指的是哪些请求被转发至灰度环境。初期,我们的灰度流量包含如下两部分:

(1)内网设备

(2)白名单设备

后来,为了使得灰度流量的指标更准确(流量太小导致指标波动过大),我们又加入了少量正式用户的流量。

同时,为了后续对灰度流量进行更加灵活的调整,**我们将灰度流量的变更做成了可配置,可云控修改的方式。**支持勾选内网用户,增加白名单设备,加入指定比例正式用户流量。

(二) 灰度标记传递

灰度人群配置好之后,APP启动时调用后端接口判断是否命中灰度人群,如果命中,在后续的接口请求的header中,会携带灰度标识。

后台服务网关层根据请求header中的灰度标识区分流量,灰度人群流量转发至灰度环境机器,否则转发正式环境。

灰度标识会一直往下传递,下游服务的网关层可以采用相同的方式来区分灰度流量和正式流量。

(三)灰度流量指标

为了更直观的观察灰度上线后的影响,我们需要全面的灰度流量指标监控和报警。包括前端指标,自动化回归测试报告数据等。

**前端指标包括前端的崩溃率和错误率指标。**前端在投递崩溃数据和错误数据时,会携带灰度标记。这样就可区分灰度流量和正式流量进行指标统计。

**后台指标包括灰度机的成功率,响应时间,QPS,错误日志数据等。**后端指标上报时可根据当前是否时灰度机进行统计和上报。

(四)配置类灰度

**配置类发布是一种容易被忽视,但是非常容易引起线上问题的变动。**为了减少配置类变更引发的线上问题,我们对配置类也支持了灰度发布的能力。

配置类服务一般分为:配置平台,配置存储,配置读取服务。

**配置灰度发布的实现方案一般是:**配置发布时,先将配置写入灰度存储;配置读取服务的灰度环境优先读取灰度存储,读不到时读取正式存储;灰度验证没有问题后,将配置写入正式存储。

同时,**为了便利性和安全性,我们提供了二维码预览的功能。**便利性指的是配置修改好之后,直接扫码即可预览对应页面的效果。安全性是指在扫码预览的同时,会对设备进行检测,符合我们要求的设备才能进行预览,防止内部信息泄漏。

(五)下游服务接入

下游服务接入分两种方式:

**(1)下游服务网关层根据header里的灰度标识进行流量区分。**这种方式对上游服务透明,适合HTTP服务,且有自己网关层的服务。

**(2)下游服务灰度环境和正式环境提供不同的访问方式(如不同的域名或不同的rpc分组),上游服务根据灰度标记区分对接不同的访问方式。**这种方式需要上游服务来进行灰度判断和对接不同的访问方式。适合RPC服务或存储类服务。

四、总结

在本文中,我们首先介绍了Dogfooding的理念,然后探讨了Dogfooding理念应用于灰度环境期望达到的效果。后面详细介绍了爱奇艺移动端后台如何对灰度流量进行优化,达到灰度灵活云控配置,灰度标记如何传递,指标如何收集,下游业务如何对接。

目前该灰度流量方案已运用于日常的代码上线和配置发布流程,并在灰度环节发现了多次隐患并得到了及时的修复处理。

后续我们会在下面两点进行持续的改进和增强:

**(1)接入便利性。**包括白名单的接入,考虑从APP端内增加便捷入口;下游服务的接入做到更加简单。

**(2)减小灰度对线上用户的影响。**一方面将接入灰度流量的线上用户比例进一步降低,另一方面对这部分人群进行定期更换。

希望通过基于Dogfooding在后端灰度上线的应用,使得我们的服务可用性得到持续的提升。