风险与需求
我们通常会引入三方平台工具或插件,帮助自身产品提供更好的客户体验,比如数据分析工具、用户引导、客户成功工具等。为此,通常需要把三方工具 SDK 集成到项目中,但这类 SDK 会对网站应用做 DOM 操作,存在使产品无法正常运行的风险,如:
某些用户的浏览器环境下,三方 SDK 使产品不能正常运行
三方平台进行了错误的更新,导致产品部分功能瘫痪
海外的三方插件,网络不稳定或有法律风险
一旦发生风险可能会造成不可避免的经济损失。
解决方案
通过敏捷开关(featureflag.co)提供的 Feature flag 在生产环境渐进式发布与回滚三方工具的功能特性。如下图所示,当 Feature flag 返回值为 true 时,则执行三方工具初始化代码,否则不执行(假设三方工具不被初始化,就不会被执行)。
暂时无法在飞书文档外展示此内容
代码集成
如下为码示例。在第二行代码中,使用敏捷开关的 SDK 获取 Feature flag "三方插件工具"的返回值,如果为 true,则初始化三方工具,否则什么都不做。
if (ffcService.flags['三方插件工具'] === true) {
thirdTool.init('{key}', { id: auth.id });
}
渐进式发布
为了避免风险,我们采用如下的发布机制:
第一步,上线后不对任何用户开放
第二步,在生产环境对内测团队开放
第三步,发布给10%的公众用户
第四步,发布给30%的公众用户
第五步,发布给100%的公众用户
第一步,在集成了三方插件工具的新版产品上线时,在敏捷开关后台设置 Feature flag "三方插件工具"返回值为 false,使产品不对任何用户开放。
第二步,在 Feature flag 的"自定义规则"中引入内部测试团队,即三方工具只对内测人员开放。如下图所示,在"目标用户"和"自定义规则"区域,分别设置 Feature flag 对内测成员返回 true :
在"目标用户"模块的 true 返回值下添加会参与内测的目标用户。
在"自定义规则"模块中,建立一个对“开发组”和“内测团队”用户组返回 true 的规则。
第三步,如果在内测过程中出现问题,则可以反馈给第三方团队等他们的 BUG 修复。如果三方工具在内测环节表现良好,则可以开始向公众用户进行渐进式发布。如下图所示,将默认返回值按百分比设置,给 10% 的用户返回 true, 90% 的用户返回 false。
如果有 BUG 出现则可以将返回值设置为 100% false,0% true 的方式实现秒级回滚。如果可以精准的知道是哪些用户有BUG,则可以通过"自定义规则"针对具体用户进行回滚。
第四步,如果第三步没有任何异常,则可以扩大用户的发布百分比,将默认返回值百分比设置为 30% 的用户返回 true, 70% 的用户返回 false。如果出现 BUG,可以按照第三步所描述的方式进行回滚。
第五步,如果第四步没有任何异常,则可以扩大用户的发布百分比,将默认返回值百分比设置为 100% 的用户返回 true, 0% 的用户返回 false。如果出现 BUG,可以按照第三步所描述的方式进行回滚。
总结
通过使用 Feature flag 控制三方工具,大幅度降低了其发布上线的风险。即使在未来的使用中因为三方工具的更新产生了BUG,我们也可以通过敏捷开关的后台快速的回滚下线三方工具,保障产品的整体稳定性,降低风险。
同样,这种操作可以适用于大多数新功能发布、功能更新的场景。