系统精简之道:如何以极低风险, 高效清理线上无用代码 去哪儿旅行基础架构部/资深研发工程师马阳阳 目录 01背景介绍 背景痛点目标规划 02服务精简 03代码精简 04最终效果 05未来展望 挖掘特征度量特征删除服务挖掘特征度量选型度量方案清理代码 精简成果指标分析效果指标 01背景介绍 为什么去哪儿网会启动系统瘦身项目? 背景 痛点 目标 规划 系统瘦身背景 背景痛点目标规划 业务历史悠久 0102 短周期业务多 2023-7-214 复杂度单调递增04 03人员流动频繁 系统瘦身背景&痛点 背景痛点目标规划 人均应用:5个 人均代码:10w 一年内无变更应用:20%线上方法行覆盖率:40% 效 维护成本高估时误差大开发进度慢率 2023-7-215 下降 系统瘦身目标&挑战 背景痛点目标规划 50%50% 2023-7-216 目标高范围广无参考 系统瘦身时间及组织架构规划 背景痛点目标规划 服务精简代码精简 其他 火车票 门票 酒店 2022.5 2022.7 2022.11 2023-7-217 瘦身公共支撑团队(虚拟) 机票 提出需求获取帮助 通用工具技术支持 系统瘦身两步走 背景痛点目标规划 2023-7-218 能筛选出目标对象准、全、快 筛选模型(方法论) 背景痛点目标规划 挖掘度量收集匹配 特征特征数据特征 2023-7-219 从具体入手明确如何度量自动化 01背景介绍 02服务精简找 得 03代码精简到 04最终效果 05未来展望 背景痛点目标规划 挖掘特征度量特征删除服务删 得 挖掘特征度量选型度量方案清理代码好 指标分析效果指标 02服务精简 如何自动化、低风险地精简服务? 挖掘特征 度量特征 删除服务 可精简服务特征分析 挖掘特征度量特征删除服务 2023-7-2112 删除合并 “找得到” 挖掘特征度量特征删除服务 网关 发布少 没流量 Trace 2023-7-2113 定时 不迭代任务 Config “删得好”–准全快 挖掘特征度量特征删除服务 2023-7-2114 标准化 平台化 自动化 起点计划中 人工确认 待下线 已下线下线中 观察2周 2023-7-2115 OR回收主机回收应用删除完成 03代码精简 如何精准找到线上无流量的方法? 挖掘特征 度量选型 度量方案 清理代码 可精简代码特征分析 挖掘特征度量选型度量方案清理代码 量大 (效果) 通用性 (效率) 未被引用的方法(静态) 没有流量的方法(运行时) 2023-7-2117 重构 “找得到”方案选型 挖掘特征度量选型度量方案清理代码 方案一:AOP 方案二:Agent字节码插桩 编写Agent加载AgentAgent记录日志 上报、存储日志 2023-7-2118 可精简代码集 获取代码全集 取�日志DB “找得到”方案选型 挖掘特征度量选型度量方案清理代码 方案三:基于SA工具 Code 起初执行多次后 1、猜测:有方法执行次数的计数器 2023-7-2119 解释执行编译执行 2、有办法用java代码读到方法计数值吗?ServiceabilityAgent “找得到”方案选型 挖掘特征度量选型度量方案清理代码 2023-7-2120 方案三:基于SA工具 “找得到”方案选型 挖掘特征度量选型度量方案清理代码 2023-7-2121 方案选型 方案 性能损耗 故障风险 实现复杂度 AOP拦截器 高 低 高 Agent字节码插桩 低 中 高 基于SA工具 无 无 低 挖掘特征度量选型度量方案清理代码 SA方案详细设计–性能无损跑数 重启 不接线上流量了 (进程还在) 发布pre_offline下线post_offline完成下线 进行SA跑数 2023-7-2122 下线 2023-7-2123 挖掘特征度量选型度量方案清理代码 SA方案详细设计–跑数代码实 现 Code 起初执行多次后 解释执行编译执行 2023-7-2124 挖掘特征度量选型度量方案清理代码 SA方案详细设计–解释执行方 法 Code 起初执行多次后 解释执行编译执行 2023-7-2125 挖掘特征度量选型度量方案清理代码 SA方案详细设计–编译执行方 法 Code 起初执行多次后 解释执行编译执行 挖掘特征度量选型度量方案清理代码 SA方案详细设计–计算可精简方法集 2023-7-2126 方法集 聚合,取并集有流量 取 差集 法全集 通过Spoon工程方 可精简方法集 2023-7-2127 SA方案业务流程图 挖掘特征度量选型度量方案清理代码 2023-7-2128 挖掘特征度量选型度量方案清理代码 “删得好”-多种手段 全自动手段 半自动手段 “删得好”-最佳实践 挖掘特征度量选型度量方案清理代码 否业务 是否重要 全自动精简 否 是 半自动精简 大仓库 是 重要包 按包路径分重要性 不重要包 2023-7-2129 半自动精简 全自动精简 验证“删得好” 挖掘特征度量选型度量方案清理代码 2023-7-2130 04 0305 0206 0107 04最终效果 代码少了多少?带来了哪些收益? 精简成果 指标分析 效果指标 精简成果 精简成果指标分析效果指标 2023-7-2132 目标回顾 50%50% 达成情况 新人:熟悉成本 效果指标分析 精简成果指标分析效果指标 需求耗时 发布耗时 告警量 环境构建/更新时长 需求估时 编译时长 开发域测试域交付域 2023-7-2133 (CI/CD) 运维域 最终效果 3.02 精简成果指标分析效果指标 270 244 2.69 需求耗时(天) 发布耗时(秒) 179683935021461754080.500505055.% 2023-7-2134 9 7968395306421175408.50005055505% 05展望未来 之后还有哪些方向和技术值得探索? 2023-7-2136 未来展望 Q&A