从单体到微服务,后端技术栈演进全复盘
几年前我们的系统是一个标准的单体应用一个Spring Boot打成的war包扔进Tomcat连着一个MySQL部署在几台虚拟机上。简单、直接、高效。但业务量涨了十倍团队从5人扩到30人后这个“大泥球”开始让人窒息——改一行代码要全量回归发一次版要停服半小时数据库连接池天天爆满。于是我们踏上了微服务拆分的“不归路”。今天就把这次演进的技术栈变化和踩过的坑完整复盘一遍。单体时代的甜蜜与烦恼单体架构的甜在于开发简单、调用直接、事务好管。但甜头很快被痛苦淹没代码库膨胀到几十万行模块间循环依赖新人上手要三个月每次上线像拆炸弹一个模块的bug能拖垮整个系统更致命的是我们无法针对高并发模块单独扩容只能整体加机器成本飙升。微服务拆分从“大泥球”到“分布式”我们按业务域拆出了用户、订单、商品、支付、库存等八个服务。每个服务独立开发、独立部署、独立数据库。技术栈也随之全面升级服务框架从Spring Boot单体过渡到Spring Cloud Alibaba。Nacos做服务注册发现和配置中心替代了原来的EurekaConfig。网关引入Spring Cloud Gateway统一鉴权、限流、路由前端不再直接调用后端服务。服务调用OpenFeign声明式调用配合Sentinel做熔断降级防止雪崩。数据库每个服务独立MySQL实例通过ShardingSphere分库分表。跨服务查询改用API组合不再用JOIN。消息队列引入RocketMQ处理异步解耦比如订单创建后发消息通知库存扣减和积分增加。链路追踪Sleuth Zipkin后来换成SkyWalking终于能看清一个请求跨了哪些服务、耗时多少。容器化Docker打包K8s编排配合Jenkins Pipeline实现滚动发布。复盘踩过的坑与反思坑一拆分粒度过细。一开始追求“小”把用户拆成注册、登录、信息三个服务结果一个查询要跨三次调用延迟翻倍。后来合并为“用户服务”边界围绕业务能力而非技术分层。坑二分布式事务想得太简单。订单扣库存用Saga补偿结果补偿逻辑比正向还复杂消息重复消费导致库存扣两次。最后改成“本地消息表定时对账”牺牲强一致换可用性。坑三运维复杂度指数级上升。服务从1个变8个日志散落各处排查问题像大海捞针。直到上了ELK和SkyWalking才把可观测性补齐。但K8s的学习曲线让运维团队脱了一层皮。坑四团队组织没跟上。服务拆了但人还是一个大组改一个接口要协调三个服务。后来按服务划分小组每个组6-8人全生命周期负责才算真正落地康威定律。总结没有银弹只有取舍微服务不是目的而是应对“大规模团队协作”和“独立部署”的手段。它带来了弹性、可扩展性和技术异构性但也引入了分布式复杂性、数据一致性和运维成本。如果让我重新选一次我会在业务真正需要时才拆先做好模块化再考虑服务化。技术栈的演进不是越新越好而是越匹配团队能力越好。从单体到微服务我们得到的不仅是架构升级更是对“权衡”二字的深刻理解。

相关新闻

双非 AI 求职备战 总结篇:我的 Agent 全链路学习复盘  踩坑清单

双非 AI 求职备战 总结篇:我的 Agent 全链路学习复盘 踩坑清单

双非AI求职备战 总结篇:我的Agent全链路学习复盘 & 踩坑清单 系列回顾 整个学习链路:手写原生Agent底层 → OpenAI Agents SDK → 手写RAG向量知识库 → LangChain/LangGraph图Agent → Streamlit网页工程化。 从零开始,完成一个完整RA…

2026/10/4 21:07:14 阅读更多 →
EMC整改分水岭:从超标频点反推噪声源头

EMC整改分水岭:从超标频点反推噪声源头

1. 为什么说“从超标频点反推源头”是EMC整改的分水岭?干了十多年硬件设计和EMC整改,我见过太多工程师把EMC测试当成“玄学考试”:样机一送测,辐射发射(RE)曲线像心电图一样满屏毛刺,超标点密密…

2026/10/4 21:07:14 阅读更多 →
西门子AF框架第十五章深度解析:ProDiag诊断数据流与工程转译

西门子AF框架第十五章深度解析:ProDiag诊断数据流与工程转译

1. 这不是简单的“翻译”,而是西门子AF框架第十五章的工程语义解码很多人看到“西门子AF框架翻译”这个标题,第一反应是:找本德英词典,逐句对照,把德文文档翻成中文就完事了。我当年也这么想——直到在TIA Portal V18里…

2026/10/4 21:07:14 阅读更多 →

最新新闻

Trade.dll与TradeX.dll调用避坑指南:通达信程序化交易接口实战

Trade.dll与TradeX.dll调用避坑指南:通达信程序化交易接口实战

简介:面向量化交易与程序化交易开发者的通达信交易接口资料包,整合老版Trade.dll与新一代TradeX.dll行情交易二合一接口,通过TdxTradeServer将交易请求封装为HTTP REST API,解决DLL直连的跨语言调用与远程接入难题,适用…

2026/10/4 21:56:06 阅读更多 →
AI论文网站排行:10款避坑,毕业生真心推荐TaoToken

AI论文网站排行:10款避坑,毕业生真心推荐TaoToken

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 21:56:06 阅读更多 →
内存压力测试实战指南:从工具选型到容器避坑全解析

内存压力测试实战指南:从工具选型到容器避坑全解析

简介:一份内存压力测试工具memtester 4.1.2的源码压缩包,面向Linux系统管理员、运维人员及底层开发者,用于检测服务器或PC内存的稳定性与潜在错误,解决因内存位翻转、数据丢失或内存泄漏导致的系统崩溃、数据损坏等隐患。压缩包仅…

2026/10/4 21:56:06 阅读更多 →
Cursor插件四层架构:解决加载失败与中文支持实战指南

Cursor插件四层架构:解决加载失败与中文支持实战指南

1. 项目概述:从“plugins”标题看Cursor生态的底层逻辑与实操真相“plugins”这个词在Cursor语境下,绝不是简单的一个文件夹名或配置项。它直指当前AI编程工具最核心、也最容易被新手忽略的命脉——可扩展性架构。我用Cursor三年,从最早手动改…

2026/10/4 21:55:05 阅读更多 →
Unity3D嵌入WPF实战:窗口句柄、D3DImage纹理共享与视频流方案选型

Unity3D嵌入WPF实战:窗口句柄、D3DImage纹理共享与视频流方案选型

简介:面向需要在桌面应用中集成三维交互能力的开发者,这份资源围绕Unity3D嵌入WPF的实现流程,提供了从Unity场景设计、工程导出到WPF宿主集成的完整示例,覆盖了WindowsFormsHost控件承载渲染窗口、场景加载,以及Unity与…

2026/10/4 21:55:05 阅读更多 →
代码 Agent 自动处理 GitHub Issue 并生成 PR 的工程实践

代码 Agent 自动处理 GitHub Issue 并生成 PR 的工程实践

1. 为什么我要把 Issue 到 PR 这条链路交给代码 Agent第一次冒出“让代码 Agent 处理 GitHub Issue”这个念头,是因为我实在受够了那种机械重复的搬运工作。团队里每天都有新 Issue 进来,一半是拼写错误、空指针防护、日志格式不统一这类小修小补&#x…

2026/10/4 21:55:05 阅读更多 →

日新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 1:00:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →