-
springcloud组件:API网关(统一入口、路由转发、限流)、服务注册发现、基础设施(注册配置、熔断限流、链路追踪)
-
组件职责
- 服务注册发现:Nacos(eureka,spring cloud config已废弃)
- 配置中心:Nacos config
- API网关:Gateway(统一入口、路由、鉴权、网关层限流)
- 声明式HTTP客户端:OpenFeign(声明式 REST 客户端,支持注解、拦截器、重试、日志)
- 客户端负载均衡:LoadBalancer(ribbon已废弃)
- 流量控制:Sentinel(接口级流量控制+熔断与降级,阿里)
- 链路追踪:Micrometer Tracing + OpenTelemetry(一个请求经过哪些服务,替代 Sleuth,无缝对接 Zipkin、Jaeger、SkyWalking)
- 监控指标:Spring Boot Actuator + Micrometer + Prometheus/Grafana
- 服务注册与发现(Nacos)
- pom引入依赖:服务发现+服务注册
- bootstrap配置:服务发现(nacos服务地址、命名空间ID、分组、集群名称、ephemeral)
- 启动类注解:@EnableDiscoveryClient
- 服务分级:分配集群
- 远程调用(OpenFeign+LoadBalancer)
- pom引入依赖:openFeign、loadbalancer(代替ribbon)
- 声明feign客户端:定义feign接口、服务降级工厂FallBack(implements FallbackFactory,用于Sentinel熔断降级)
- 启用Feign:@EnableFeignClients
- 调用方式:通过 Feign 调用(feign内部:从Nacos获取服务的实例列表 -> loadbalancer选一个实例 -> 发送http请求)
- feign配置优化:客户端配置(连接超时、读取超时)、compression请求压缩配置、Feign拦截器(统一传递请求头)
- feign日志配置:打印feign请求详情
- api网关
- pom引入依赖:gateway依赖(不包含spring-boot-starter-web,两者冲突)、nacos(需要nacos服务发现,结合使用)
- 基本路由配置:spring.cloud.gateway.routes(路由id、lb://=通过负载均衡转发、predicates匹配请求、filters/-StripPrefix=1:去掉第一段路径如/api)
- 断言(Predicate)常用写法:Path、Header、Method、Query、Before、Host
- 过滤器Filter:StripPrefix、AddRequestHeader、AddResponseHeader、RewritePath、PrefixPath、RequestRateLimiter、Retry、CircuitBreaker(断路器)
- 自定义全局过滤器:鉴权
- 跨域配置(CORS):spring.cloud.gateway.globalcors
- 配置中心(nacos)
- pom引入依赖:spring-cloud-starter-alibaba-nacos-config
- 基本配置:bootstrap.yml(服务发现配置、配置中心配置)
- nacos配置文件命名规则:${prefix}-${spring.profiles.active}.${file-extension}
- 动态刷新配置:@RefreshScope、@ConfigurationProperties(推荐,类型安全,无需@RefreshScope)
- 多配置优先级:应用本身配置(application-profile.yml、application.yml) > 扩展配置 > 共享配置
- 共享配置实践:公共数据源配置、公共redis配置
- 负载均衡
- nginx: 反向代理,七层负载均衡(即应用层)
- sentinel: 熔断降级,四层负载均衡(即网络层)
- 常见策略:随机、轮询、权重、最少连接数、一致性hash(使用与缓存场景)
- 熔断降级(Sentinel)
- pom引入依赖:sentinel、sentinel控制台(sentinel-transport-simple-http)
- 基本配置:spring.cloud.sentinel.(transport,eager,datasource)
- 流量控制(限流):@SentinelResource 定义资源,配置限流规则(被限流的降级方法、业务异常时的降级方法)
- sentinel控制台规则:流量控制(Flow,超过阈值时限流)、降级(Degrade,响应慢/异常率高时降级)、热点参数(ParamFlow,针对特定参数限流)、系统规则(system,系统级别保护如cpu>80%时限流)、授权规则(Auth,黑名单控制)
- 代码中定义规则(代替控制台):FlowRuleManager.loadRules(rules);
- sentinel和openFeign集成:yml开启sentinal对feign的支持、代码Feign接口指定fallbackFactory(sentinel限流后执行对应的fallback方法)
- 限流与流量控制(sentinel,每个服务独立配置限流策略)
- 网关层:全局流量控制
- 服务层:接口级别、资源级别(保护特定的数据库、缓存、第三方服务)、热点参数(对特定参数值限流)
- 限流算法:令牌桶算法(允许突发流量)、漏桶算法(平滑流量输出)、滑动窗口算法(更精确的流量统计)、自适应限流(根据系统负载动态调整)
- 链路追踪(Sleuth+Zipkin 或者 Micrometer Tracing,跟踪调用链,即一个请求经过了哪些服务)
- 依赖和配置(springboot2.x传统方案):sleuth(生成traceId+spanId)+ zipkin(上报数据到zipkinserver),yml(spring.sleuth,spring.zipkin)
- 引入依赖和配置(springboot3.x新方案):micrometer-tracing-bridge-brave、micrometer-tracing-reporter-brave-zipkin,yml(management.tracing,management.zipkin)
- 服务监控与可观测性
- 监控维度:Metrics(服务指标)、Tracing(分布式链路追踪)、Logging(结构化日志收集)
- prometheus:埋点(代码/系统重预设数据采集钩子,用于在运行时生成结构化观测数据)、采集(通过其他工具采集数据,然后prometheus拉取)、拉取(应用程序暴漏http端口,监控系统主动拉取)、存储(存储为时序数据库,提供PromQL查询引擎)、查询(查询时序数据库,通过Graphana可视化)
- prometheus采集:服务器层采集(node_exporter / cAdvisor → 暴露 /metrics 端点 -> Prometheus定时拉取 -> 存入TSDB)、应用程序层采集(Micrometer + Actuator → 暴露 /actuator/prometheus → Prometheus 定时 Pull → 存入 TSDB)、业务层面采集(业务/日志/链路追踪三种类型,业务代码:MeterRegistry 注册业务 Counter/Timer,Prometheus 拉取 /actuator/prometheus;链路追踪:OpenTelemetry SDK/Agent 采集 → 通过 OTLP 协议 Push → 存入Jaeger/Tempo/SkyWalking)