首先上几张网上来的图片做下对比,作为开题;

2010年的facebook的首页

ReactorLoadBalancer 灰度发布 灰度发布作用_facebook

2015年的facebook的首页

ReactorLoadBalancer 灰度发布 灰度发布作用_开放平台_02

这么长时间,facebook的首页风格、排版基本没太大变化。

其实在2012年,facebook进行首页升级改造,只是在升级版首页灰度期间数据表现始终较老版有明显差距。

ReactorLoadBalancer 灰度发布 灰度发布作用_facebook_03

最终 facebook 忍痛放弃上线众望所归的新版首页。

灰度发布

指能够达到平滑过渡的一种发布方式。

灰度发布的目的主要有:

  • 规避一定的发布风险,降低产品迭代升级所影响的范围。
  • 分流控制,灵活选择用户参与产品测试。逐步扩大用户。
  • 快速获取用户的使用情况,完善产品功能,提升产品质量。

其中的要点是能够灵活精准选取参与使用的用户,全面准确的获取灰度用户使用情况信息,分析、总结、完善;达到降低发布风险、减少bug带来的影响。

上线流程是怎样的?

ReactorLoadBalancer 灰度发布 灰度发布作用_facebook_04

一段时期内,灰度环境与正式环境并行处理用户请求。可以认为是同层级的环境,灰度范围根据使用情况,逐步增加用户使用比率,最终完全替代老的系统或功能。

用户请求处理流程

ReactorLoadBalancer 灰度发布 灰度发布作用_灰度_05

灵活的用户筛选策略,用户请求无感知。

灰度发布的核心目的

  • 效果可量化
  • 避免全量上线之后效果不佳造成的损失

开放平台的实现

开放平台的灰度发布实现是在接口层面的,可以是单个接口,也可以是整个业务服务(一批接口)。

特点:

  • 配置中心一键开/关灰度功能
  • 动态设置分流策略,及时生效,不需要重启服务
  • 支持按参数分流、按百分比分流、两种同时使用
  • 参数对可以配置多个,关系为“与”;参数值可以设置多个,以逗号分隔,关系为“或”,可以设置模糊匹配,以“”表示,“”只能放在开头或者结尾
  • 适用于灰度发布、AB测试、和负载均衡
  • 支持以服务分组级别的灰度(利用分流策略筛选用户)
  • 准实时接口调用报表展示

大致的结构图

ReactorLoadBalancer 灰度发布 灰度发布作用_灰度_06

这个图只是抽取灰度相关的一些点;

网关时序图

ReactorLoadBalancer 灰度发布 灰度发布作用_facebook_07

分流流程图

ReactorLoadBalancer 灰度发布 灰度发布作用_facebook_08

百分比和参数对是逻辑判断的核心;百分比计算需要记录正常环境和灰度环境的处理量,计数功能类主要使用了LongAdder类,提高大并发下的效率。

灰度策略管理

ReactorLoadBalancer 灰度发布 灰度发布作用_开放平台_09

API灰度策略设定

ReactorLoadBalancer 灰度发布 灰度发布作用_开放平台_10

统计分析报表

ReactorLoadBalancer 灰度发布 灰度发布作用_开放平台_11

其他

  • 如何精确的筛选用户?

公共请求参数有appKey、IP、clientId(设备ID号),
业务请求参数由接口自定义控制,可根据实际的业务需求,配合使用接口所有参数,来达到用户筛选。