服务灰度发布

灰度发布:是指在黑与白之间,能够平滑过渡的一种方式。AB test就是一种服务发布方式:让一部分用户继续用A,一部分用户开始用B;如果用户对B没有什么发对意见,那么逐步扩大范围,把所有的用户迁移到B上面。

1、服务灰度发布流程设计

    服务灰度发布的主要作用如下:

        1)、解决服务升级不兼容问题。

        2)、及早的获得用户的意见反馈,完善产品功能,提升服务质量。

        3)、缩小服务升级所影响的用户范围,降低升级风险。

        4)、让用户及早参与产品测试,加强用户互动。

    1.1、灰度环境准备

        在正式进行服务灰度发布之前,需要对灰度环境进行划分、隔离和准备,其流程设计如图1-1所示:
        
                                             图1-1  灰度发布环境准备流程

    1.2、灰度规则设置

        灰度环境准备完成之后,运维人员对灰度规则进行配置,灰度规则主要用于服务路由。按照规则的不同,部分用户调用 老的服务,另一部分调用升级后的服务,常用的灰度规则分类如下:

        1)、按照接入门户类型分类,例如PC客户端、手机客户端。

        2)、按照中断类型:IOS、安卓。

        3)、按照区域划分。 

        4)、其他(主要根据业务需求自定义)。。。

        服务框架会提供集中默认的灰度规则供用户使用,用户也可以自定义灰度规则。灰度规则的技术实现有多种,如果支持复杂的灰度规则可以使用规则引擎,简单的规则可以使用表达式、JSON文本;具体用什么技术,主要看服务框架的应用场景。一种比较好的策略是,服务框架不限制灰度规则的具体实现技术,支持用户自定义灰度规则。
       
                               图1-2   灰度规则设置流程

1.3、灰度规则下发

    灰度规则设置完成之后,需要将规则下发给参与消息路由的软负载均衡SLB、Web前台和后台服务,他的处理流程如图1-3
  
                                                  图1-3 灰度规则下发流程

        灰度规则下发主要由服务注册中心负责推送,推动的目标包括前端的SLB负载均衡器、Web前台集群和App后台服务集群,各个节点将灰度规则缓存到本地内存中;消息或者服务路由时,通过路由插件解析灰度规则,将消息路由到指定的版本中。需要指出的是,灰度规则的通知范围使整个生产环境,包括灰度发布环境和非灰度生产环境。

    1.4、灰度路由

        通过SLB定制的灰度发布插件,可以将HTTP消息按照规则分发给不同的Web前台;Web前台根据内置的服务框架SDK(软件开发工具包),通过客户端灰度路由插件,分析灰度规则,将服务路由到灰度或者非灰度环境,实现服务的灰度路由。

        灰度路由的流程图入股1-4所示:
        
                                                 图1-4  灰度路由流程          

        需要指出的是,如果灰度规则解析失败,实际上就是无法区分那些服务应该路由的灰度环境,这种场景下比较适合的做法就是将服务路由到非灰度环境。如果服务提供者无法处理或者处理失败,则需要对灰度发布做回退处理,并通知所有受影响的客户。

    1.5、失败回滚

        如果灰度升级失败,需要支持失败回滚。失败回滚可以是全自动回滚,也可以是人工操作回滚,这取决于灰度发布功能的成熟度和这个业务发布、测试流程的自动化程度。失败回滚的流程图1-5所示。

                                        图1-5 灰度发布失败回滚流程

    1.6、灰度发布总结

        灰度发布之后,需要对灰度发布之后的服务运行和运营情况进行分析,包括服务调用来源分析,服务想能KPI数据、用户行为分析报告、用户问卷调查等,通过对这些数据进行分析来改进服务功能,完善产品,为新一轮灰度发布做铺垫。

总结:互联网产品的一个特点就是不断的升级。很多产品基本保持一周一次的发布频率。系统升级总是伴随着风险,新旧版本兼容的风险,用户使用习惯突然改变而造成用户流失的风险,系统宕机的风险。为了避免这些风险,很多产品都采用了灰度发布的策略,其主要思想就是把影响集中到一个点,然后到一个面,出现意外情况后很容易就能回退。

    分布式服务框架支持服务的灰度发布,可以实现业务的快速试错和敏捷支付,缩短新业务和产品的上线周期,非常重要。

猜你喜欢

转载自blog.csdn.net/zhengzhaoyang122/article/details/80966497