微服务架构概述
1. 微服务概述
1.1 什么是微服务
微服务是一种架构风格,将应用拆分为一组小型、独立的服务,每个服务运行在自己的进程中,通过轻量级通信机制协作。
1.2 微服务 vs 单体架构
| 对比项 | 单体架构 | 微服务架构 |
|---|---|---|
| 部署 | 整体部署 | 独立部署 |
| 扩展 | 整体扩展 | 按需扩展 |
| 技术栈 | 统一技术栈 | 可异构技术 |
| 故障影响 | 全局影响 | 局部影响 |
| 开发复杂度 | 较低 | 较高 |
| 运维复杂度 | 较低 | 较高 |
1.3 微服务优势
- 独立部署:每个服务可独立部署和升级
- 技术异构:不同服务可使用不同技术栈
- 弹性扩展:按需扩展特定服务
- 故障隔离:单个服务故障不影响整体
- 团队自治:不同团队独立开发不同服务
1.4 微服务挑战
- 分布式复杂性:网络延迟、数据一致性
- 服务治理:服务发现、负载均衡、熔断降级
- 运维复杂:监控、日志、追踪
- 数据管理:分布式事务、数据同步
2. Spring Cloud 概述
2.1 Spring Cloud 简介
Spring Cloud 为分布式系统开发提供了一整套工具集,基于 Spring Boot 构建,简化了微服务架构的实现。
2.2 Spring Cloud 组件
| 组件 | 说明 | 替代方案 |
|---|---|---|
| Spring Cloud Gateway | API 网关 | Zuul、Kong |
| Spring Cloud Netflix Eureka | 服务发现 | Nacos、Consul |
| Spring Cloud LoadBalancer | 负载均衡 | Ribbon |
| Spring Cloud OpenFeign | 声明式客户端 | RestTemplate |
| Spring Cloud Circuit Breaker | 熔断器 | Resilience4j、Hystrix |
| Spring Cloud Config | 配置中心 | Nacos、Apollo |
| Spring Cloud Sleuth | 链路追踪 | Micrometer Tracing |
| Spring Cloud Stream | 消息驱动 | - |
2.3 Spring Cloud 2025.1.1 新特性
- 兼容 Spring Boot 4.0.1+
- 支持 Java 21 虚拟线程
- Micrometer Tracing 增强
- Kubernetes 原生支持增强
3. 微服务架构设计
3.1 服务拆分原则
| 原则 | 说明 |
|---|---|
| 单一职责 | 每个服务只负责一个业务领域 |
| 高内聚低耦合 | 服务内部高内聚,服务间低耦合 |
| 独立部署 | 服务可独立开发、测试、部署 |
| 数据独立 | 每个服务有独立的数据库 |
3.2 服务拆分示例
电商系统微服务拆分:
├── 用户服务 (User Service)
│ ├── 用户注册/登录
│ ├── 用户信息管理
│ └── 用户权限
│
├── 商品服务 (Product Service)
│ ├── 商品管理
│ ├── 分类管理
│ └── 库存管理
│
├── 订单服务 (Order Service)
│ ├── 订单创建
│ ├── 订单查询
│ └── 订单状态管理
│
├── 支付服务 (Payment Service)
│ ├── 支付处理
│ ├── 退款处理
│ └── 支付状态
│
├── 通知服务 (Notification Service)
│ ├── 邮件通知
│ ├── 短信通知
│ └── 站内信
│
└── 网关服务 (Gateway Service)
├── 路由转发
├── 认证鉴权
└── 限流熔断3.3 服务通信方式
| 方式 | 说明 | 适用场景 |
|---|---|---|
| REST API | HTTP 同步调用 | 简单查询、实时响应 |
| gRPC | 高性能 RPC | 内部服务高频调用 |
| 消息队列 | 异步消息 | 解耦、削峰、异步处理 |
| 事件驱动 | 事件发布订阅 | 业务事件通知 |
4. 服务治理
4.1 服务发现
服务发现是微服务架构的核心,服务实例动态注册和发现。
服务发现流程:
1. 服务启动时向注册中心注册
2. 注册中心维护服务实例列表
3. 消费者从注册中心获取服务列表
4. 消费者根据负载均衡策略调用服务
5. 服务下线时从注册中心注销4.2 负载均衡
java
@Configuration
public class LoadBalancerConfig {
@Bean
ReactorLoadBalancer<ServiceInstance> randomLoadBalancer(
Environment environment, LoadBalancerClientFactory factory) {
String name = environment.getProperty(LoadBalancerClientFactory.PROPERTY_NAME);
return new RandomLoadBalancer(
factory.getLazyProvider(name, ServiceInstanceListSupplier.class),
name
);
}
}4.3 熔断降级
java
@Configuration
public class CircuitBreakerConfig {
@Bean
public Customizer<Resilience4JCircuitBreakerFactory> defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.ofDefaults())
.timeLimiterConfig(TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(3))
.build())
.build());
}
}
@Service
public class OrderService {
@CircuitBreaker(name = "orderService", fallbackMethod = "fallback")
public Order getOrder(Long id) {
return orderClient.getOrder(id);
}
public Order fallback(Long id, Exception e) {
return new Order(id, "默认订单", BigDecimal.ZERO);
}
}5. API 网关
5.1 网关职责
| 职责 | 说明 |
|---|---|
| 路由转发 | 请求路由到后端服务 |
| 认证鉴权 | 统一认证和权限校验 |
| 限流熔断 | 保护后端服务 |
| 日志监控 | 请求日志和监控 |
| 协议转换 | HTTP/gRPC 转换 |
5.2 Spring Cloud Gateway
yaml
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://user-service
predicates:
- Path=/api/users/**
filters:
- name: RequestRateLimiter
args:
redis-rate-limiter.replenishRate: 10
redis-rate-limiter.burstCapacity: 20
- name: CircuitBreaker
args:
name: userServiceCircuitBreaker
fallbackUri: forward:/fallback
- id: order-service
uri: lb://order-service
predicates:
- Path=/api/orders/**6. 配置中心
6.1 配置中心作用
- 集中管理配置
- 动态配置更新
- 环境隔离
- 配置版本管理
6.2 Spring Cloud Config
yaml
# 配置服务器
spring:
cloud:
config:
server:
git:
uri: https://github.com/myorg/config-repo
search-paths: '{application}'
default-label: main
# 配置客户端
spring:
cloud:
config:
uri: http://config-server:8888
name: myapp
profile: prod
label: main7. 分布式追踪
7.1 追踪概念
| 概念 | 说明 |
|---|---|
| Trace | 一次完整请求的追踪链路 |
| Span | 追踪链路中的一个节点 |
| Annotation | Span 中的事件标记 |
7.2 链路追踪流程
客户端请求 → Gateway (Span 1)
↓
User Service (Span 2)
↓
Order Service (Span 3)
↓
Payment Service (Span 4)8. 微服务最佳实践
8.1 设计原则
- API First:先设计 API,再实现服务
- 契约优先:使用 OpenAPI 定义服务契约
- 版本管理:API 版本化,向后兼容
- 文档驱动:完善的 API 文档
8.2 开发规范
项目结构规范:
my-service/
├── src/main/java/com/example/
│ ├── controller/ # 控制器层
│ ├── service/ # 业务逻辑层
│ ├── repository/ # 数据访问层
│ ├── entity/ # 实体类
│ ├── dto/ # 数据传输对象
│ ├── config/ # 配置类
│ └── client/ # 外部服务客户端
├── src/main/resources/
│ ├── application.yml
│ └── bootstrap.yml
└── pom.xml8.3 运维规范
- 健康检查端点
- 优雅停机
- 日志规范
- 监控告警
- 灰度发布
9. 小结
本章学习了微服务架构的核心概念:
| 内容 | 要点 |
|---|---|
| 微服务概念 | 定义、优势、挑战 |
| Spring Cloud | 组件、版本特性 |
| 服务拆分 | 原则、示例 |
| 服务治理 | 服务发现、负载均衡、熔断 |
| API 网关 | 路由、认证、限流 |
| 配置中心 | 集中配置、动态更新 |
| 分布式追踪 | Trace、Span |
下一章将学习 Spring Cloud 服务发现。