Skip to content

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

Description

@TFdream

什么是灰度发布?

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

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

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

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

灰度流程

image

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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