Java后端常用技术选型 |(四)微服务篇
一、基础概念
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 Cloud | Spring Boot | JDK |
|---|---|---|---|
| 2022.x | 2022.0.x (Kilburn) | 3.0.x | 17+ |
| 2023.x | 2023.0.x (Leyton) | 3.2.x | 17+ |
| 2025.0.x | 2025.0.x (Northfields) | 3.5.x | 17+ |
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(Timer、Counter、Gauge),支持同时对接 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 / Hystrix | Sentinel | SCA 原生,国内项目事实标准 |
| 负载均衡 | Ribbon | Spring Cloud LoadBalancer | Spring 官方组件,开源 License 不受限制 |
| 服务监控 | Prometheus + Grafana | Prometheus + Grafana(开源,无需国产化) | Apache 2.0 / AGPL 协议不受信创限制 |
| 链路追踪 | Zipkin / Jaeger | SkyWalking | Apache 顶级项目,国产主导 |
| 容器化部署 | Docker + K8s | Docker + K8s(开源,无需国产化) | 或使用 阿里云 ACK / 华为云 CCE 等国产托管版 |
| 应用服务器 | Tomcat | 东方通 TongWeb | 信创项目中常见替代 |
8.1 迁移注意事项
- Spring Cloud Alibaba 版本兼容矩阵是信创项目的核心:Nacos + Sentinel + RocketMQ + Seata + Dubbo 的版本搭配由社区统一维护,建议成套使用。
- SkyWalking 是国产 APM 的唯一成熟选择,建议在项目初期就接入,而非事后补监控。
- 国产中间件(达梦 DM、人大金仓)需确认 Spring Cloud Alibaba 版本的 JDBC 驱动兼容性。
- 容器化层面,Docker 和 Kubernetes 本身是开源项目不受信创限制,但建议使用国产云厂商的托管版(ACK/CCE)以获得国产化合规认证。
更多推荐
所有评论(0)