Skip to content

微服务架构概述

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 GatewayAPI 网关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 APIHTTP 同步调用简单查询、实时响应
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: main

7. 分布式追踪

7.1 追踪概念

概念说明
Trace一次完整请求的追踪链路
Span追踪链路中的一个节点
AnnotationSpan 中的事件标记

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.xml

8.3 运维规范

  • 健康检查端点
  • 优雅停机
  • 日志规范
  • 监控告警
  • 灰度发布

9. 小结

本章学习了微服务架构的核心概念:

内容要点
微服务概念定义、优势、挑战
Spring Cloud组件、版本特性
服务拆分原则、示例
服务治理服务发现、负载均衡、熔断
API 网关路由、认证、限流
配置中心集中配置、动态更新
分布式追踪Trace、Span

下一章将学习 Spring Cloud 服务发现。