配置文件

bootstrap.yml 配置文件

bootstrap 前缀的配置文件是 springcloud 项目使用的,其优先级比 application 配置文件高
在 springcloud 源码中配置了一个 BootstrapApplicationListener 类型的监听器
image.png
在监听器中配置了配置文件名称、监听的事件类型
image.png
而 ApplicationEnvironmentPreparedEvent 事件是在 springboot 项目启动过程中在环境创建好之后发布的
image.png
image.png
所以当 springcloud 监听到 springboot 环境准备好之后就会去读取 ${spring.cloud.bootstrap.name:bootstrap} 参数,加载对应的配置文件并添加到上下文中,默认是使用 bootstrap 配置文件(这个应该是可以直接修改的)
image.png
但是如果你直接在 application.yml 文件中这样配置的话,是不会生效的,因为 application 文件的读取优先级较低,所以在 BootstrapApplicationListener 监听器是读取不到这个参数的
image.png
再次查看 springboot 启动过程,命令行的参数配置优先级是最高的,所以可以通过以下方式进行配置
image.png
在启动项目的时候指定参数
image.png
image.png

加载外部内置文件

  1. 查看 PropertySourceBootstrapConfiguration 配置类,其中依赖注入了 PropertySourceLocator 类型的 bean

image.png

  1. 并在初始化的时候循环调用 locator 的 locateCollection() 方法,用于加载配置文件

image.png

  1. 所以我们只需要实现 PropertySourceLocator 接口,并重写 locate() 方法即可自定义加载配置文件方式

image.png

  1. 例如 nacos 就是实现了这个接口并重写 locate() 方法加载配置文件

image.png
image.png

面试题

一、微服务

  1. 微服务是什么?
    分布式,多个模块,每一个模块都是一个单独的系统

  2. 你知道哪些RPC框架

  • RPC(Remote Procedure Call):远程过程调用
  • Dubbo: 国内最早开源的 RPC 框架,由阿里巴巴公司开发并于 2011 年末对外开源
  • Spring Cloud: 国外公司 2014 年对外开源的 RPC 框架
  1. springCloud和Dubbo有什么区别

    1. 定位不同: springCloud微服务架构下的一站式解决方案;Dubbo主要用于服务的调用和治理
    2. 生态环境不同: springCloud依靠spring平台,更完善;Dubbo相对匮乏
    3. 调用方式不同: springCloud是采用Http协议做远程调用,接口一般是Rest风格,比较灵活;Dubbo是采用Dubbo协议,接口一般是Java的Service接口,格式固定
    4. 简单来说: springCloud是品牌机,Dubbo是组装机
  2. ** SpringCloud由什么组成 **

  • Spring Cloud Eureka: 服务注册与发现
  • Spring Cloud Feign: 服务接口调用
  • Spring Cloud Ribbon: 客户端负载均衡
  • Spring Cloud Hystrix: 断路器
  • Spring Cloud Zuul: 服务网关
  • Spring Cloud Config: 分布式统一配置管理

二、Spring Cloud Eureka

  1. Eureka包含几个组件
  • Eurake Client(客户端): 负责将这个服务的信息注册到Eureka Server中
  • Eureka Server(服务端): 注册中心,里面有一个注册表,保存了各个服务所在的机器和端口号
  1. Eureka的工作原理
  • 原理: 系统中的其他服务使用Eureka的客户端将其连接到Eureka服务端中,并且保持心跳,这样工作人员可以通过Eureka服务端来监控各个微服务是否运行正常
  1. 说一下什么是Eureka的自我保护机制
  • 如果Eureka服务端在一定时间内没有接收到某个微服务的心跳(默认90s),Eureka服务端会进入自我保护模式,在该模式下Eureka服务端会保护服务注册表中的信息,不在删除注册表中的数据,当网络故障恢复后,Eureka服务端节点会自动退出自我保护模式
  1. 什么是CAP原则
  • CAP原则: 又称CAP定理,指的是在一个分布式系统中,强一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)
  • CAP 原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾
    • 强一致性(Consistency): 访问所有的节点,得到的数据结果都是一样的
    • 可用性(Availability): 保证每个请求不管成功或者失败都有响应
    • 分区容错性(Partiton tolerance): 系统中任意信息的丢失或失败不会影响系统的继续运作
  1. 都是服务注册中心,Eureka比Zookeeper好在哪里?
  • 在分布式系统中分区容错性是必须要保证的,因此只能保证A或C,只能AP和CP。
  • 我们在服务使用中可以容忍注册中心返回几分钟之前的注册信息,但是不能接受服务直接down掉不可用
  • Zookeeper: 保证的是CP,当主机的节点发生网络故障了,会选取新的主节点,响应时间过长
  • Eureka: 保证的是AP,Eureka的节点都是平等的,不存在主机从机,因此Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像Zookeeper那样是整个注册中心瘫痪
  1. Nacos和Eureka的区别
  • 共同点
    1. 都支持服务的注册和拉取
    2. 都支持服务提供者以心跳检测来判断是否健康(临时实例)
  • 不同点
    1. nacos支持注册中心主动询问服务提供者的状态(非临时实例)
    2. nacos支持注册中心消息变更主动推送
    3. 心跳不正常会被剔除(临时实例)

三、Spring Cloud Ribbon

  1. Ribbon的作用
  • 主要功能是提供客户端的软件负载均衡算法,默认是轮询算法
  1. Ribbon的原理
  • Ribbon会从注册中心获取到服务的信息,然后通过轮询算法,从中选择一台机器
  1. Ribbon和nginx的区别
  • nginx: 反向代理实现负载均衡,相当于从nginx服务器进行请求转发
  • Ribbon: 客户端负载均衡,全程都是客户端操作

四、Spring Cloud Feign

  1. Feign的作用
  • Feign集成了Ribbon,Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易,远程调用更加简单
  1. SpringCloud有几种调用接口方式
  • Feign
  • RestTemplate
  1. Ribbon和Feign调用服务的区别
  • Ribbon: 需要我们自己构建http请求,然后通过RestTemplate去发给其他服务,比较繁琐
  • Feign: 不需要自己构建Http请求,直接接口调用就行

五、Spring Cloud Hystrix

  1. 说一说什么是服务雪崩
  • 服务雪崩:多个服务相互调用时,A调B,B调C,C调D等等更多调用,那么如果中间调用需要很长时间,然后再去调用A,那么占用的资源就越来越多,导致系统崩溃。
  1. Hystrix断路器是什么
  • 防止服务雪崩的一个工具,具有服务降级、服务熔断(@HystrixCommand(fallbackMethod = “hystrixById”) //失败了调用的方法)、服务隔离、监控等防止雪崩的技术。
  1. 什么是服务降级、服务熔断、服务隔离
  • 服务降级: 当出现请求超时、资源不足时(线程或者信号量),会进行服务降级,就是去返回fallback方法的结果
  • 服务熔断: 当失败率(网络故障或者超时造成)达到阈值自动触发降级,是一种特殊的降级
  • 服务隔离: 为隔离的服务开启一个独立的线程,这样在高并发情况下,也不会影响该服务。一般使用线程池实现(还有信号量方式实现)。
  1. 服务降级和服务熔断的区别
  • 区别: 降级每个请求都会发送过去,而熔断不一定,达到失败率,请求就不会再去发送了。请求出错时降级返回的是fallback数据,而熔断则是一段时间不会去访问服务提供者
  • 比如:
    • 降级:A调B,发送10个请求,即使每个请求都超时,也会去请求B
    • 熔断:A调B,发送10个请求,失败率设置为50%,如果5个请求失败,此时失败率到了50%,那么后面的5个请求就不会走到B

六、Spring Cloud Zuul 和 Spring Cloud Gateway

  1. 什么是Zuul微服务网关
  • 接收所有的请求,并且将不同的请求转发至不同的微服务模块。
  1. Zuul的应用场景
  • 过滤器
  • 权限认证
  • 降级限流
  • 安全
  1. Gateway
  • 功能强大丰富,性能好,维护性好,实现异步,可以替代Zuul网关。

七、Spring Cloud Config

  1. 什么是Spring Cloud Config
  • 集中管理配置文件,不需要每个服务编写配置文件,服务会向配置中心拉取配置。
    实时刷新(需要spring cloud bus)。

八、Spring Cloud Alibaba Nacos

  1. Nacos可以做什么?
  • 注册中心和配置中心。
  1. Eureka保证是AP,那么Nacos保证的是什么?默认是什么?
  • Nacos可以是AP也可以是CP。默认是AP