Skip to content

Spring Cloud教程 - 灰度/AB testing方案选型 #20

@TFdream

Description

@TFdream

什么是灰度发布?

首先我们来了解什么是灰度发布,灰度发布(又名金丝雀发布)是指在黑与白之间,能够平滑过渡的一种发布方式。在其上可以进行 A/B 测试,即让一部分用户继续使用产品特性 A,另外一部分用户开始使用产品特性 B,如果用户对特性 B 没有什么反对意见,那么逐步扩大范围,把所有用户都迁移到特性 B 上。灰度发布可以保证整体系统的稳定性,在初始灰度时就可以发现、调整问题。

在很多的开源框架中也有灰度发布的功能,比如配置中心 Apollo 中,对于配置的修改,也可以选择灰度发布,推送到某个指定的节点,如果这个节点使用一段时间没有发生问题,那么就可以推送给全部节点。如果这个节点使用过程中出问题,那么直接回滚这个节点的配置即可,对于其他节点没有任何影响。如果没有灰度发布的功能,一旦改动所有节点都生效,一个节点出问题,所有的节点也都会受影响。

了解完灰度发布的概念后,那么我们为什么需要灰度发布呢?因为灰度发布可以帮助我们解决以下三大问题。

  • 灰度发布解决的第一个问题:服务数量多,业务变动频繁,发布频繁。
    微服务架构下,拆分出来的服务数量成百上千,互联网的业务又是变动频繁的,一周一迭代很正常,基本上每周都要发布新功能,每次发布涉及的服务数量都比较多。发布过程中难免会出现问题,这个时候就需要考虑如何不影响现有的用户,灰度发布就能解决这个问题。
  • 灰度发布解决的第二个问题:灰度发布能降低发布失败风险,减少影响范围。
    通过灰度发布,先让一部分用户体验新的服务,或者只让测试人员进行测试,等功能正常后再全部发布,这样能降低发布失败带来的影响范围。
  • 灰度发布解决的第三个问题:当发布出现故障时,可以快速回滚,不影响用户。
    灰度发布只是先发布一部分功能,比如只发布一个节点,而这个节点不会接收正常用户的请求,只会根据灰度的规则来处理指定用户的请求,灰度后如果发现这个节点有问题,那么只需回滚这个节点即可,当然不回滚也没关系,通过灰度策略隔离,也不会影响正常用户。

灰度流程

image

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions