公告薛鑫鹏的博客 —— 内容持续更新,欢迎指正。

Spring Boot微服务架构如何实践,长尾疑问词:最佳实践案例

2026-11-09 编程实践 0 阅读

Spring Boot 做微服务,关键不在拆得多细,而在先确认团队撑不撑得住这套运维成本;先用 Nacos、Gateway、OpenFeign 搭出最小闭环,跑通一个非核心业务,比一上来全套组件铺开更能活下来。下面是我从一个单体项目一路拆过来、踩了坑也省了钱的完整记录,包含代码、命令和成本账。

Spring Boot微服务架构和单体架构到底该选哪个

这个问题我被问过太多次,后来发现答案不在技术栈,在团队。

我用的三条判断标准

团队人数
长期少于 5 个后端,单体加模块化足够;超过 10 人还在同
发布频率
一个需求改动要连带回归整站,说明边界已经糊了,这时候拆服务能
故障影响面
订单挂了不能连带商品浏览一起挂,这种隔离诉求是拆分的硬理由。

业内专家指出,微服务的收益主要来自组织协作效率,而不是性能。这句话我最初不信,直到我们把一个日活不大的后台系统拆成七个服务,接口调用链从一跳变成四跳,排查一个超时问题要开五个终端看日志,才彻底服气。

过早拆分的代价,我真实付过

那次拆分失败的原因很具体:数据库还是共享的,七个服务连同一个库,跨库事务靠手写补偿;没有链路追踪,报错只能靠 grep;发布脚本各写各的。最后我们把其中四个服务又合了回去。

对比项 单体(模块化) 微服务
本地启动 一条命令,十几秒 需先起注册中心、网关,两三分钟
联调成本 低,改完即生效 需处理服务发现、版本兼容
独立发布 难,牵一发动全身 易,按服务灰度
故障隔离 弱 强,可熔断降级
运维门槛 低 高,需监控与追踪配套

从单体到微服务:我的拆分实操路径

先把业务边界理清,别按技术分层切

最省事的做法是打开原来的包结构。如果 controller、service、mapper 下面全是按技术分的目录,说明边界还没浮现,先按业务能力重排一遍:用户、商品、订单、支付,各自一个模块,模块间只允许通过接口调用。这一步做完,往往能发现有些模块其实根本不需要独立成服务。

搭一套最小可用的基础组件

我的选择是 Spring Boot 3.2 + Spring Cloud 2023.0.x + Spring Cloud Alibaba 2023.0.1.0,JDK 17。注册配置中心用 Nacos,网关用 Spring Cloud Gateway,服务调用用 OpenFeign。先只上这四个,Sentinel 和 Seata 等真有流量和事务问题再加。


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-discovery


    com.alibaba.cloud
    spring-cloud-starter-alibaba-nacos-config


    org.springframework.cloud
    spring-cloud-starter-openfeign

本地起 Nacos 一条命令就够,单机模式足够开发用:

docker run -d --name nacos -e MODE=standalone 
  -p 8848:8848 -p 9848:9848 nacos/nacos-server:v2.3.2

控制台默认地址 http://localhost:8848/nacos,账号密码都是 nacos。Spring Boot 2.4 之后不能再靠 bootstrap.yml 拉配置,配置文件里直接写:

spring:
  application:
    name: order-service
  config:
    import: optional:nacos:order-service.yaml
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类加 @EnableFeignClients,Feign 接口上写 @FeignClient(name = "user-service"),服务名就是注册到 Nacos 的 application name,改端口不影响调用。

数据怎么切,这一步最容易翻车

我的顺序是:先按服务拆表但仍在同一个库,禁止跨服务的表关联查询;再逐个服务迁到独立库;最后处理分布式事务。跨服务查询改用接口聚合,能接受短暂不一致的场景用事件驱动,订单创建后发消息,库存异步扣减。分布式事务别急着上 Seata AT 模式,先确认业务是否真需要强一致——大部分电商场景最终一致就够了。

中小团队做Spring Boot微服务架构要花多少钱

这部分是我记账记出来的,给准备立项的同学一个参照。

服务器和中间件的钱

入门配置的云服务器,2 核 4G 月费通常在几十到一百多元区间;Nacos 生产环境建议三节点集群,Sentinel 控制台和网关可以共用一个节点。整套跑起来,五六台入门机器能覆盖日均几万请求的量级,具体看你的接口耗时。数据库和 Redis 用云厂商托管版本,比自己维护省事得多,价格换时间,这笔账小团队算得过来。

真正的大头是人和时间

据行业公开讨论的普遍反馈,一个熟悉 Spring Boot 的后端,从单体思路转到能独立负责微服务模块,通常需要几个月的高强度实践。这段时间的产出折损、沟通成本、线上问题排查耗时,比服务器账单高一个数量级。

几个省钱的做法

  • 不自建 Kubernetes。服务数量在十个以内,Docker Compose 加一台跳板机足够,K8s 的学习曲线会吃掉你所有时间。
  • 可观测性先用 Prometheus 加 Grafana,接入 micrometer-registry-prometheus 和 actuator,暴露 /actuator/prometheus 就能出图。
  • 日志用 Loki 而不是上来就搭 ELK,存储和运维成本差得明显。
  • 链路追踪用 SkyWalking,启动参数挂 -javaagent:skywalking-agent.jar 即可,不用改代码。

Spring Boot微服务架构学习路线怎么走

我带过几个应届生,按下面这条线走,两三个月能独立接一个小服务。

第一阶段:把单体写扎实

  1. Spring Boot 自动配置原理,能手写一个 starter。
  2. MyBatis-Plus 或 JPA 熟练,会看执行计划。
  3. 接口幂等、超时重试、参数校验这些基本功。

第二阶段:拆与通信

  1. Nacos 注册与配置,理解心跳和服务列表推送。
  2. OpenFeign 的超时、重试、降级配置,别用默认值上线。
  3. Gateway 的路由、断言、过滤器,鉴权放在网关做。
  4. Sentinel 的流控和熔断规则,先配 QPS 阈值再谈集群流控。

第三阶段:能运维才算会

  1. Docker 打包,多阶段构建把镜像压到 200MB 以内。
  2. Prometheus 指标、Grafana 看板、告警规则。
  3. 滚动发布和回滚脚本,出问题十分钟内能退回上一版。

行业共识认为,微服务能力的分水岭不在会不会写 Feign 调用,而在出了问题能不能定位。所以第三阶段不要跳。

关于Spring Boot微服务架构的常见疑问

服务拆到多细算合适?

我的经验是:一个服务对应一个能独立发布、独立负责数据、由一到两个人长期维护的业务单元。如果一个需求改动平均要动三个以上服务,说明拆过头了;如果两个服务的数据表天天要联表查,说明没拆干净。

小团队不拆微服务会不会落后?

不会。单体加清晰的模块边界,配上容器化和自动化部署,完全能支撑相当规模的业务。拆分是手段不是目标,很多团队是在业务和人数都涨上来之后才被动拆的。

Spring Boot微服务架构在本地怎么快速跑起来?

三个动作:Docker 起一个 Nacos 单机版;各服务配置 spring.config.import 指向它;网关路由按服务名转发而不是写死 IP。跑通之后再加 Sentinel 和 SkyWalking,一步步来,中间件一次性堆齐反而调不通。

推荐阅读

RELATED
重庆通星亿科技有限公司 渝ICP备2026025661号-3