Spring Cloud知识点总结
Spring Cloud 面试核心知识点详解前言Spring Cloud 作为微服务架构的事实标准是 Java 技术栈面试中的重中之重。本文整理了 Spring Cloud 面试中最常见的核心知识点从基础概念到高级特性帮助你在面试中从容应对。一、微服务基础概念1.1 什么是微服务架构微服务架构是一种将单一应用程序划分为一组小服务的架构风格每个服务运行在自己的进程中服务之间通过轻量级通信机制如 HTTP API进行通信。核心特点围绕业务能力组织服务分散治理和数据管理独立部署和扩展技术异构性1.2 为什么选择 Spring CloudSpring Cloud 基于 Spring Boot为开发者提供了快速构建分布式系统所需的工具集包括配置管理、服务发现、断路器、智能路由、微代理、控制总线等。二、服务注册与发现2.1 Eureka 原理与架构面试题请简述 Eureka 的工作流程Eureka 采用 C-S 架构包含两个核心组件Eureka Server服务注册中心Eureka Client服务提供者和消费者// Eureka Server 配置示例EnableEurekaServerSpringBootApplicationpublicclassEurekaServerApplication{publicstaticvoidmain(String[]args){SpringApplication.run(EurekaServerApplication.class,args);}}工作流程服务注册服务启动时向 Eureka Server 发送 REST 请求将自己的信息注册到 Server心跳续约Client 每 30 秒发送一次心跳表明自己还活着服务发现消费者从 Server 获取服务列表并缓存到本地服务下线服务正常关闭时发送下线请求Server 将其从注册表中移除故障剔除Server 在 90 秒内没有收到心跳则将该服务从注册表中剔除2.2 Nacos 与 Eureka 对比特性NacosEureka一致性协议APCPAP健康检查支持 TCP/HTTP/MYSQLClient 心跳配置管理支持不支持负载均衡支持权重/元数据Ribbon雪崩保护支持支持三、服务调用3.1 Ribbon 负载均衡面试题Ribbon 的负载均衡策略有哪些ConfigurationpublicclassRibbonConfig{BeanpublicIRuleribbonRule(){// 随机策略returnnewRandomRule();// 轮询策略// return new RoundRobinRule();// 重试策略// return new RetryRule();}}常见策略RoundRobinRule轮询RandomRule随机AvailabilityFilteringRule先过滤掉故障实例再选择并发较小的实例WeightedResponseTimeRule根据响应时间分配权重RetryRule重试机制BestAvailableRule选择并发请求最小的实例3.2 OpenFeign 声明式调用面试题Feign 和 OpenFeign 的区别Feign 是 Netflix 开发的声明式 HTTP 客户端OpenFeign 是 Spring Cloud 对其的增强版本支持 Spring MVC 注解。FeignClient(nameuser-service,fallbackUserFallback.class)publicinterfaceUserFeignClient{GetMapping(/user/{id})UsergetUserById(PathVariable(id)Longid);PostMapping(/user)UsercreateUser(RequestBodyUseruser);}核心特性集成 Ribbon 实现负载均衡集成 Hystrix 实现熔断降级支持请求压缩和日志打印可自定义编码器/解码器四、服务容错保护4.1 Hystrix 熔断器面试题Hystrix 的工作原理是什么// 服务熔断示例HystrixCommand(fallbackMethodfallbackMethod,commandProperties{HystrixProperty(namecircuitBreaker.requestVolumeThreshold,value10),HystrixProperty(namecircuitBreaker.sleepWindowInMilliseconds,value5000),HystrixProperty(namecircuitBreaker.errorThresholdPercentage,value60)})publicStringrequestService(){// 业务逻辑returnrestTemplate.getForObject(http://service/user,String.class);}熔断器状态机CLOSED关闭状态允许请求通过统计失败次数OPEN打开状态直接返回错误不调用服务HALF_OPEN半开状态尝试放行部分请求判断服务是否恢复工作流程每次请求调用 HystrixCommand 的 run() 方法判断熔断器是否打开如果是则直接执行 fallback判断线程池/信号量是否已满如果是则执行 fallback执行 run() 方法如果超时或异常则执行 fallback统计失败率达到阈值则打开熔断器4.2 Sentinel 新一代容错组件面试题Sentinel 相比 Hystrix 有哪些优势丰富的流控规则QPS 限流、线程数限流、关联限流、链路限流实时监控提供控制台实时监控数据系统自适应保护根据系统负载自动调整流量熔断降级支持平均响应时间、异常比例、异常数等多种降级策略RestControllerpublicclassTestController{GetMapping(/test)SentinelResource(valuetest,blockHandlerhandleBlock,fallbackhandleFallback)publicStringtest(){// 业务逻辑returnsuccess;}publicStringhandleBlock(BlockExceptionex){return被限流了;}publicStringhandleFallback(Throwablet){return业务异常;}}五、API 网关5.1 Gateway 核心概念面试题Spring Cloud Gateway 的工作原理是什么spring:cloud:gateway:routes:-id:user-serviceuri:lb://user-servicepredicates:-Path/user/**filters:-AddRequestHeaderX-Request-Foo,Bar-name:Hystrixargs:name:fallbackcmdfallbackUri:forward:/fallback核心组件Route路由的基本构建块包含 ID、目标 URI、断言集合和过滤器集合Predicate断言匹配 HTTP 请求的所有属性Filter过滤器可以在请求被路由前后修改请求和响应执行流程Gateway Handler 接收到请求通过 Predicate 判断请求匹配哪个 Route通过过滤器链处理请求pre 和 post转发请求到具体的微服务返回响应5.2 网关对比Zuul vs Gateway特性Spring Cloud GatewayZuul 1.x实现方式WebFlux NettyServlet Tomcat性能高异步非阻塞低同步阻塞长连接支持 WebSocket不支持限流内置需集成社区活跃度高低六、配置中心6.1 Spring Cloud Config面试题配置中心的实现原理RefreshScopeRestControllerpublicclassConfigController{Value(${config.info:default})privateStringconfigInfo;GetMapping(/config)publicStringgetConfig(){returnconfigInfo;}}工作流程配置服务端从 Git 仓库拉取配置配置客户端启动时从服务端获取配置配置变更时通过 Spring Cloud Bus 广播刷新事件客户端收到事件后通过 RefreshScope 动态刷新配置七、服务追踪7.1 Sleuth Zipkin面试题分布式链路追踪的实现原理是什么// 添加依赖后自动集成BeanpublicAlwaysSamplerdefaultSampler(){returnnewAlwaysSampler();}// 日志输出示例2024-01-1510:15:30.123INFO[user-service,5f3a7b2c,8e4d2f1a,true]核心概念Trace ID整个请求链路的唯一标识Span ID单个服务的唯一标识Parent ID父服务的 Span IDAnnotations记录事件时间八、面试常见场景题8.1 微服务架构中如何处理分布式事务常见解决方案两阶段提交2PC强一致性性能较差TCCTry-Confirm-Cancel性能好业务侵入性强可靠消息最终一致性使用 RocketMQ 等消息中间件最大努力通知定期同步适用于对实时性要求不高的场景8.2 如何保证微服务的安全性安全策略OAuth2 JWT统一的认证授权中心API 网关层鉴权在网关层验证 Token服务间通信加密HTTPS 或双向 SSL接口防刷限流Sentinel 限流黑白名单机制IP 限制8.3 微服务部署策略有哪些蓝绿部署两套环境切换零停机灰度发布部分用户先体验新版本滚动更新逐个实例更新A/B 测试不同版本同时运行对比效果九、源码分析要点9.1 服务发现源码流程// Eureka Client 启动流程1.DiscoveryClient.init()初始化2.DiscoveryClient.fetchRegistry()获取注册表3.DiscoveryClient.register()注册服务4.DiscoveryClient.renew()发送心跳5.DiscoveryClient.cancel()服务下线9.2 Ribbon 负载均衡源码// LoadBalancerClient.execute()6.获取服务列表7.通过IRule选择实例8.重构请求URL9.发起实际请求10.处理重试机制十、总结Spring Cloud 微服务架构的核心技术栈服务治理Eureka/Nacos远程调用Feign Ribbon容错保护Sentinel/HystrixAPI 网关Gateway配置中心Config/Nacos链路追踪Sleuth Zipkin消息总线Bus安全认证Security OAuth2面试建议理解原理比死记硬背更重要结合实际项目经验说明遇到的问题和解决方案关注最新技术动态如 Service Mesh、K8s 等对比不同组件的优缺点展现思考深度希望本文能帮助你在 Spring Cloud 面试中取得好成绩如果觉得有帮助欢迎收藏和分享。