微服务架构(Microservices Architecture)是一种将单一应用程序划分为一组小型服务的设计方法。每个服务运行在自己的进程中,通过轻量级机制(通常是 HTTP/REST 或消息队列)进行通信。微服务架构由 Martin Fowler 和 James Lewis 于 2014 年正式提出。
微服务架构的核心定位是 可独立部署的分布式系统。它提供了:
| 对比项 | 单体架构 | 微服务架构 |
|---|---|---|
| 部署 | 整体部署 | 独立部署 |
| 伸缩 | 整体扩展 | 按需扩展 |
| 技术栈 | 单一技术栈 | 多技术栈 |
| 团队 | 大型团队 | 独立小团队 |
| 故障隔离 | 不隔离 | 隔离 |
| 开发速度 | 慢 | 快 |
| 运维复杂度 | 低 | 高 |
| 适用场景 | 小型项目 | 大型项目 |
// 同步通信 - HTTP/REST(RESTful API)
GET /api/users/123
POST /api/orders
// 同步通信 - RPC(gRPC、Dubbo)
// gRPC 示例(Protobuf)
service UserService {
rpc GetUser (UserRequest) returns (UserResponse);
}
// 异步通信 - 消息队列(Kafka、RabbitMQ)
// 生产者发送消息
producer.send("user.created", userData);
// 消费者处理消息
consumer.subscribe("user.created", processUserCreated);
# Spring Cloud Gateway 配置示例
spring:
cloud:
gateway:
routes:
- id: user-service
uri: lb://USER-SERVICE
predicates:
- Path=/api/users/**
- id: order-service
uri: lb://ORDER-SERVICE
predicates:
- Path=/api/orders/**
- id: product-service
uri: lb://PRODUCT-SERVICE
predicates:
- Path=/api/products/**
- id: auth-service
uri: lb://AUTH-SERVICE
predicates:
- Path=/api/auth/**
# 全局过滤器(认证、日志、限流)
// Spring Cloud Netflix Eureka
// 服务端配置
@EnableEurekaServer
@SpringBootApplication
public class EurekaServer {
public static void main(String[] args) {
SpringApplication.run(EurekaServer.class, args);
}
}
// 客户端配置
@EnableDiscoveryClient
@SpringBootApplication
public class UserService {
public static void main(String[] args) {
SpringApplication.run(UserService.class, args);
}
}
// 服务调用(使用负载均衡)
@RestController
public class UserController {
@Autowired
private RestTemplate restTemplate;
@GetMapping("/user-with-orders/{id}")
public UserWithOrders getUserWithOrders(@PathVariable Long id) {
// 通过服务名调用,负载均衡自动处理
User user = restTemplate.getForObject(
"http://USER-SERVICE/api/users/" + id,
User.class
);
List orders = restTemplate.getForObject(
"http://ORDER-SERVICE/api/orders?userId=" + id,
List.class
);
return new UserWithOrders(user, orders);
}
}
// Resilience4j 熔断器配置
@Configuration
public class CircuitBreakerConfig {
@Bean
public Customizer defaultCustomizer() {
return factory -> factory.configureDefault(id -> new Resilience4JConfigBuilder(id)
.circuitBreakerConfig(CircuitBreakerConfig.custom()
.slidingWindowSize(10)
.failureRateThreshold(50)
.waitDurationInOpenState(Duration.ofSeconds(10))
.build())
.timeLimiterConfig(TimeLimiterConfig.custom()
.timeoutDuration(Duration.ofSeconds(5))
.build())
.build());
}
}
// 使用熔断器
@Service
public class UserService {
@Autowired
private UserClient userClient;
@CircuitBreaker(name = "userService", fallbackMethod = "getFallbackUser")
public User getUser(Long id) {
return userClient.getUser(id);
}
public User getFallbackUser(Long id, Throwable t) {
return new User(id, "Fallback User");
}
}
// Spring Cloud Sleuth + Zipkin
// 服务添加依赖
org.springframework.cloud
spring-cloud-starter-sleuth
org.springframework.cloud
spring-cloud-sleuth-zipkin
// 配置
spring:
sleuth:
sampler:
probability: 1.0
zipkin:
base-url: http://zipkin:9411
// 请求自动添加 Trace ID 和 Span ID
// 在日志中显示
2024-01-15 10:30:00.123 INFO [user-service,abc123def456,789012,true]
单体架构、RESTful API、消息队列、Docker
微服务定义、服务拆分、服务通信、API 网关
服务发现、熔断器、分布式追踪、分布式事务
Spring Cloud(Java)、Go Micro、Kubernetes、服务网格
微服务架构是大型系统的"解耦之道"。
它用 独立部署、技术异构、弹性伸缩 解决了单体架构在大规模系统下的瓶颈。微服务是现代云原生应用的核心架构,也是大型互联网公司的标准选择。
掌握微服务架构,意味着你能 构建可扩展、高可用、易于维护的大型分布式系统。
"微服务是大型系统的终极解耦方案。" 🏗️