5

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

 3 years ago
source link: http://gigix.thoughtworkers.org/2018/2/27/dps-experimental-infrastructure/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

前文中我们说到,传统企业在逐步建设自己的数字平台过程中,需要抓住交付基础设施、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建设都谈不上“科学”。科学的基础建立在假说和实验之上,而在很多组织里,“有可能失败的项目”恐怕根本无法立项——更不用说“很有可能失败的项目”。降低做实验和犯错误的成本、从经验中尽可能多学习,是企业面对未知世界的唯一出路。然而快速的受控实验背后隐藏的是基础设施、软件架构、数据等多方面的技术支撑,把实验基础设施作为企业数字化旅程的阶段性目标,拉动各方面基础能力的建设,是建设数字平台的合理路径。


Recommend

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK