架构与设计演化:大型系统不停机现代化改造路径
2026 C 及系统软件技术大会 · 议题前瞻演讲嘉宾Michael Wong奇点智能研究院首席科学家、C标准委员会机器学习组主席、吴咏炜奇点智能研究院首席技术咨询师、李华圣字节跳动性能优化工程师大会时间2026年11月20-21日 · 北京万达文华酒店一、现代化改造的驱动力为什么不能停下来重构大型系统数据库、操作系统、编译器、分布式存储的现代化改造面临不能停的硬约束金融系统停机 1 分钟 数百万损失电商平台大促期间零停机是底线云服务SLA 承诺 99.99% 可用性年停机时间 52 分钟嵌入式系统设备部署后无法远程升级或升级成本极高核心挑战如何在持续服务的前提下完成技术债务清偿、架构现代化、性能优化二、技术债务识别从凭感觉到数据驱动2.1 技术债务的多维度量吴咏炜在系统咨询中提出的技术债务五维模型维度度量指标工具健康阈值代码债务圈复杂度、重复代码率、注释覆盖率SonarQube、CodeClimate圈复杂度 10架构债务模块耦合度、循环依赖数、接口稳定性Structure101、ArchUnit循环依赖 0测试债务测试覆盖率、 flaky test 比例、测试执行时间JaCoCo、pytest覆盖率 80%文档债务API 文档完整度、架构决策记录ADR数Swagger、ArchbeeAPI 文档 100%运维债务部署频率、回滚时间、故障恢复时间Prometheus、PagerDuty回滚 5 分钟2.2 代码级债务检测// 技术债务检测示例圈复杂度计算classCyclomaticComplexityAnalyzer{public:intcalculate(constFunctionDeclfunc){intcomplexity1;// 基础路径// 遍历 AST统计决策点for(constautostmt:func.body()){if(isaIfStmt(stmt)||isaWhileStmt(stmt)||isaForStmt(stmt)||isaCaseStmt(stmt)||isaConditionalOperator(stmt)){complexity;}// 短路逻辑运算符if(isaBinaryOperator(stmt)){auto*binOpcastBinaryOperator(stmt);if(binOp-isLogicalOp()){complexity;}}}returncomplexity;}DebtSeverityclassify(intcomplexity){if(complexity10)returnDebtSeverity::LOW;if(complexity20)returnDebtSeverity::MEDIUM;if(complexity50)returnDebtSeverity::HIGH;returnDebtSeverity::CRITICAL;}};2.3 架构级债务检测# 架构依赖分析检测循环依赖和模块耦合importnetworkxasnxfromcollectionsimportdefaultdictclassArchitectureDebtAnalyzer:def__init__(self,source_dir):self.dependency_graphnx.DiGraph()self.module_mapdefaultdict(set)defanalyze(self):# 1. 构建模块依赖图forfileinself.scan_source_files():moduleself.get_module(file)forincludeinself.extract_includes(file):dep_moduleself.get_module_from_include(include)ifmodule!dep_module:self.dependency_graph.add_edge(module,dep_module)# 2. 检测循环依赖cycleslist(nx.simple_cycles(self.dependency_graph))# 3. 计算模块耦合度coupling{}formoduleinself.dependency_graph.nodes():fan_inself.dependency_graph.in_degree(module)fan_outself.dependency_graph.out_degree(module)coupling[module]fan_infan_outreturn{cycles:cycles,coupling:coupling,total_modules:len(self.dependency_graph.nodes()),total_edges:len(self.dependency_graph.edges()),}defgenerate_remediation_plan(self,max_cycles0,max_coupling10):生成技术债务清偿计划analysisself.analyze()plan[]# 优先处理循环依赖forcycleinanalysis[cycles]:plan.append({type:break_cycle,modules:cycle,effort:len(cycle)*3,# 每个模块 3 人天priority:CRITICAL})# 处理高耦合模块formodule,couplinginanalysis[coupling].items():ifcouplingmax_coupling:plan.append({type:reduce_coupling,module:module,current_coupling:coupling,target_coupling:max_coupling,effort:(coupling-max_coupling)*2,priority:HIGH})returnsorted(plan,keylambdax:x[priority])三、模块化拆分策略从大泥球到微内核3.1 拆分原则Michael Wong 的三边界法则法则一按变更频率拆分高频变更的模块业务逻辑与低频变更的模块基础设施分离减少变更影响范围。法则二按稳定性拆分稳定接口已发布 API与不稳定实现分离保护外部依赖者。法则三按团队边界拆分模块边界与团队边界对齐减少跨团队协调成本。3.2 拆分模式绞杀者模式Strangler Fig Pattern阶段一识别边界 ┌─────────────────────────────────────────┐ │ 遗留单体系统 │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 用户模块 │ │ 订单模块 │ │ 支付模块 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 库存模块 │ │ 物流模块 │ │ 报表模块 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────┘ 阶段二建立 facade ┌─────────────────────────────────────────┐ │ API Gateway │ │ ┌─────────────────────────────────────┐│ │ │ 遗留单体系统 ││ │ │ ┌─────────┐ ┌─────────┐ ... ││ │ │ │ 用户模块 │ │ 订单模块 │ ││ │ │ └─────────┘ └─────────┘ ││ │ └─────────────────────────────────────┘│ └─────────────────────────────────────────┘ 阶段三逐个替换 ┌─────────────────────────────────────────┐ │ API Gateway │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 新用户 │ │ 新订单 │ │ 遗留支付 │ │ │ │ 服务 │ │ 服务 │ │ 模块 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 遗留库存 │ │ 遗留物流 │ │ 遗留报表 │ │ │ │ 模块 │ │ 模块 │ │ 模块 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────┘ 阶段四完成替换 ┌─────────────────────────────────────────┐ │ API Gateway │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 新用户 │ │ 新订单 │ │ 新支付 │ │ │ │ 服务 │ │ 服务 │ │ 服务 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ 新库存 │ │ 新物流 │ │ 新报表 │ │ │ │ 服务 │ │ 服务 │ │ 服务 │ │ │ └─────────┘ └─────────┘ └─────────┘ │ └─────────────────────────────────────────┘3.3 接口稳定性保证// 接口稳定性设计版本化 API 向后兼容// v1 接口已发布不可修改namespaceapi_v1{structUserInfo{std::string id;std::string name;std::string email;};// 已发布的 API签名不可变更UserInfoget_user(conststd::stringuser_id);voidupdate_user(conststd::stringuser_id,constUserInfoinfo);}// v2 接口新增字段向后兼容namespaceapi_v2{structUserInfo:api_v1::UserInfo{// 新增字段不影响 v1 布局std::optionalstd::stringphone;std::optionalstd::stringavatar_url;};// 新增 APIUserInfoget_user_v2(conststd::stringuser_id);// 旧 API 保留内部转发到 v2inlineapi_v1::UserInfoget_user(conststd::stringuser_id){autov2_infoget_user_v2(user_id);returnstatic_castapi_v1::UserInfo(v2_info);// 切片安全}}// 适配器模式内部实现替换不影响外部接口classUserServiceAdapter{std::unique_ptrUserServiceImplimpl_;public:// 接口稳定内部实现可替换api_v1::UserInfoget_user(conststd::stringuser_id){returnimpl_-get_user(user_id);}// 运行时切换实现A/B 测试、灰度发布voidset_impl(std::unique_ptrUserServiceImplnew_impl){impl_std::move(new_impl);}};四、依赖管理从依赖地狱到可控依赖4.1 依赖管理策略策略描述适用场景风险版本锁定精确锁定依赖版本生产环境安全补丁延迟语义化版本允许兼容版本自动升级开发环境破坏性变更漏入供应商化将依赖源码纳入项目关键依赖维护成本增加抽象隔离通过接口隔离依赖可能变更的依赖接口设计成本4.2 依赖健康度检查# 依赖健康度分析classDependencyHealthChecker:defcheck_health(self,dependency):checks{maintenance:self.check_maintenance(dependency),security:self.check_security(dependency),compatibility:self.check_compatibility(dependency),license:self.check_license(dependency),}# 综合评分scoresum(checks.values())/len(checks)return{dependency:dependency.name,version:dependency.version,health_score:score,checks:checks,recommendation:self.generate_recommendation(score,checks)}defcheck_maintenance(self,dep):检查维护活跃度last_commitdep.repo.last_commit_date days_since_commit(datetime.now()-last_commit).daysifdays_since_commit30:return1.0ifdays_since_commit90:return0.8ifdays_since_commit365:return0.5return0.2# 超过一年未更新defcheck_security(self,dep):检查安全漏洞vulnsdep.security_advisories critical_vulns[vforvinvulnsifv.severityCRITICAL]ifnotvulns:return1.0ifnotcritical_vulns:return0.7return0.3# 存在关键漏洞defgenerate_recommendation(self,score,checks):ifscore0.5:returnURGENT: Consider replacing this dependencyifchecks[security]0.5:returnHIGH: Update to fix security vulnerabilitiesifchecks[maintenance]0.5:returnMEDIUM: Monitor for alternative solutionsreturnLOW: Dependency is healthy五、可测试性设计改造的前提条件5.1 测试金字塔在系统软件中的应用/\ / \ / E2E \ 端到端测试少而精 /─────────\ 比例5% / \ / Integration \ 集成测试模块交互 /──────────────────\ 比例15% / \ / Unit Tests \ 单元测试核心逻辑 /──────────────────────────\ 比例80% / \5.2 依赖注入与测试替身// 可测试性设计依赖注入 接口抽象// 抽象接口稳定classIStorage{public:virtual~IStorage()default;virtualstd::vectoruint8_tread(conststd::stringkey)0;virtualvoidwrite(conststd::stringkey,conststd::vectoruint8_tdata)0;};// 生产实现classS3Storage:publicIStorage{Aws::S3::S3Client client_;public:std::vectoruint8_tread(conststd::stringkey)override{// 真实的 S3 读取autooutcomeclient_.GetObject(...);returnextract_data(outcome);}voidwrite(conststd::stringkey,conststd::vectoruint8_tdata)override{client_.PutObject(...);}};// 测试替身内存实现快速、确定性classInMemoryStorage:publicIStorage{std::unordered_mapstd::string,std::vectoruint8_tdata_;public:std::vectoruint8_tread(conststd::stringkey)override{autoitdata_.find(key);if(itdata_.end())throwstd::runtime_error(Key not found);returnit-second;}voidwrite(conststd::stringkey,conststd::vectoruint8_tdata)override{data_[key]data;}// 测试辅助方法voidclear(){data_.clear();}size_tsize()const{returndata_.size();}};// 业务逻辑不依赖具体存储实现classDataProcessor{std::shared_ptrIStoragestorage_;public:explicitDataProcessor(std::shared_ptrIStoragestorage):storage_(std::move(storage)){}std::vectoruint8_tprocess(conststd::stringkey){autodatastorage_-read(key);// ... 处理逻辑returntransform(data);}};// 测试代码TEST(DataProcessorTest,BasicProcessing){autostoragestd::make_sharedInMemoryStorage();storage-write(test_key,{1,2,3,4,5});DataProcessorprocessor(storage);autoresultprocessor.process(test_key);EXPECT_EQ(result.size(),5);EXPECT_EQ(result[0],1);}六、实战案例字节跳动的存储系统现代化改造6.1 背景李华圣参与的字节跳动存储系统现代化项目遗留系统10 年历史200 万行 C 代码单体架构核心问题编译时间 45 分钟、测试覆盖率 35%、模块循环依赖 12 个业务约束日均 10 亿次请求停机时间 5 分钟/月6.2 改造路径阶段时间动作成果1. 度量2 周技术债务五维评估识别 47 个高优先级债务点2. 隔离4 周建立 API Gateway识别模块边界6 个模块边界清晰3. 抽取8 周绞杀者模式逐个替换用户模块独立部署4. 优化6 周编译优化、测试补强编译时间降至 8 分钟5. 验证4 周灰度发布、回滚演练零停机完成切换6.3 关键经验经验一先度量再动手没有数据支撑的重构是拍脑袋。技术债务五维模型让团队对现状有共识。经验二接口是第一生产力好的接口设计让后续替换实现变得简单。前期在接口设计上投入 2 周节省后续 2 个月。经验三测试是改造的保险绳改造前测试覆盖率 35%改造中每替换一个模块就要求覆盖率 80%。测试让团队敢于动手。经验四灰度发布是零停机的关键不是一次性切换而是逐步引流。1% → 5% → 20% → 100%每个阶段观察 24 小时。七、参会建议角色重点关注推荐演讲系统架构师技术债务度量、模块化拆分、接口设计Michael Wong研发工程师依赖管理、可测试性设计、绞杀者模式吴咏炜性能工程师编译优化、灰度发布、回滚策略李华圣技术决策者改造投入产出比、风险评估三场都建议参加八、延伸阅读与资料Michael WongC 模块化Modules标准演进与工程实践吴咏炜大型系统现代化改造技术债务评估方法论李华圣字节跳动存储系统零停机改造案例大会官网https://cpp-summit.org2026 C 及系统软件技术大会2026年11月20-21日 · 北京万达文华酒店22 位确认嘉宾 · 18 大前沿议题 · 1000 行业精英立即报名 →

相关新闻

内存安全是伪命题?从机制落地看安全策略的工程价值

内存安全是伪命题?从机制落地看安全策略的工程价值

这次标题是一个有点挑衅的说法:Memory Safety Is a Useless Concept。先别急着站队,把这句话放到工程语境里读,它想说的其实不是“内存安全不需要”,而是“内存安全这个概念如果只是被当成口号,不能落地成防御机制&…

2026/8/27 6:46:32 阅读更多 →
Keyviz 一篇吃透:键鼠可视化设置与实战全覆盖

Keyviz 一篇吃透:键鼠可视化设置与实战全覆盖

Keyviz 一篇吃透:键鼠可视化设置与实战全覆盖 【免费下载链接】keyviz Keyviz is a free and open-source tool to visualize your keystrokes ⌨️ and 🖱️ mouse actions in real-time. 项目地址: https://gitcode.com/gh_mirrors/ke/keyviz K…

2026/8/27 6:46:32 阅读更多 →
51单片机实现高精度DDS信号发生器

51单片机实现高精度DDS信号发生器

1. 这不是“做出来就行”的毕业设计:51单片机DDS信号发生器的真实价值锚点你手头这份毕业设计题目——“基于51单片机DDS信号发生器的设计”,表面看是个再普通不过的嵌入式课程作业。但如果你真把它当成“照着郭天祥例程改改参数、烧进普中开发板、调出个…

2026/8/27 6:46:32 阅读更多 →

最新新闻

AI大厨技术拆解:从感知决策到执行反馈的完整数据闭环

AI大厨技术拆解:从感知决策到执行反馈的完整数据闭环

3分钟出餐、30秒一杯咖啡,这句话现在经常出现在智慧餐饮的落地报告和项目验收PPT里。如果只看结果,很多人会把它当成营销辞令;但从技术角度看,这个指标背后并不是某个单点算法多厉害,而是一条完整的“感知-决策-执行-反…

2026/8/27 7:38:55 阅读更多 →
悲观地乐观:AI本地部署与模型推理的工程实践指南

悲观地乐观:AI本地部署与模型推理的工程实践指南

“Pessimistically optimistic”,直译过来是“悲观地乐观”。放到 AI 工程和本地部署场景里,它可以被理解成一套非常实用的工作方式:先把所有可能出问题的点想一遍,然后用一个最小可运行例子去验证,最后再一步步扩展能…

2026/8/27 7:38:55 阅读更多 →
AI大厨落地指南:从后厨数字化到3分钟出餐的系统拆解

AI大厨落地指南:从后厨数字化到3分钟出餐的系统拆解

AI大厨不是某台单独的机器,而是一整套把后厨流程数字化、自动化、可量化的系统。这个标题里最值得关注的不是“3分钟”和“30秒”这两个数字,而是数字背后代表的判断逻辑:出餐链路被拆成了可执行模块,设备之间能协同,订…

2026/8/27 7:38:55 阅读更多 →
黑体辐射定律工程实操:5个作业高频错误与避坑指南

黑体辐射定律工程实操:5个作业高频错误与避坑指南

1. 这不是“抄作业”,而是用黑体辐射定律真正看懂热是怎么“飞”出去的 你手头这份《传热学小作业(黑体热辐射定律)》,表面看是工科生期末前赶的一份计算题集,但背后藏着一个被日常忽略却无处不在的物理真相&#xff1…

2026/8/27 7:38:55 阅读更多 →
AI大厨系统实战:计算机视觉与边缘计算构建智能后厨

AI大厨系统实战:计算机视觉与边缘计算构建智能后厨

“明厨亮灶”的玻璃窗后面,现在不只是几位厨师在忙。机械臂在翻转炒锅,视觉摄像头盯着食材颜色,云端模型在计算最佳火候,店长手机上的大屏显示着实时出餐数据——这种场景正在从概念宣传片变成越来越多餐饮后厨的常态。文章标题里…

2026/8/27 7:38:55 阅读更多 →
Coding Agent Token 优化实战:36次工具调用如何省一半消耗

Coding Agent Token 优化实战:36次工具调用如何省一半消耗

这次我们看一个非常实操的问题:同样的 36 次工具调用,能不能把 Token 消耗砍掉一半? 跑过 AI Coding Agent 的人都有这种经验:任务本身不复杂,就是让 Agent 读取代码、定位问题、改文件、跑测试、再来一轮。可每次打开…

2026/8/27 7:37:55 阅读更多 →

日新闻

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

Go语言构建企业级AI服务网关:统一管理英伟达等AI接口调用

1. 项目概述:从零构建一个企业级的AI服务网关 最近在帮一个做内容审核的团队做技术架构升级,他们原来的业务里,每天有几十万张图片和短视频需要过审,最初是接了几个开源的AI模型自己部署,但效果和性能一直不太稳定。后…

2026/8/27 0:00:51 阅读更多 →
网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址

网盘直链下载助手5分钟解析八大网盘真实地址 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天翼云盘 / 迅雷云盘 / 夸…

2026/8/27 1:06:27 阅读更多 →
从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南

从零点亮 ESP32:Arduino ESP32 开发环境搭建与首次烧录完整指南 【免费下载链接】arduino-esp32 Arduino core for the ESP32 family of SoCs 项目地址: https://gitcode.com/GitHub_Trending/ar/arduino-esp32 Arduino ESP32 是乐鑫官方的 ESP32 系列 Ardui…

2026/8/27 1:06:27 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/26 14:45:33 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/26 17:46:43 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/26 14:46:37 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/26 17:46:39 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →