一、基础概念

1.1 微服务核心问题

将单体应用拆分为一组小型服务后,原本的方法调用变成了网络通信,引入了一系列新问题:

┌─────────────────────────────────────────────────────┐
│  框架        │ Spring Cloud Alibaba / Spring Cloud   │
│  服务治理    │ Sentinel / Resilience4j               │
│  负载均衡    │ Spring Cloud LoadBalancer             │
│  服务监控    │ Prometheus + Grafana / Micrometer     │
│  链路追踪    │ SkyWalking / Zipkin / Jaeger          │
│  容器化部署  │ Docker + Kubernetes                   │
└─────────────────────────────────────────────────────┘

1.2 选型原则

  • 框架锁定后,其余组件尽量跟随框架生态:选了 Spring Cloud Alibaba,治理自然用 Sentinel,配置自然用 Nacos。
  • 关注 Spring Boot 版本兼容矩阵:Spring Boot 3.x 要求 JDK 17,且废弃了 javax 命名空间。选框架前先确定 JDK 版本。
  • 监控和追踪是生产必备:没有监控的微服务等于盲飞,这两个不是"可选增强"而是基础设施。

二、微服务框架

使用广泛度:Spring Cloud Alibaba > Spring Cloud(官方版) > Apache Dubbo

Dubbo 是 RPC 框架,定位与前两者不同——Spring Cloud Alibaba 内部已集成 Dubbo 作为 RPC 方案,三者不是严格互斥关系。


2.1 Spring Cloud Alibaba

定位:阿里开源的 Spring Cloud 实现,整合了 Nacos(注册/配置)、Sentinel(治理)、RocketMQ(消息)、Seata(分布式事务)、Dubbo(RPC),形成生态闭环。国内微服务项目的事实标准。

核心特性

  • 全家桶一站整合,组件间版本兼容矩阵由社区统一维护,降低选型试错成本。
  • 2022.x 起全面转向 Spring Boot 3.x / JDK 17,废弃了 javax 命名空间。

适用场景:国内绝大多数微服务项目,尤其需要中文社区和国内云厂商支持场景。

局限与注意

  • 组件版本必须匹配(参考 Spring Cloud Alibaba 官方版本说明),混用不兼容版本是常见故障来源。
  • 版本说明
SCA 版本Spring CloudSpring BootJDK
2022.x2022.0.x (Kilburn)3.0.x17+
2023.x2023.0.x (Leyton)3.2.x17+
2025.0.x2025.0.x (Northfields)3.5.x17+

2.2 Spring Cloud(官方版)

定位:Spring 官方维护的微服务框架,组件来自国际社区(Netflix Eureka / Resilience4j / Spring Cloud Gateway 等),适合多语言团队或偏好非阿里生态的项目。

核心特性

  • Spring Cloud Gateway(网关)、Spring Cloud LoadBalancer(负载均衡)、Resilience4j(熔断)均为官方首选组件。
  • 2023.0.x(代号 Leyton)对应 Spring Boot 3.2.x~3.3.x,JDK 17+。

适用场景:国际化团队、已使用 Spring 官方生态且不需要阿里全家桶的项目。

局限与注意

  • Eureka 已进入维护模式(仅修 bug,不再新增功能),新项目不推荐。
  • Netflix Ribbon、Hystrix、Zuul 1.x 已被 Spring Cloud 2020.0.0(Ilford)正式移除。
  • 推荐 2023.0.x+。

2.3 Apache Dubbo

定位:高性能 RPC 框架,Spring Cloud Alibaba 中的默认 RPC 方案。在不需要完整微服务框架、只关注服务间高性能调用的场景下可独立使用。

核心特性

  • Triple 协议(gRPC + Protobuf),性能优于 HTTP + JSON。
  • Dubbo 3.x 引入应用级服务发现(注册数据量从 O(N×M) 降为 O(N))。

适用场景:高性能 RPC 场景,或已有 Dubbo 技术栈的团队。也可作为 Spring Cloud Alibaba 内部的 RPC 组件使用。

局限与注意:独立使用 Dubbo 需自行补齐注册中心、配置中心、网关等,成本高于 Spring Cloud Alibaba 全家桶。推荐 3.3+。


三、服务治理(熔断与限流)

使用广泛度:Sentinel > Resilience4j


3.1 Sentinel

定位:阿里开源的流量控制与熔断降级组件,Spring Cloud Alibaba 默认治理方案。

核心特性

  • 三种熔断策略:慢调用比例、异常比例、异常数。
  • 流量控制支持 QPS 和并发线程数两种模式,支持热点参数限流。
  • Dashboard 实时监控,规则动态下发。

适用场景:需要精细流量控制和实时监控的生产环境,国内 Spring Cloud 项目首选。

局限与注意

  • Dashboard 默认不持久化规则(存储在 JVM 内存,重启丢失),生产环境需将规则持久化到 Nacos 等外部数据源。
  • 熔断阈值需通过压测确定,不宜凭经验拍板。
  • 推荐 1.8.8+(适配 Spring Boot 3.x);当前最新 1.8.9。

3.2 Resilience4j

定位:Netflix Hystrix 的官方替代品,Spring Cloud Circuit Breaker 的默认实现之一。

核心特性:函数式轻量设计,提供熔断、限流、重试、隔离舱四个独立模块。

适用场景:需要轻量级容错、不想引入 Dashboard 的项目。

局限与注意

  • 无原生可视化控制台(需 Grafana + Micrometer 自建监控)。
  • 1.7.x 支持 JDK 8;2.0.x+ 要求 JDK 17。(不存在 “2.1.0 切回 JDK 8”——2.x 全线 JDK 17。)
  • 推荐 2.1.0+(当前最新 2.4.0)。

四、负载均衡

使用广泛度:Spring Cloud LoadBalancer > Ribbon(已移除)


4.1 Spring Cloud LoadBalancer

定位:Spring Cloud 官方客户端负载均衡器,自 2020.0.0(Ilford)起替代 Ribbon。

核心特性

  • 响应式模式:通过 WebClient + Reactor Netty 实现异步非阻塞调用;阻塞模式:通过 RestTemplate@LoadBalanced 拦截器实现。LoadBalancer 本身是纯逻辑层(从服务列表中选择实例),不依赖 Netty。
  • 内置轮询(RoundRobin)、随机(Random)算法,支持自定义负载均衡策略。
  • 支持基于 Cookie 的粘性会话(RequestBasedStickySessionServiceInstanceListSupplier)。

适用场景:Spring Cloud 项目的默认负载均衡方案,覆盖所有常见场景。

局限与注意

  • 服务列表更新延迟取决于注册中心(如 Eureka 默认 30 秒拉取间隔、Nacos 通过 gRPC 长连接实时推送,延迟远低于此)。
  • 随 Spring Cloud 版本发布,无需单独指定版本号。

4.2 Ribbon(仅存量维护)

定位:Netflix 早期客户端负载均衡器,已被 Spring Cloud LoadBalancer 替代。

注意:Netflix 于 2018 年宣布 Ribbon 进入维护模式。Spring Cloud 2020.0.0 正式移除 Ribbon。仅适用于存量的 Spring Cloud Netflix 旧项目维护,新项目绝对不要用。


五、服务监控

使用广泛度:Prometheus + Grafana > Micrometer + ELK


5.1 Prometheus + Grafana

定位:业界标准的时序监控 + 可视化方案。Prometheus 采集和存储时序指标,Grafana 提供仪表盘和告警。

核心特性

  • Prometheus 通过 Pull 模式采集指标(应用暴露 /actuator/prometheus 端点),Grafana 对接 Prometheus 数据源渲染大盘。
  • 配合 Micrometer 统一指标门面(spring-boot-starter-actuator + micrometer-registry-prometheus)。

适用场景:中大型微服务集群的指标监控与告警。

局限与注意

  • Prometheus 默认数据保留 15 天,需配置 --storage.tsdb.retention.time 延长。
  • 每服务暴露的指标数建议控制在 50 个以内,避免指标爆炸。
  • 推荐 Prometheus 3.x + Grafana 11.x+(11.x 为当前 LTS 系列;12.x/13.x 为较新短期版本)。

5.2 Micrometer + ELK

定位:Micrometer 统一指标出口,ELK(Elasticsearch + Logstash + Kibana)负责日志聚合与分析,与 Prometheus 侧重不同——前者看日志,后者看指标,互补而非替代。

核心特性:Micrometer 提供统一 API(TimerCounterGauge),支持同时对接 Prometheus 和 ELK 等多个后端。

局限与注意

  • ELK 部署复杂,建议生产环境 3 节点起。
  • 日志需结构化输出(JSON 格式),否则 Kibana 无法高效检索。
  • ELK 8.x 要求 JDK 17+。

六、链路追踪

使用广泛度:SkyWalking > Zipkin > Jaeger


6.1 Apache SkyWalking

定位:国产开源的分布式链路追踪与 APM 系统,Apache 顶级项目。

核心特性

  • Java Agent 字节码增强,零代码侵入。
  • 原生支持 Spring Cloud、Dubbo 等主流微服务框架。
  • 后端存储建议 Elasticsearch。

适用场景:国内微服务项目首选(中文社区活跃、国产化合规)。

局限与注意

  • 社区实践建议 Agent 采样率 10%–50%(全量采样的存储和 CPU 开销大),实际值通过压测确定取性价比最优。
  • 存储周期需配置上限,避免磁盘膨胀。
  • 推荐 Java Agent 9.5.0+(OAP Server 已更新至 10.x 系列)。

6.2 Zipkin

定位:Twitter 开源的轻量级链路追踪系统,Spring Cloud Sleuth 的传统搭档。

核心特性:部署简单(单 jar 启动),与 Brave 集成成熟。

适用场景:轻量级追踪需求、小规模集群。

局限与注意

  • 默认内存存储仅限测试(生产需切换为 Elasticsearch 或 MySQL)。
  • 默认采样率 100% 易导致性能过载,生产环境务必降低。
  • 推荐 3.x(当前最新 3.2.1)。

6.3 Jaeger

定位:Uber 开源的分布式追踪系统,CNCF 毕业项目。

核心特性:兼容 OpenTracing 和 OpenTelemetry 标准。Jaeger v2 基于 OpenTelemetry Collector 框架重构。

注意Jaeger v1 已于 2025 年 12 月 31 日终止生命周期(EOL),新部署应直接使用 v2。推荐 v2.17.0+。


七、容器化部署

使用广泛度:Docker + Kubernetes > Podman + K3s


7.1 Docker + Kubernetes

定位:云原生部署的事实标准。Docker 打包应用为容器镜像,Kubernetes 实现编排、扩缩容、自愈和滚动更新。

核心特性

  • K8s 提供服务发现(Service)、负载均衡(Ingress)、配置管理(ConfigMap/Secret)、存储抽象(PV/PVC)。
  • 声明式部署(YAML 清单),GitOps 友好。

适用场景:中大型微服务集群(10 节点以上)。

局限与注意

  • K8s 学习曲线陡峭,中小团队可从 Docker Compose 起步再迁移。
  • 容器资源(CPU/内存)必须限制(resources.limits),避免单容器耗尽节点资源。
  • 推荐 Docker 28.x+ / Kubernetes 1.32+。

7.2 Podman + K3s

定位:轻量级容器方案。Podman 无守护进程(Rootless 更安全),K3s 是轻量 Kubernetes(打包为单个二进制文件)。

核心特性:K3s 支持 ARM 架构,适合边缘计算和小型集群。

适用场景:边缘计算、CI/CD 测试环境、3–5 节点小型集群、资源受限环境。

局限与注意

  • K3s 适合中小规模集群,大规模场景(数百节点以上)建议评估完整 K8s。
  • Podman 的生态兼容性(Docker Compose 支持)略逊于 Docker。

八、国产化对照

微服务领域的国产化替代路径相对清晰——Spring Cloud Alibaba 全家桶本身就是国产方案。

领域国外方案国产方案说明
微服务框架Spring Cloud(官方版)Spring Cloud Alibaba已适配鲲鹏/飞腾 CPU、麒麟/统信 OS
服务治理Resilience4j / HystrixSentinelSCA 原生,国内项目事实标准
负载均衡RibbonSpring Cloud LoadBalancerSpring 官方组件,开源 License 不受限制
服务监控Prometheus + GrafanaPrometheus + Grafana(开源,无需国产化)Apache 2.0 / AGPL 协议不受信创限制
链路追踪Zipkin / JaegerSkyWalkingApache 顶级项目,国产主导
容器化部署Docker + K8sDocker + K8s(开源,无需国产化)或使用 阿里云 ACK / 华为云 CCE 等国产托管版
应用服务器Tomcat东方通 TongWeb信创项目中常见替代

8.1 迁移注意事项

  1. Spring Cloud Alibaba 版本兼容矩阵是信创项目的核心:Nacos + Sentinel + RocketMQ + Seata + Dubbo 的版本搭配由社区统一维护,建议成套使用。
  2. SkyWalking 是国产 APM 的唯一成熟选择,建议在项目初期就接入,而非事后补监控。
  3. 国产中间件(达梦 DM、人大金仓)需确认 Spring Cloud Alibaba 版本的 JDBC 驱动兼容性。
  4. 容器化层面,Docker 和 Kubernetes 本身是开源项目不受信创限制,但建议使用国产云厂商的托管版(ACK/CCE)以获得国产化合规认证。

更多推荐