导语:Shiply是腾讯端服务(Tencent Device-oriented Service)下的一站式客户端发布平台(支持配置开关、动态资源、热修复、应用升级、应用市场等发布能力)。平台通过多年积累的发布经验,并结合业务发展的需求,逐步将发布规范化从专项、表象、问题驱动的方式转变为工具化、系统化的落地与实践。 Shiply 和 Bugly 在产品和技术上持续探索全面的监控止损体系,建立线上发布的安全防线,为业务的每次安全发布保驾护航。
随着 DevOps 等持续交付范式的不断发展,热发布(包括远程配置下发、离线资源下发等能力)已成为持续交付的关键工具。在电商、短视频、本地生活、信息流等多种业务场景中,热发布发挥着至关重要的运营作用。
传统的应用程序发布(冷发布)通常涉及多个团队的协作,是一种高压力、高风险的活动,因为一次发布会包含大量的变更。为了减少这种大规模变更带来的风险,越来越多团队转向 DevOps 进行更敏捷的持续交付。DevOps 也意味着开发人员和运维人员的界限模糊,开发人员对生产环境的控制需求增加,在客户端上,这主要通过远程配置、离线资源(热发布)等发布管理系统来实现。
例如:开发人员可通过特性开关进行灰度(分阶段发布),并根据 A/B 测试等指标观察结果,以决定是否全面推广新特性。若不达标,可关闭特性并在后续迭代中进行优化或下线。
然而,热发布在软件系统中的广泛应用也容易导致发布失误,从而引发运营事故,这样的例子屡见不鲜,例如:
时间 | 案例 |
---|---|
2023年7月 | 某内容平台配置下发导致 App 在启动阶段闪退,官方通告必须卸载重装才能解决。 |
2024年6月 | 某工具类产品在配置运营活动过程中出现bug,导致部分用户出现客户端崩溃。需发布新版本修复问题,升级新版本后才可恢复使用。 |
从以上案例可以看出热发布失误不仅会影响软件的稳定性,更有可能造成产品口碑下滑导致用户无形流失。
冷发布(程序包的发布)有隐私合规、稳定性、性能等风险,发布过程中对应的检测、审核、监控机制也都相对完善,在各个环节都有专人跟进,影响可控,真正造成事故的概率是很小的。
而热发布常因为缺少对风险识别的经验,缺乏对应的流程、规范,时而导致事故产生,常见风险如下:
风险类型 | 风险点 |
---|---|
人的风险 | 使用不规范:错配、漏配、滥用(不需要配置时使用了配置)发布不规范:随意发布、无验证发布、无灰度发布使用了配置、资源但没有兜底处理措施优先级不合理导致配置、资源互相覆盖依赖审核人员对风险的认知水平 |
系统风险 | 配置变更时缺乏参数合法性校验错误的配置、资源无法快速回退缺乏配置、资源异常检测机制 |
舆论与合规风险 | 运营内容包含民族歧视、地域偏见、宗教矛盾、民俗差异、文化冲突等内容 |
系统风险
舆论与合规风险
我们可以从一个复盘的改进措施中学习安全发布知识:
其中,关键改进措施就是增加:内容校验、告警拦截、灰度验证、快速回滚、止损恢复等能力。这些其实是一个规范的发布流程必备的,除此之外,还应具备:版本管理、查看变更日志等基础能力。
每次线上发布都伴随着风险,发布过程高度依赖于人的经验和风险识别水平。大多数团队在经历问题后,通过复盘和经验总结,再用规范和强制性的流程约束发布行为,以避免再次发生事故。大部分软件工程实施过程中都会经过这四个阶段:
每个团队都需要较长时间从蛮荒阶段往自动化阶段进化。从依靠执行者的风险意识,到依靠系统化的发布风控保障。Shiply 就是满足这一目标的解决方案。
Shiply 作为一站式发布平台,在发布流程的各个节点加入防御和止损机制。实现三级风险控制:
从根本上将发布安全由“人为保障”转向“平台保障”,将人的经验转为自动执行的规范标准。
功能 | 描述 | 功能截图 |
---|---|---|
内容校验 | 平台为每个配置都创建了校验脚本,可以通过便携校验脚本对配置内容进行自定义校验。每次新增/修改发布任务时都会对配置值进行校验 | |
修改对比 | 编辑下发内容后,可以通过差异对比对修改内容进行 Review | |
变更记录版本化 | 通过发布管理可以获得两种基本能力,它们分别是可追溯性和可重现性,从而提升软件整个生命周期管理的安全性,并提高团队协作效率。其中的可追溯性是指任何人在获得授权的前提下,能够找到该软件的任何变更历史,即对任何一次软件变更,都可以准确地回答5W1H,即谁(who)、什么时间(when)、做了什么(what)、为什么(why)、如何做的(how)。这是软件组织信息安全管理中的一个重要保障手段。 | |
灰度验证 | 平台支持丰富的灰度策略,满足业务各种场景下的灰度需求按自定义时长 + 自定义批次的灰度按自定义时长 + 自定义累计用户数的灰度灰度结束后是否定时发布灰度结束后是否暂停发布 | |
发布审核 | 审核人员可以清晰看到owner对发布任务的修改内容,以便评估修改对线上的影响。 |
发布审核审核人员可以清晰看到owner对发布任务的修改内容,以便评估修改对线上的影响。
当一项发布进入灰度阶段时,我们希望能够在灰度早期,影响少量用户时,就能发现问题。但实际上,灰度用户较小时,各项指标的波动都很大,容易出现误报。而常规的监控方案,是通过监控大盘 Crash 率指标来实现的,但这难以发现新增的个例问题,当问题引起大盘波动时,影响已经很大,监控就失去了原本的预警作用。
Shiply 安全发布能够从灰度小样本用户中准确发现问题,我们通过以下思路实现:
我们支持多种指标的监控,及问题全生命周期的观测:
我们通过AB对比的方式科学评估每一次发布质量:
我们通过告警置信度和动态告警阈值减少误报:
我们支持问题自动分析关联性,并自动止损:
Shiply 与 Bugly 在产品和技术上持续探索全面的监控止损体系,建立线上发布的安全防线,为业务的每次安全发布保驾护航。
产品 | 优势 |
---|---|
Bugly 专业版 | 提供专业的质量监控服务,帮助开发者及时发现并解决问题,打造高质量App。支持多维度的质量、性能监控。Bugly 对文中 Crash、ANR、Foom、Error 等多指标监控提供了技术支持。 |
Shiply 专业版 | 提供专业的客户端发布能力,帮助开发者安全、高效进行动态发布,支持应用灰度升级、远程配置、动态资源包、热修复等。 |
Shiply 平台通过 Bugly 提供的监控能力来实现 Crash、ANR、FOOM 等问题的监控,配置开关、资源、程序包灰度和市场发布均具备监控止损能力。
通过与Bugly监控发布系统的打通,由发布导致的新增问题,通常在影响设备数小于100人时,可诊断出 Crash、Error 与发布任务的关联性,并及时通知业务通过修改/回滚配置解决,将风险防范于未然,避免了影响面扩大造成线上事故。
日期 | 告警类型 | 故障原因 | 止损效果 |
---|---|---|---|
配置发布 | 新增Error | 某业务adContainer 开启 hermes 开关设备为true后,引发 Error: Value is a string, expected an Object 错误 | 影响设备数:11发生次数:26 |
新增 Crash | 某业务启动优化 CppServrice 模块降级机制不完善,下发执行 CppServrice 相关配置时产生 Crash | 影响设备数:小于100 | |
资源发布 | 新增 Crash | 某业务新版本资源插件运行时出现空指针 | 影响设备数:小于100 |
新增 Crash | 某业务监听 hostWhitelist 资源更新时,修改类属性导致 Crash | ||
灰度包发布 | Crash 告警 | 某业务14.5.6版本Crash率达到0.25%,触发告警 | 影响设备数:219已灰度设备数:100654 |
Crash 熔断 | 受开关影响,某业务8.9.70灰度版本Crash率超过0.40%,触发熔断 | 影响设备数:209已灰度设备数:4673 |
发现本次发布出现问题时,可直接停止当前任务,平台会依据下发任务匹配漏斗,自动匹配上一次发布,实现自动降级。也可以选择想要回滚的目标版本,进行手动降级。Shiply 还提供热修复解决方案,实现便捷、用户无感的现网问题修复。
功能 | 描述 | 功能 |
---|---|---|
快速回滚 | 当发布出现问题时,支持快速回滚到历史任务进行安全止损。 | |
热修复 | 当线上出现严重问题时,换包或重新发布需要耗费巨大的成本,且覆盖周期较长;热修复可以提供便捷,且用户无感的修复能力,助力业务快速修复问题。 | 强大的修复能力:常规的业务代码、动态库、资源文件都可以实现修复。稳定的质量保障:经过现网大量业务的验证,稳定性及可靠性有保障。良好的发布体验:发布平台有完善的发布任务管理,使用交互简单易懂。规范的发布流程:发布审批权责分离,有规范完善的发布流程控制。实时的发布数据:放量、安装、激活数据实时同步,快速把握修复进度。 |
发布的过程就是风险管控的过程。本文以配置、资源等热发布为例,介绍了线上发布存在的风险,以及发布过程中人的风险给发布带来的巨大不可靠性。
Shiply平台通过将经验规范化、将标准工具化、将流程系统化,将执行自动化来保障发布全链路的稳定、高效、安全、合规。Shiply 平台多项下发能力均支持“事前防御-事中监控止损-事后回滚”三级风险管控机制,大幅降低线上事故的风险。
在探索线上监控止损机制上,与 Bugly 平台联动,支持 Crash、ANR、FOOM、ERROR、隐私合规、业务自定义指标的监控、告警、止损。同时通过解决“告警海洋”问题,使告警及时、精准。能够在影响设备数较小时发出告警,同时支持自动止损,助力发布无人值守!
我们在发布风险管控上做了很多努力,但深知与风险斗争的道路没有尽头,因此我们持续提高对发布风险的理解、洞察和防御水平,为业务的每次安全发布保驾护航!
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文系转载,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。