变更是指对线上系统的任何操作(如:发布、增加、修改或移除等),或其他对生产业务可能有影响的任何操作。
变更系统是指承载任何对线上生产环境变更操作的系统或工具。
例如拥有控制台的白屏化系统/工具、压测/演练平台、黑屏脚本、开放出来的可触发变更操作的API、不以变更为主要功能和目标的平台/系统,如具备了对生产环境实施变更的功能,则相应的变更功能部分也视同变更系统对待等。
变更风控首先是一个业务理念,是稳定性领域内指导变更操作的一套标准,同时规范经济体变更系统的能力建设。其次变更风控是一套技术体系,通过技术手段干预变更的整个生命周期,在变更前进行准入检测,变更中约束渐进式的执行过程,并通过宏观的观测手段验证变更的阶段结果,及时发现问题进行回滚止血,同时在变更后,通过影响面的拓扑提供变更数据的应用,辅助故障定位和问题排查。
变更风控主要有三个目的:
收敛因变更触发的重大故障;
规范业务团队的变更操作,沉淀通用变更能力和执行标准;
帮助变更系统建设风控能力,护航业务变更执行。
标准的变更过程一般可分为:计划、执行、结束三个部分:
计划阶段:该阶段主要包含变更申请,以及申请的准入审批。变更申请需要明确变更计划、窗口期、潜在影响以及回滚方案。
执行阶段:首先对变更行为进行二次校验,如确定变更环境是否满足要求,业务流量已按预期停止等。变更过程建议先在测试环境验证后,再进入生产环境变更阶段,同时灰度、分批进行。每批次间设定一定间隔时间,并进行观察记录至少一项可反应核心业务健康状态的指标(业务监控项、日志文件名等),同时须具备回滚能力。
结束阶段:通过监控、日志等数据验证业务是否正常,并记录上报相关数据。
【以上参考阿里云变更发布策略】
变更发布策略是在软件开发和运维中非常重要的一部分,主要目标是确保软件的稳定性和可用性,同时尽可能地减少由于变更引入的风险。
一些常见的变更发布策略:
- A/B测试:通过用户请求的元信息将流量路由到新版本,是一种基于请求内容匹配的灰度发布策略。常见的做法包括基于HTTP Header和Cookie,将特定请求或用户灰度至新版本,降低故障影响范围。
- 金丝雀发布:通过调整流量权重比例,逐步将流量从老版本切换至新版本。
- Feature Flags:使用Feature Flags工具与平台,可以让软件的发布更快、更安全。Feature Flags可以控制Feature的运行与否,当Feature Flag处于激活状态时功能运行,否则不运行。因此,我们可以在任何时间状态下将一个Feature branch合并到主分支,并部署到上线(即使是没有完成的功能)。上线后,由Feature Flag控制功能的发布。
- 灰度环境:灰度环境的目的是隔离生产流量,减少风险影响,在环境内形成调用闭环,方便测试。
- 变更风险防控:变更风险防控是一套技术体系,通过技术手段干预变更的整个生命周期,在变更前进行准入检测,变更中约束渐进式的执行过程,并通过宏观的观测手段验证变更的阶段结果,及时发现问题进行回滚止血。
在软件开发中,“生产环境变更”或“代码变更”指:在生产环境(也称为产品环境或线上环境)中对任何部分进行的修改,包括应用程序的更新、配置的修改、硬件设施的更换等。
生产环境变更分为以下几类:
6. 硬件资源变更:包括所有与物理硬件和云服务硬件配置相关的更换、升级或维护,例如升级处理器(CPU)、扩充内存(RAM)、更换硬盘等。
7. 软件配置变更:涵盖了所有与操作系统、数据库、中间件以及云服务软件设置的修改,例如优化操作系统性能通过调整系统参数等。
8. 应用程序变更:主要包含了所有与业务代码和将业务代码发布到生产环境的 DevOps 工具的更改,例如代码变更、配置变更、依赖库更新、DevOps 工具变更等。
9. 数据变更:包括线上数据的清理、迁移、更新等操作。
10. 流量变更:主要包含了流量变化的情况,例如负载调整、后台投放或大型促销活动等。
生产环境变更的管理非常重要,因为任何重要的变动,如果没有进行变更管理,可能会导致信息不一致,造成前后端的困境。例如,如果产品的配方、加工工艺、设备或包装发生变化,而没有进行适当的变更管理,可能会导致包装上的标签与实际配方不一致,甚至在过敏原发生变化时,可能会引发食品安全的问题。
生产环境变更就是在生产过程发生任何变化前,需要相关部门对相关的流程、风险进行识别和控制,确保生产顺利进行,保证产品的质量和安全。