透明思考


Transparent Thoughts


数字化企业的实验基础设施

前文中我们说到,传统企业在逐步建设自己的数字平台过程中,需要抓住交付基础设施、API和架构治理、数据自服务、创新实验基础设施和监控体系、用户触点技术这五个支柱。今天我们讨论的主题是数字平台战略的第四个支柱“实验基础设施”,看看一个倡导消除摩擦、建设生态、推动创新的数字化平台如何赋能快速、有针对性的商业实验。

DPS全局观

什么是实验基础设施

作为数字化企业的代表,亚马逊是众多怀揣数字化梦想的企业学习的榜样。今天的亚马逊,在零售、广告、消费电子终端、应用商店、云服务等多个领域与各领域的领先企业竞争。更可怕的是,除了丰富的业务线,亚马逊还有Dash Button、Echo、Prime Air、AWS等大量创新。最可怕的是,据AWS的CEO说,除了这些大家知道的、获得了一定成功的创新项目,还有更多创新项目失败了——而亚马逊认为完全OK。亚马逊强大的创新能力,背后体现的是更为强大的快速实验、快速学习、快速调整的能力。缺少这种能力,就算把亚马逊的产品和模式摆在面前照抄,也无法跟上它不断创新的步伐。

为了支撑数字系统的快速实验、快速学习、快速调整,需要在快速交付基础设施与数据自服务的基础上再考虑下列问题:

  • 需要从多种来源采集关于系统、关于顾客的数据
  • 需要根据业务目标在系统中埋设监控点,并及时把监控结果可视化呈现给业务用户。
  • 为了降低实验试错的风险,在把新版本发布给全部用户之前,应该以金丝雀发布的形式首先发布给一小部分用户,确保新版本不造成重大损害。
  • 系统需要支持功能切换开关(toggle),允许团队在不修改代码的前提下改变系统的行为。
  • 路由技术支持蓝-绿部署和A/B测试,方可高效地开展受控实验。

实验基础设施详解

数字平台中的实验基础设施由以下特性共同支撑。

数据采集

精益创业的核心逻辑是缩短“Build-Measure-Learn”的周期。为了从实验中学习,就需要全面采集实验数据。交付基础设施通常会包含技术性的监控和数据采集(例如基于ELK的日志监控体系),提供性能、资源、系统告警等角度的数据。

单纯技术性的数据不足以对业务实验提供反馈,需要贯串用户体验,获取对业务有指导意义的数据。一个可供参考的框架是“海盗度量”:聚焦关注创新业务的获客、活跃、保留、推荐、创收(AARRR)这5个环节,从这个5个点上提出假设,然后用数据来证实或证伪假设。

金丝雀发布

金丝雀发布是一种控制软件发布风险的方式:在把新版本发布给全部用户之前,首先发布给一小部分用户,确保功能完好可用。金丝雀发布的主要目的是为了降低风险。新的软件可以先在与用户隔离的环境中接受UAT测试;如果新的软件有问题,受到影响的只是一小部分用户,不至于立即造成巨大的损失;如果新的软件有问题,可以立即回滚到旧版本。

金丝雀发布最基本的形式,就是在前端反向代理上用路由技术把一定比例的用户导向“金丝雀”版本(例如Nginx可以支持多种筛选用户的方式)。在路由技术的背后,应该以凤凰服务器不可变服务器来实现每个服务,服务的创建和回收应该是完全自动化的。同时还需要需要端到端的综合监控,根据有业务语义的目标(例如转化率)是否发生突变来判断金丝雀的效果。

Toggle架构

Feature Toggle的目标是,通过架构设计允许团队在不修改代码的前提下改变系统的行为。常见的一些需要Toggle的场合包括:避免多个交付版本的代码branching/forking;避免未完成功能的代码branching/forking;运行时动态改变系统行为,以实现一些特定能力,例如:线上受控实验、针对不同用户权限提供不同服务、回路熔断和服务降级等。

常见的Toggle可以分为4类:

  • Release Toggle:某些功能已经存在,但暂时不向用户发布。主要目的是为了基于trunk开发、避免开发分支。静态,生存周期短。可以用Togglz之类工具。
  • Ops Toggle:回路熔断,高负载或发生故障时自动降级服务。较动态,生存周期长。工具如Hystrix等。
  • Experiment Toggles:用于支持线上实验(例如Canary Release、A/B Test等)。动态,生存周期较短。采用路由技术实现。
  • Permission Toggles:用于给不同权限的用户提供不同的服务。引入统一的toggle router和toggle configuration,避免在代码中写条件。动态,生存周期长。

Feature Toggle也应该以服务API的形式暴露出来,并且鼓励用结构化的、人类可读的配置文件管理Toggle。

路由技术

通过路由切换的方式,让用户在不同的时间、不同的场合访问到不同的服务实例(可能是不同的版本)。路由技术可以用来支撑多种实验性部署技巧,包括蓝-绿部署(零宕机部署)、A/B测试、金丝雀发布等。这篇文章介绍了这些部署技巧直接的关系。

路由技术的实现与下层的弹性基础设施有很大关系,以AWS为例,有几种比较简单的实现蓝绿部署的方式:

  • 对于单个EC2实例,可以修改它的Elastic IP
  • 对于EC2集群,可以切换ELB背后的Auto Scaling Group
  • 可以用Route53修改DNS重定向
  • 可以用BeanStalk切换整个应用环境(如果应用部署在BeanStalk上)

Cloud Foundry也有一组实现蓝绿部署的最佳实践

可视化和埋点

通过埋点获得系统运行时的信息,收集之后显示出来,从而把运维环境中的信息及时反馈回开发团队,缩短反馈周期。

常见的埋点方式有:

  • 代码中埋点(例如New Relic、AppDynamics、Dynatrace)
  • 监控进程(例如StatsD、collectd、fluentd)
  • 日志(例如Splunk、ELK)

数据需要用一体化的、直观可视的仪表板展示出来,从而快速指导业务调整。GrafanaKibana等工具提供了很好的仪表板功能,不过还是需要针对自己的情况加以定制。

小结

很大程度上,大部分组织的IT建设都谈不上“科学”。科学的基础建立在假说和实验之上,而在很多组织里,“有可能失败的项目”恐怕根本无法立项——更不用说“很有可能失败的项目”。降低做实验和犯错误的成本、从经验中尽可能多学习,是企业面对未知世界的唯一出路。然而快速的受控实验背后隐藏的是基础设施、软件架构、数据等多方面的技术支撑,把实验基础设施作为企业数字化旅程的阶段性目标,拉动各方面基础能力的建设,是建设数字平台的合理路径。