
作者:全栈架构师 阅读时长:5 分钟 适合人群:技术负责人、架构师、3-5 年经验工程师
上周有个创业公司的 CTO 找到我,说他们遇到了大麻烦。
"我们听了某大厂的分享,说微服务是趋势,就把系统拆成了 20 多个微服务。结果现在运维成本飙升,一个问题要查半天,团队天天救火,怎么办?"
我问他:"你们现在多少用户?团队多少人?"
"日活 5000,开发团队 8 个人。"
我当时就无语了。这是典型的为了技术而技术,被微服务害了。
今天我就来聊聊,什么时候应该用单体架构,什么时候必须上微服务。
先上对比图:


单体架构:
✅ 优势:
- 本地启动就能开发,调试方便
- 模块间调用是方法调用,简单直接
- 代码重构容易,IDE 支持好
❌ 劣势:
- 代码耦合度高,牵一发而动全身
- 多人协作容易冲突
- 编译时间长(项目大时)微服务架构:
✅ 优势:
- 各服务独立开发,互不干扰
- 可以按业务域划分团队
- 不同服务可以用不同技术栈
❌ 劣势:
- 本地启动多个服务,资源占用高
- 跨服务调试困难(需要链路追踪)
- 接口联调成本高结论:10 人以下团队,单体架构开发效率更高。
单体架构:
✅ 优势:
- 一次部署搞定整个系统
- 只需要一个服务器(初期)
- 监控简单,日志集中
❌ 劣势:
- 部署风险大(一个 bug 全站挂)
- 无法按需扩容
- 回滚成本高微服务架构:
✅ 优势:
- 独立部署,快速迭代
- 按需扩容(如订单服务压力大就单独扩)
- 故障隔离(一个服务挂了不影响其他)
❌ 劣势:
- 需要完善的 DevOps 体系
- 容器编排复杂(K8s 学习成本高)
- 监控、日志、链路追踪都要配套结论:没有专职运维团队,慎选微服务。
单体架构:
✅ 优势:
- 模块间调用是内存级别,速度快
- 没有网络开销
- 数据库事务容易保证
❌ 劣势:
- 性能瓶颈难以突破
- 无法针对性优化微服务架构:
✅ 优势:
- 可以针对热点服务单独优化
- 支持弹性伸缩
- 可以做读写分离、分库分表
❌ 劣势:
- 网络调用增加延迟(每次 10-50ms)
- 分布式事务复杂
- 需要考虑幂等性、重试机制数据对比:
同样的用户查询接口: •单体架构:平均响应时间 50ms•微服务架构:平均响应时间 150ms(增加了 3 倍网络调用)
结论:QPS < 5000 时,单体架构性能更好。
单体架构:
技术栈:
├─ Spring Boot(Web 框架)
├─ MyBatis(ORM)
├─ MySQL(数据库)
└─ Redis(缓存)
团队要求:
- 掌握 Java Web 开发即可
- 新人 1 周就能上手微服务架构:
技术栈:
├─ Spring Cloud Alibaba(微服务全家桶)
│ ├─ Nacos(注册中心 + 配置中心)
│ ├─ Sentinel(限流降级)
│ ├─ Seata(分布式事务)
│ └─ Gateway(网关)
├─ Docker + K8s(容器编排)
├─ SkyWalking(链路追踪)
├─ ELK(日志收集)
└─ Prometheus + Grafana(监控告警)
团队要求:
- 需要专门的中间件团队
- 新人至少 1 个月才能熟悉结论:微服务的门槛比你想的高得多。
单体架构(以日活 1 万为例):
服务器成本:
- 应用服务器:2 台 × 2000 元/月 = 4000 元
- 数据库:1 台 × 3000 元/月 = 3000 元
- 缓存:1 台 × 1000 元/月 = 1000 元
总计:8000 元/月
人力成本:
- 后端开发:3 人
- 前端开发:2 人
- 测试:1 人
- 运维:兼职
总计:7 人团队微服务架构(同等规模):
服务器成本:
- 应用服务器:10 台 × 2000 元/月 = 20000 元
- 数据库:3 台 × 3000 元/月 = 9000 元
- 中间件集群:5 台 × 2000 元/月 = 10000 元
- 监控日志:2 台 × 2000 元/月 = 4000 元
总计:43000 元/月(是单体的 5 倍)
人力成本:
- 后端开发:6 人(每个服务至少 1 人)
- 前端开发:3 人
- 测试:3 人
- 运维:2 人(必须专职)
- 架构师:1 人
总计:15 人团队(是单体的 2 倍)
结论:微服务的成本远超你的想象。
单体架构:
扩展方式:
- 垂直扩展:升级服务器配置(有上限)
- 水平扩展:多实例 + 负载均衡
限制:
- 代码耦合,难以按需扩展
- 数据库是瓶颈(需要分库分表)微服务架构:
扩展方式:
- 按服务扩展(订单服务压力大就单独加机器)
- 按业务扩展(新业务快速独立)
- 按地域扩展(多机房部署)
优势:
- 弹性伸缩,成本优化
- 支持千万级用户结论:只有高并发场景,微服务的价值才能体现。
如果你的系统出现以下信号,说明该上微服务了:
典型症状:
•数据库 CPU 常年 80%+•单个接口响应时间 > 2 秒•高峰期系统频繁崩溃
解决方案:
第一步:数据库拆分
├─ 读写分离(主从架构)
├─ 分库分表(按用户/订单拆分)
└─ 引入缓存(Redis)
第二步:服务拆分
├─ 用户服务独立
├─ 订单服务独立
├─ 支付服务独立
└─ 商品服务独立
第三步:弹性伸缩
├─ 热点服务单独扩容
├─ 自动伸缩策略
└─ 负载均衡典型症状:
•10 个人开发一个项目,每天大量代码冲突•改一个功能,需要协调 3 个团队•发布频率低(一个月才发一次版)
解决方案:
按业务域划分团队:
├─ 用户团队(负责用户服务)
├─ 订单团队(负责订单服务)
├─ 支付团队(负责支付服务)
└─ 搜索团队(负责搜索服务)
每个团队:
- 独立开发、测试、部署
- 通过 API 契约协作
- 快速迭代(每周发布)典型症状:
•公司开展新业务,但老系统改动风险大•不同业务线技术栈需求不同•需要快速上线验证商业模式
解决方案:
新业务独立成服务:
- 不影响老系统
- 可以选择合适的技术栈
- 快速迭代,快速试错
- 失败了关停成本低特征:
•团队 < 10 人•日活 < 1 万•资金有限
建议:
活下去才是王道。把精力放在产品验证和业务增长上,不要过早优化架构。
案例:
拼多多早期也是单体架构,直到用户量爆发后才逐步拆分。架构是为业务服务的。
特征:
•用户量少(公司内部员工)•并发低•业务逻辑复杂
建议:
内部系统追求的是开发效率和可维护性,单体架构更合适。实在扛不住了再考虑拆分。
特征:
•快速验证商业模式•可能随时砍掉•预算有限
建议:
MVP 的核心是快,2-4 周就要上线。用单体架构最快,甚至可以无服务器架构(Serverless)。
特征:
•技术团队薄弱•运维能力不足•稳定性要求高
建议:
传统企业的 IT 团队可能连 Docker 都没用过,强行上微服务就是灾难。适合的才是最好的。
特征:
•日活 < 5 万•QPS < 3000•团队 < 20 人
建议:
这个规模,单体架构 + 合理的缓存策略完全够用。可以把精力放在业务创新上,而不是架构复杂度上。
用户规模:0 - 1 万日活 团队规模:< 10 人 技术栈:Spring Boot + MySQL + Redis
核心任务:
•快速验证商业模式•积累用户和数据•打磨产品体验
用户规模:1 万 - 10 万日活 团队规模:10 - 30 人 技术栈:在阶段 1 基础上 + 消息队列
优化方向:
1. 代码层面模块化
├─ 清晰的包结构
├─ 模块间通过接口通信
└─ 避免循环依赖
2. 数据库优化
├─ 读写分离
├─ 热点数据缓存
└─ 慢查询优化
3. 部署优化
├─ 多实例部署
├─ 负载均衡
└─ 自动化部署用户规模:10 万 + 日活 团队规模:30 人 + 技术栈:Spring Cloud + Docker + K8s
拆分原则:
1. 按业务域拆分
├─ 用户服务
├─ 订单服务
├─ 支付服务
└─ 商品服务
2. 渐进式迁移
├─ 先拆边缘业务(如消息通知)
├─ 再拆核心业务(如订单)
└─ 保持双轨运行,逐步切换
3. 配套体系建设
├─ 监控告警
├─ 链路追踪
├─ 日志收集
└─ CI/CD流水线最后,我想强调一个核心观点:
合适的架构才是最好的,不要为了技术而技术
判断是否需要微服务,问自己 3 个问题:
1. 我的团队能驾驭微服务的复杂度吗?
2. 我的业务真的需要微服务吗?
3. 微服务带来的收益大于成本吗?如果答案是否定的,请老老实实用单体架构。
记住这句话:
架构是演进出来的,不是规划出来的
好的架构是长出来的,不是设计出来的。
💬 留言区见:
1.你现在的项目用的是单体还是微服务?为什么?2.你在微服务转型中遇到过哪些坑?3.这篇文章对你有启发吗?
关于作者
全栈架构师,10年技术从业经验,现任某互联网公司技术负责人。擅长 Spring Boot、Vue3、微服务架构。致力于分享实战干货,帮助更多工程师快速成长。
本文原创,转载请注明出处 如果觉得有用,请点个"在看"支持一下