去哪儿预发平台的设计和实践 姓名:李景康 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 个人简介 李景康 去哪儿测试高级经理 •2018年加入去哪儿旅行,负责酒店供应链的质量保障工作。 •期间负责酒店测试环境3.0设计和实践,并推动公司级落地推广。对环境治理有深入的理解和实践经验 预发平台背景 预发平台原理和设计 目录预发平台落地实践 未来展望 01 预发平台背景 随着去哪儿业务规模的不断扩大,质量要求日益严格 机遇 挑战:质量的要旅求游日行业益规严模格的,不断扩大 挑挑战战 对对于于系系统统稳稳定定性性的的要要求求日日渐渐严严格格,,每每一一次次 故故障障/问/问题题都都会会造造成成大大量量损损失失 图1:文化和旅游部2013-2023年国内旅游发展情况 变更和故障紧密相连:SRE的经验告诉我们,70%的生产事故由某种部署的变更而触发 --<<SRE:Google运维解密>> 故障占比 非变更类故障变更类故障 从应用维度拆解变更类故障 配置变更 代码发布变更 基础层变更 根据业务需求进行配置类变更 项目不断迭代过程中代码发布变更 应用依赖的基础服务DB,redis,中间件等变更 根据统计来看 从配置到基础层变更1.变更频率降低 2.变更影响变高 2024年7月微软蓝屏事件 网络安全公司“众击”(CrowdStrike)的一次技术更新失误,导致微软蓝屏事件 影响范围大: 1.影响范围扩散到全球 2.涉及民航、医疗、金融机构 问题损失大: 经济损失超过10亿美元 预发平台背景-如何降低变更问题风险 如何降低变更问题风险? 预发平台背景-降低变更风险 预发平台目标是降低变更风险,通过控制影响范围和合理评估影响范围来降低变更风险,最终提高系统稳定性 变更流量控制(控制影响量级) •从百分比流量控制(用户随机)->用户维度流量控制 变更链路完整性(影响范围评估) •从单模块灰度->全链路灰度 •避免单个变更影响范围评估不全的问题 变更链路可观测性(发现定位问题) •链路可视化 •监控预警 •日志预警 预发平台价值 01.人 用户:稳定的用户体验 开发和测试:预发验证提前发现问题并降低变更风险 03.系统 通过流程优化,降低变更风险,保障系统稳定 01.流程 预发变更风险控制:从变更流量控制精细化和链路完整性提升两个方向上优化变更流程,降低变更风险 02 预发平台原理和设计 2.1预发平台整体方案 2.2预发平台变更流量控制-流量染色方案 2.3预发平台变更链路完整性-流量路由方案 2.4预发平台可观测性方案 02 01 流量染色 流量路由 流量染色目标给用户流量打标,保证后续路由的正确性 01 前端 APP,PC等流量入口 02 流量网关 公司统一流量网关OpenResty 03 业务网关 业务线业务网关 前端和后端中间层 04 后端服务 业务线后端服务 染色位置 方案简述 染色性能评估 研发成本低 总结 前端染色 前端启动时加载染色配置,如果命中染色配置,则请求增加路由标识 好 前端加载染色配置后,内存执行耗时较好 好 仅前端组件一次性研发 满足功能要求,同时染色性能评估和研发成本均满足预期 流量网关染色OR(OpenResty) 在入口域名处增加全局规则,根据uid或百分比向请求header中填加路由标识 差 全局规则过多会影响线上性能 好 仅流量网关进行一次性适配 性能要求不满足:全局规则过多可能影响线上性能 业务网关染色 业务网关存储染色配置信息,当请求到达时,根据配置为header增加路由标识 好 业务网关加载染色配置后,内存执行耗时较好 差 业务网关不统一,所有业务网关均需参与研发 研发成本不满足:全公司业务网关改造成本较高 预发平台-流量路由方案 01 硬路由(物理隔离) 物理层面和线上环境隔离,冗余部署中间件和流量网关 02 软路由(逻辑隔离) 逻辑上的环境隔离,通过流量 网关和中间件转发 软路由方案(逻辑隔离) 方案简述;逻辑上的环境隔离,通过流量网关和中间件转发 1.技术改造成本中,有技术改造难度,但平台 一次性改造成本,业务应用无需修改 2.资源成本低,使用平台按需拉取模块和应用 3.拓展成本低,拓展新应用,无需额外投入改造成本 4.维护成本低,环境维护跟随项目周期,不需 要长期维护 硬路由方案(物理隔离) 方案简述;物理层面和线上环境隔离,冗余部署中间件和流量网关 1.技术改造成本高,平台侧无改动,业务应用有改造 成本,随着应用增多剧增(全司活跃应用3000+)2.资源成本高,资源成本高,需要支持3000+应用资源成本和中间件资源成本 3.拓展成本高,拓展新应用,需要额外投入改造成本 4.维护成本高,单独维护硬路由环境,需要持续投入维护 环境标识环境标识,是否开启路由功能 Qtrace增加标识写入qtrace内,保证传递准确性,#环境标识#prod 流量网关OR(OpenResty) 1.流量入口使用同一套域名 2.在环境创建/更新时新增/更新预发域名对应的转发规则 1.线上域名转发:根据标识转发到预发域名 2.预发域名转发:路由规则匹配和转发 dubbo 使用一套Zookeeper保证软路由服务被及时发现,各软路由环境服务注册时带上环境标识 根据链路中软路由标识和注册中心的环境标识匹配选择匹配上选择对应环境dubbo服务,匹配不到默认线上 qmq 保证软路由服务被及时发现,各软路由环境qmq注册时带上环境标识 根据消息体的软路由标识识别,只消费软路由标识匹配上的消息,如果软路由环境没有匹配成功则由基准消费 改造类型服务感知服务路由 qschedule通过环境标识单独注册任务执行独立任务进行调度 qconfig支持通过环境标识单独注册环境配置支持服务使用单独环境配置 预发平台-流量路由方案-OpenResty改造方案详解 核心动作 服务感知 •预发环境构建时进行预发OR注 册 服务路由 •集群转发:根据染色标记,转发 到OR预发集群 •规则匹配:转发到匹配的预发环 境/缺省时转发线上环境 核心动作 服务感知 •provider端根据环境变量,在zk 注册预发平台环境 服务路由 •consumer端根据染色标识,判 断和选择对应环境 背景:传统百分比灰度方案,监控,报警和线上一致,往往在小流量场景时,不能及时发现和定位问题目标:通过可观测性方案,提升预发环境的问题发现、定位能力 系统问题发现 业务问题发现 问题定位 1.监控实时预警 2.异常日志实时预警 1.业务失败问题实时预警 2.资损类问题实时预警 1.链路排查可视化 预发平台-可观测性方案-系统/业务问题发现机制 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 预发平台-可观测性方案-链路排查可视化 背景:在预发平台引入后,线上环境增加了一种环境类型,链路排查的复杂性随着增加 解决:通过qtracer客户端和展示改造,在链路中区分预发环境和线上环境,方便问题排查定位 01 路由信息可视化 02 qtracer客户端改造: 1.将header中的染色标识写入qtracecontent,后续透传染色标识 2.同时将染色标识写入本地日志 链路可视化 qtracer平台拓扑展示改造: 1.环境拓扑展示时,识别预发环境环境名prepare-grey-xx,在拓扑中展示 2.将染色标识在qtracecontent中展示 预发平台-可观测性方案-链路排查可视化 背景:在预发平台引入后,线上环境增加了一种环境类型,链路排查的复杂性随着增加 解决:通过qtracer客户端和展示改造,在链路中区分预发环境和线上环境,方便问题排查定位 03 预发平台落地实践 3.1预发平台使用和效果 3.2预发平台典型案例 预发平台-平台使用-嵌入项目流程 预发环境验证流程: 适用于重要变更项目(影响范围大,风险性高),通过预发环境验证,提前发现问题,降低变更风险 预发环境验收 (重要项目可选) 灰度环境部署灰度环境观察线上部署 预发环境部署 (重要项目可选) 质量门禁校验联调测试 集成测试 代码构建单元测试测试环境部署 预发平台-平台使用-准入标准 预发环境是特殊的线上环境,使用标准除了项目上线的质量门禁,还会应用准入校验(保证安全性和可用性) 应用准入:白名单准入 应用权限准入 质量门禁:CR 保障预发环境项目质量codereview通过 质量门禁: 保障预S发O环N境A项R目质量SONAR检查通过 预发平台 应用准入:TC版本校验 TC版本校验:保证中间件路由可用 质量门禁:代码覆盖率 保障预发环境项目质量和上线标准一致 质量门禁:自动化 保障预发环境项目质量接口自动化通过 预发平台-平台使用-环境交付流程 交付流程:通过自动化工作流的方式,进行环境编排,提升使用效率,降低使用成本 环境构建 1.环境注册 2.应用部署 3.环境标识写入 平台使用 1.uid环境绑定 2.变更观测(链路&监控&异常日志) 准入校验 准入校验保证变更质量1.应用准入 2.质量门禁 流量网关构建 1.引流规则(线上域名到预发域名) 2.路由规则(预发域名) PC 插件功能增强 APP uid环境绑定 接口 请求增加路由标识 消息 消息体增加路由标识 一键回退:支持快速回退,通过一键回退机制,能比传统发布回滚,更快降低变更影响 环境下线 域名规则回退 预发环境下线,一键回退完成 染色回退 染色配置最先移除 保证后续流量不再携带染色标识 移除域名规则 保证已有流量不再路由进入预发环境 应用接入数量项目使用发现问题&风险 2024年应用接入数量170+下半年项目使用数86个 通过预发平台验证流程,发现问题和风险13个,降低整体变更风险 17080+10+ 在进行核心流量网关升级时,通过增加预发验证环节,进行uid级别灰度验证,进一步降低变更风险 测试验证 1.测试环境验证 灰度部署 百分比灰度 预发验证1.uid级别验证 2.全链路观测影响 线上部署全量部署 预发平台-典型案例-混沌演练案例 预发平台能力复用:通过使用预发平台机制(流量染色和路由),提高演练有效性的同时,降低演练风险 测试环境 预发环境 线上环境 1.链路可靠性:测试链路可靠性低2.数据可靠性:测试数据可靠性低3.安全性: 测试流量,安全性高 1.链路可靠性:线上链路可靠性高2.数据可靠性:线上数据可靠性高3.安全性: 预发流量,安全性高 1.链路可靠性:线上链路可靠性高2.数据可靠性:线上数据可靠性高3.安全性: 线上流量,安全性偏低 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 04 未来展望 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 未来展望-预发平台数据隔离 预发平台数据隔离:降低预发验证过程中的数据污染风险 未来展望-预发平台质量体系建设 以预发平台为载体,构建预发平台质量体系建设 预案演练 通过使用预发平台,提高预案演练有效性的同时,降低演练风险 自动化测试 通过预发平台真实的链路和数 据进行自动化测试回归,降低变更风险 性能测试 在预发验证流程中,增加自动 化性能测试,保障核心变更后整体链路的性能 GOPS全球运维大会暨研运数智化技术峰会2024·上海站 Thanks 高效运维社区DevOps时代 荣誉出品 GOPS全球运维大会暨研运数智化技术峰会2024·上海站