1. 微服务基础概念
2. Spring Cloud概述
3. 服务注册与发现
4. 负载均衡
5. 服务调用
6. 服务熔断与降级
7. 服务网关
8. 配置管理
9. 消息总线
10. 链路追踪
11. 实战架构示例
12. 最佳实践
总结
形象比喻:
核心特征:
特性 | 单体应用 | 微服务 |
---|---|---|
架构复杂度 | 简单 | 复杂 |
开发速度 | 初期快,后期慢 | 初期慢,后期快 |
部署方式 | 整体部署 | 独立部署 |
技术栈 | 统一技术栈 | 可以多样化 |
团队协作 | 紧耦合 | 松耦合 |
故障影响 | 影响整个系统 | 影响单个服务 |
技术挑战:
Spring Cloud是一套微服务开发的工具箱,提供了微服务开发中常见问题的解决方案。
核心理念:
"约定优于配置,开箱即用"
┌─────────────────────────────────────────────────────────────┐
│ Spring Cloud生态系统 │
├─────────────────────────────────────────────────────────────┤
│ 服务网关 │ 服务注册中心 │ 配置管理中心 │
│ Gateway │ Eureka/Nacos │ Config Server │
├─────────────────────────────────────────────────────────────┤
│ 服务调用 │ 负载均衡 │ 熔断降级 │
│ OpenFeign │ LoadBalancer │ Hystrix/Sentinel │
├─────────────────────────────────────────────────────────────┤
│ 链路追踪 │ 消息总线 │ 安全管理 │
│ Sleuth │ Bus │ Security │
└─────────────────────────────────────────────────────────────┘
Spring Cloud | Spring Boot |
---|---|
2023.0.x | 3.2.x |
2022.0.x | 3.0.x |
2021.0.x | 2.6.x |
2020.0.x | 2.4.x |
服务治理层:
服务调用层:
服务保障层:
服务监控层:
问题场景: 假设你有100个微服务,每个服务的IP和端口都可能变化,如何让服务之间互相找到?
解决方案: 服务注册中心就像电话簿,所有服务都把自己的"电话号码"登记在上面。
┌─────────────────┐ 注册 ┌─────────────────┐
│ 服务提供者 │ ────────► │ Eureka Server │
│ (Producer) │ │ (注册中心) │
└─────────────────┘ └─────────────────┘
│
发现 │
▼
┌─────────────────┐
│ 服务消费者 │
│ (Consumer) │
└─────────────────┘
1. 依赖配置
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
2. 启动类
@EnableEurekaServer // 开启Eureka服务端
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
3. 配置文件
server:
port: 8761 # Eureka默认端口
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false # 自己不注册到注册中心
fetch-registry: false # 不从注册中心获取服务信息
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
1. 服务提供者
@EnableEurekaClient // 开启Eureka客户端
@SpringBootApplication
public class ProducerApplication {
public static void main(String[] args) {
SpringApplication.run(ProducerApplication.class, args);
}
}
spring:
application:
name: user-service # 服务名称,非常重要!
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
instance:
prefer-ip-address: true # 使用IP注册
发现过程:
核心概念:
特性 | Eureka | Nacos |
---|---|---|
一致性协议 | AP (可用性优先) | CP + AP 可选 |
健康检查 | Client心跳 | Server主动检测 |
配置管理 | 不支持 | 支持 |
多数据中心 | 支持 | 支持 |
界面功能 | 基础 | 功能丰富 |
生活比喻: 想象一家银行有3个窗口,客户来了如何分配?负载均衡就是排队叫号系统。
服务端负载均衡(如Nginx):
客户端 → Nginx → 服务器1
→ 服务器2
→ 服务器3
客户端负载均衡(Spring Cloud):
客户端 → (内置算法选择) → 服务器1/2/3