一、微服务架构概述
1.1 微服务 vs 单体架构
特性 | 单体架构 | 微服务架构 |
---|---|---|
服务拆分 | 单一应用 | 多个小型服务 |
技术栈 | 统一技术栈 | 异构技术栈 |
部署方式 | 整体部署 | 独立部署 |
扩展性 | 水平扩展困难 | 按需扩展特定服务 |
容错性 | 单点故障影响整体 | 单个服务故障不影响全局 |
开发效率 | 初期高,后期下降 | 团队并行开发,效率高 |
1.2 微服务设计原则
- 单一职责:每个服务专注于单一业务能力
- 边界清晰:明确服务间的接口和依赖关系
- 自治性:服务可独立开发、测试和部署
- 去中心化:避免全局共享状态,数据模型自治
- 弹性设计:具备容错、限流和降级机制
二、Spring Cloud核心组件
2.1 服务注册与发现(Eureka)
// 服务注册中心(Eureka Server)
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
// 服务提供者配置
eureka.client.service-url.defaultZone=http://localhost:8761/eureka/
2.2 负载均衡(Ribbon)
// 声明式REST客户端(Feign + Ribbon)
@FeignClient(name = "product-service")
public interface ProductServiceClient {
@GetMapping("/products/{id}")
Product getProduct(@PathVariable Long id);
}
2.3 服务熔断(Hystrix)
// 熔断与降级示例
@Service
public class OrderService {
@HystrixCommand(fallbackMethod = "fallbackCreateOrder")
public Order createOrder(OrderRequest request) {
// 调用远程服务
return productServiceClient.reserveStock(request.getProductId());
}
public Order fallbackCreateOrder(OrderRequest request) {
// 服务不可用时的降级逻辑
return new Order("临时订单", 0.0);
}
}
2.4 API网关(Zuul)
// API网关配置
@SpringBootApplication
@EnableZuulProxy
public class ApiGatewayApplication {
public static void main(String[] args) {
SpringApplication.run(ApiGatewayApplication.class, args);
}
}
// 路由配置示例
zuul.routes.product-service.path=/api/products/**
zuul.routes.product-service.serviceId=product-service
三、服务间通信
3.1 同步通信(REST)
// 使用RestTemplate调用服务
@Service
public class UserService {
@Autowired
private RestTemplate restTemplate;
public Product getProduct(Long productId) {
return restTemplate.getForObject(
"http://product-service/products/{id}",
Product.class,
productId
);
}
}
3.2 异步通信(消息队列)
// 消息生产者(RabbitMQ)
@Service
public class OrderProducer {
@Autowired
private RabbitTemplate rabbitTemplate;
public void sendOrder(Order order) {
rabbitTemplate.convertAndSend("order-exchange", "order.create", order);
}
}
// 消息消费者
@RabbitListener(queues = "order-queue")
public void processOrder(Order order) {
// 处理订单消息
}
四、配置中心(Config Server)
4.1 服务端配置
// 配置中心服务端
@SpringBootApplication
@EnableConfigServer
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
// 配置仓库示例(Git)
spring.cloud.config.server.git.uri=https://github.com/example/config-repo
4.2 客户端配置
# bootstrap.yml
spring:
cloud:
config:
uri: http://config-server:8888
name: application
profile: dev
五、微服务监控与链路追踪
5.1 集成Spring Boot Actuator
# 暴露监控端点
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
5.2 链路追踪(Sleuth + Zipkin)
// 添加依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-sleuth</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-zipkin</artifactId>
</dependency>
// 配置Zipkin服务器地址
spring.zipkin.base-url=http://zipkin-server:9411/
六、微服务部署与容器化
6.1 Docker基础
# Dockerfile示例
FROM openjdk:11
COPY target/my-service.jar app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
6.2 Kubernetes部署
# 服务部署配置(deployment.yaml)
apiVersion: apps/v1
kind: Deployment
metadata:
name: product-service
spec:
replicas: 3
selector:
matchLabels:
app: product-service
template:
metadata:
labels:
app: product-service
spec:
containers:
- name: product-service
image: my-registry/product-service:1.0.0
ports:
- containerPort: 8080
七、学习要点总结
7.1 核心知识点
- 服务拆分策略:按业务边界划分微服务
- 服务治理:注册发现、负载均衡、熔断降级
- 配置管理:集中配置与动态刷新
- 通信模式:同步REST与异步消息队列
- 监控与追踪:服务状态监控与调用链路分析
- 容器化部署:Docker与Kubernetes基础
7.2 常见问题解答
-
Q:微服务架构的缺点?
A:运维复杂度高、分布式事务处理困难、服务间调用延迟 -
Q:如何选择服务间通信方式?
A:同步REST适合强一致性场景,异步消息适合解耦和流量削峰 -
Q:微服务测试策略?
A:单元测试、集成测试、契约测试(Pact)、端到端测试
八、练习题
8.1 基础练习
- 使用Spring Cloud搭建一个包含用户、订单、商品三个服务的微服务系统
- 配置服务注册中心和API网关
- 实现服务间的熔断和降级机制
8.2 进阶练习
- 集成配置中心,实现配置动态刷新
- 添加链路追踪和监控系统
- 使用Docker和Kubernetes部署微服务集群
九、总结
Spring Cloud提供了一套完整的微服务解决方案,通过本章学习,你应该掌握了:
- 微服务架构的核心概念和设计原则
- Spring Cloud各组件的功能和使用方法
- 服务间通信的同步和异步模式
- 微服务配置管理和动态刷新机制
- 微服务监控、链路追踪和容器化部署