Spring Cloud微服务架构深度解析:把分布式核心讲透,你真的了解吗?
Spring Cloud微服务架构深度解析:把分布式核心讲透,你真的了解吗?
🎯写在前面:在微服务时代,Spring Cloud是Java后端工程师必须掌握的技能。但很多人只是会用,却不理解其背后的原理。这篇文章,将带你从源码层面深度剖析Spring Cloud的核心组件!
一、微服务架构基础:什么是微服务?
1.1 单体架构 vs 微服务架构
┌─────────────────────────────────────────────────────────────────┐ │ 单体架构 │ ├─────────────────────────────────────────────────────────────────┤ │ ┌─────────────────────────────────────────────────────────┐ │ │ │ 单体应用 │ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │ │ │用户 │ │订单 │ │支付 │ │商品 │ │库存 │ │ │ │ │ │模块 │ │模块 │ │模块 │ │模块 │ │模块 │ │ │ │ │ └─────┘ └─────┘ └─────┘ └─────┘ └─────┘ │ │ │ └─────────────────────────────────────────────────────────┘ │ │ ↓ │ │ 问题:所有模块耦合在一起,修改任何一个模块都需要重新部署整个应用 │ └─────────────────────────────────────────────────────────────────┘ ┌─────────────────────────────────────────────────────────────────┐ │ 微服务架构 │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ ┌─────┐ │ │ │用户 │ │订单 │ │支付 │ │商品 │ │库存 │ │ │ │服务 │ │服务 │ │服务 │ │服务 │ │服务 │ │ │ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ └──┬──┘ │ │ │ │ │ │ │ │ │ └──────────┴──────────┴──────────┴──────────┘ │ │ ↓ │ │ ┌───────────────┐ │ │ │ 注册中心 │ │ │ │ (Nacos/Eureka)│ │ │ └───────────────┘ │ │ │ │ 优势:每个服务独立部署、独立扩展、独立技术栈 │ └─────────────────────────────────────────────────────────────────┘1.2 Spring Cloud核心组件全景图
┌─────────────────────────────────────────────────────────────────────┐ │ Spring Cloud组件全景图 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ 服务治理 │ │ │ │ 注册中心:Nacos / Eureka / Consul │ │ │ │ 配置中心:Nacos Config / Apollo / Spring Cloud Config │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ 网关层 │ │ │ │ Spring Cloud Gateway / Zuul │ │ │ │ 路由转发、限流、熔断、认证鉴权 │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ 服务调用 │ │ │ │ OpenFeign(声明式HTTP客户端) │ │ │ │ Ribbon(负载均衡器) │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ ┌────────────────────────────────────────────────────────────────┐ │ │ │ 容错保护 │ │ │ │ Sentinel / Resilience4j / Hystrix │ │ │ │ 熔断、降级、限流 │ │ │ └────────────────────────────────────────────────────────────────┘ │ │ │ └─────────────────────────────────────────────────────────────────────┘二、服务注册与发现:Nacos深度剖析
2.1 Nacos注册原理
// 服务注册示例@SpringBootApplication@EnableDiscoveryClientpublicclassUserServiceApplication{publicstaticvoidmain(String[]args){SpringApplication.run(UserServiceApplication.class,args);}}// application.yml配置spring:application:name:user-service// 服务名cloud:nacos:discovery:server-addr:127.0.0.1:8848// Nacos地址namespace:dev// 命名空间group:DEFAULT_GROUP// 分组2.2 Nacos注册流程
┌─────────────────────────────────────────────────────────────────────┐ │ Nacos服务注册流程 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 1. 服务启动 │ │ ↓ │ │ 2. Spring Cloud自动装配NacosServiceAutoConfiguration │ │ ↓ │ │ 3. 创建NacosNamingService实例 │ │ ↓ │ │ 4. 定时任务:发送心跳(默认5秒) │ │ ↓ │ │ 5. 注册服务:POST /nacos/v1/ns/instance │ │ ↓ │ │ 6. Nacos Server保存服务实例到内存 │ │ ↓ │ │ 7. 推送变更事件给订阅者 │ │ │ └─────────────────────────────────────────────────────────────────────┘2.3 服务发现与负载均衡
// 服务调用 - 使用Feign声明式HTTP客户端@FeignClient(name="order-service",fallback=OrderServiceFallback.class)publicinterfaceOrderFeignClient{@GetMapping("/order/{userId}")List<Order>getOrders(@PathVariable("userId")LonguserId);@PostMapping("/order/create")OrdercreateOrder(@RequestBodyOrderRequestrequest);}// 启用Feign客户端@EnableFeignClients@SpringBootApplicationpublicclassOrderConsumerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(OrderConsumerApplication.class,args);}}// 实现降级逻辑@ComponentpublicclassOrderServiceFallbackimplementsOrderFeignClient{@OverridepublicList<Order>getOrders(LonguserId){// 降级处理:返回空列表或缓存数据returnCollections.emptyList();}@OverridepublicOrdercreateOrder(OrderRequestrequest){// 降级处理returnnull;}}三、网关:Spring Cloud Gateway深度剖析
3.1 Gateway工作原理
┌─────────────────────────────────────────────────────────────────────┐ │ Spring Cloud Gateway工作原理 │ ├─────────────────────────────────────────────────────────────────────┤ │ │ │ 请求 → Gateway Handler Mapping(路由匹配) │ │ ↓ │ │ Gateway Web Handler(过滤器链) │ │ ↓ │ │ ┌─────────────────────────────────────────────────────────────┐ │ │ │ Filter Chain │ │ │ │ │ │ │ │ 1. GlobalFilter A ←── 自定义全局过滤器 │ │ │ │ 2. GatewayFilter B ←── 路由特定过滤器 │ │ │ │ 3. GatewayFilter C │ │ │ │ 4. ... │ │ │ │ 5. Netty Routing Filter ←── 转发请求到下游服务 │ │ │ │ 6. ... │ │ │ │ 7. GatewayFilter C │ │ │ │ 8. GatewayFilter B │ │ │ │ 9. GlobalFilter A │ │ │ └─────────────────────────────────────────────────────────────┘ │ │ ↓ │ │ 响应 │ │ │ └─────────────────────────────────────────────────────────────────────┘3.2 Gateway核心配置
spring:cloud:gateway:# 路由配置routes:# 用户服务路由-id:user-serviceuri:lb://user-service# lb表示负载均衡predicates:-Path=/api/user/**-After=2024-01-01T00:00:00Z# 时间断言-Header=X-Request-Id,\d+# 请求头断言filters