【Java超高频面试题&springCloud微服务】微服务相关高频面试题汇总

简介:

本期文章将汇总springCloud、springCloudAlibaba微服务相关的高频面试题,给最近需要找工作的朋友们总结一波,帮助大家全面掌握微服务的核心知识点,提升竞争力,为你的面试之旅保驾护航!


集群和微服务的区别

集群是将一个应用程序完整复制多份,部署在多台服务器上

微服务也是一个分布式系统

分布式是将一个应用程序拆分成多个子程序,分别部署在多台服务器上,每个服务器中的程序都是不完整的,所有服务器需要相互通信相互协调才能完成最终的业务

他们都能解决高并发问题,

但是分布式不能解决单机故障,

集群无法解决项目的代码臃肿、业务复杂,

实际开发中,可以将分布式和集群相结合,比如分布式某个子程序的负载很高,可以单独对这个子程序做集群。

微服务的优缺点

优点:

缺点:

1. 技术栈多样性,每个模块技术灵活,有较强的适应性

2. 可以独立部署, 可以独立扩展

3. 启动速度快,易于维护

1. 技术成本高,运维要求高

2. 分布式复杂性,运维、系统部署依赖和服务间通信等变得更复杂

3. 接口调整成本高, 数据一致性问题

4. 故障排除变得更复杂

常见的负载均衡器和负载均衡算法有哪些

常见的负载均衡器

常见负载均衡算法:

1. Openfeign

2. Ribbon

3. nginx

1. 轮训

2. 随机

3. 权重

4. Ip_hash

5. url_hash

什么是CAP理论,Eureka是AP还是CP

Eureka是AP

CAP理论指的是,在一个分布式系统中,一致性(C),可用性(A),分区容错性(P)

但三个要素最多只能同时实现两点。

分区容错性是分布式系统的内在要求,因此我们通常会在一致性和可用性之间做取舍。

满足CP,也就是满足一致性和容错性,舍弃可用性,如果系统允许有段时间失效就可以考虑。常见的如Redis,Nacos,ZooKeeper

满足AP,也就是满足可用性和容错性,舍弃一致性,如果系统允许出现短暂时间的不一致可以考虑。常见的如MySQL,Eureka

什么是服务注册,什么是服务发现,什么是续约

服务注册:

当一个服务实例启动时,它会向服务注册中心注册自己的信息,包括服务名称、IP地址、端口号等。

注册后,服务注册中心会维护一个服务注册表,记录所有已注册的服务实例

服务发现:

通过服务注册中心来查询和发现可用的服务实例

续约:

在注册服务完成以后,服务提供者会维持一个心跳(定时向EurekaServer发起Rest请求)

默认情况下每个30秒服务会向注册中心发送一次心跳,证明自己还活着。 如果超过90秒没有发送心跳,EurekaServer就会认为该服务宕机

A服务通过Feign调用B服务,它怎么实现服务调用的(执行原理是什么)

1. 微服务A加入 Feign的依赖

2. 微服务A的启动类加入注解@EnableFeignClient

3. 微服务A的类中创建接口,调用B的方法 使用@FeignClient()注解

4. 在微服务A中去依赖注入接口调用方法即可

原理 :

feign远程调用,基于JDK Proxy动态代理, 核心就是通过一系列的封装和处理,以JAVA注解的方式定义的远程调用API接口,最终转换成HTTP的请求形式和响应结果,解码成JAVA Bean,返还给调用者。

Zuul和Gateway的区别

Zuul

Gateway

基于Servlet 构建,

是一个同步阻塞的API网关

有四个过滤器: 前置,后置,路由,错误

zuul是网飞公司

基于Spring WebFlux构建,

是一个异步非阻塞的API网关,功能更强大,

内部实现了限流、负载均衡等

有2个过滤器: 全局, 局部

Gateway是spring开发的

Nacos和Eureka的区别

nacos是阿里的,Eureka网飞, 现在都是Apache

保护方式:

Nacos:临时实例和永久实例

Eureka:当续约失败的比例达到一定阈值时,会触发自我保护机制,不会剔除任何微服务。

连接方式:

Nacos使用netty,是长连接。

Eureka是短连接,定时发送心跳。

支持模式:

Nacos支持CP和AP两种模式。

Eureka只支持AP模式。

Hystrix和Sentinel的区别

sentinel是阿里的, hystrix是网飞

限流方式:

Hystrix 基于线程池隔离,信号量隔离。

Sentinel 基于QPS, 支持基于调用关系的限流。

熔断降级策略:

Hystrix 是基于响应时间或失败比率

Sentinel 是基于失败比率

配置方式不同,和使用难度:

Hystrix 通过yaml 配置, 使用繁琐

Sentinel通过可视化界面配置, 相对简单

什么是服务熔断,什么是服务限流,什么是服务降级

服务熔断:

熔断,是对服务链路的一种保护机制,当链路上的某个服务不可访问时,服务就会触发降级返回拖地数据,

同时当失败率到达一个阈值,就标记该服务为短路状态,当请求访问时直接熔断。

服务限流:

服务限流是一种流量控制策略

基于预设的条件和规则对请求的频率、并发数量、处理能力等进行限制,

用于防止服务因过高的请求量而过载。

服务降级:

降级,是当某个服务不可访问时,返回兜底数据给客户端

保证系统的高可用性

服务心跳续约失败一定会被剔除吗?为什么

服务心跳续约失败并不一定会被剔除。这主要取决于使用的服务发现和注册中心的机制。

以Eureka为例,默认情况下,客户端的服务实例每隔30秒向Eureka服务端发送一次心跳。90秒之内Eureka服务端没有收到心跳,就会从服务实例列表中剔除。

Eureka还有自我保护机制,当在一定时间内心跳发送失败的比例低于某个阈值(如85%)时,它不会剔除通信不正常的服务实例,并且仍然接收注册与服务的查询。

对于其他服务发现和注册中心,如Nacos,其处理心跳续约失败的方式可能有所不同。

比如临时实例和永久实例

Sentinel怎么做熔断 和 降级

是解决雪崩问题的重要手段,sentinel的熔断机制我们可以通过可视化界面去配置:

熔断机制

Sentinel的熔断机制核心思路是通过对服务的统计数据进行实时监控,当服务发生异常或者出现负载过高等情况时,快速响应并进行自我保护 :

  1. QPS:Sentinel会对服务的调用请求进行统计,统计指标可以包括服务的QPS(每秒查询率)、响应时间、错误率等。这些指标可以动态设置,根据业务需要进行定制化配置。
  2. 阈值判断:当服务的错误率或者响应时间等指标超过预设的阈值时,Sentinel会判断服务可能出现了问题。
降级规则
  1. 慢调用比例:RT平均响应时间
  2. 异常比例:当资源的每秒请求量大于等于5,并且每秒异常总数占通过量的比值超过预设的阈值时,资源进入降级状态。
  3. 异常数降级:当资源在最近一分钟内的异常数目超过预设的阈值时,会触发降级。

Sentinel的限流方式有哪些, Sentinel怎么做限流

直接(默认)QPS限流:api达到限流条件,直接限流

关联:当关联的资料达到阈值时,就限流自己。当与A关联的资源B达到阈值后,就限流A

链路:链路流控模式指的是,当从某个接口过来的资源达到限流条件时,开启限流;

Sentinel有哪几种流控效果呢?

快速失败: 该方式是默认的流量控制方式,当QPS超过任意规则的阈值后,新的请求就会被立即拒绝,拒绝方式为抛出FlowException

预热(Warm Up):系统初始化后,由于各个服务需要加载,系统需要预热,限流会从小到大恢复

排队等待:匀速器(RuleConstant.CONTROL_BEHAVIOR_RATE_LIMITER)方式。这种方式严格控制了请求通过的间隔时间,也即是让请求以均匀的速度通过,对应的是漏桶算法

你们在网关上做了哪些事情

网关在微服务架构中扮演着至关重要的角色,不仅提供了统一的访问入口,还通过其丰富的功能如动态路由、负载均衡、服务监控等,增强了系统的安全性和可维护性。此外,网关的过滤器机制使得开发者可以根据需要自定义各种过滤器,以满足特定的业务需求

浏览器发送一个请求到Gateway,它是如何调用到微服务的。

1. 请求到达API Gateway
  • 请求接收:首先,浏览器向API Gateway发送HTTP请求。这个请求可能包含URL、请求方法(如GET、POST)、请求头(Headers)、请求体(Body)等信息。
  • 路由匹配:API Gateway接收请求后,会根据请求的URL或其他信息进行路由匹配。这通常通过预定义的路由规则来实现,这些规则定义了哪些URL路径应该被转发到哪些后端服务。
2. 转发请求到微服务
  • 选择微服务:一旦API Gateway确定了请求应该被转发到哪个微服务,它就会根据这个决定来构建一个新的请求(可能修改URL、Headers等),然后通过网络(如HTTP/HTTPS)将请求发送到对应的微服务。
  • 负载均衡:如果后端有多个相同服务的实例(为了提高可用性和性能),API Gateway还可能会执行负载均衡操作,将请求分发到这些实例中的一个。
3. 微服务处理请求
  • 服务接收:微服务接收到来自API Gateway的请求后,会根据自己的业务逻辑来处理这个请求。
  • 业务逻辑处理:微服务执行相应的数据库查询、数据处理、计算等操作,并准备响应数据。
4. 响应返回给API Gateway
  • 响应准备:微服务准备好响应数据后,会构建HTTP响应(包括状态码、响应头、响应体等),并返回给API Gateway。
5. API Gateway转发响应给浏览器
  • 响应接收:API Gateway接收到来自微服务的响应后,可能会进行一些额外的处理,如修改响应头、添加额外的安全层(如CORS策略)、记录日志等。
  • 转发响应:最后,API Gateway将处理后的响应转发回给最初发起请求的浏览器。
6. 浏览器显示响应
  • 渲染:浏览器接收到响应后,会根据响应内容(如HTML、JSON、图片等)来渲染页面或更新页面内容。

SpringCloud常用组件和作用。

SpringCloud是一套基于SpringBoot之上的微服务解决方案,它通过整合一系列优秀的组件来构建和管理微服务架构。以下是SpringCloud中一些常用的组件及其作用:

Eureka:做服务注册与发现,用来解决服务之间通信问题,

Ribbon/OpenFeign:用做客户端的负载均衡,也就是解决将请求路由到微服务集群的问题,

Hystrix:断路器,它的熔断、降级策略用来解决单节点故障,

Zuul:做服务网关,它是整个微服务的大门,可以用来实现登录、权限检查等业务,

Config:分布式配置中心,用来统一管理配置所有微服务的配置文件,

Bus:消息总线,用来给各个微服务广播消息,可以实现各个微服务配置的自动刷新,

Sleuth:链路追踪,用来实时监控各个微服务建的调用关系,快速定位故障节点

Gateway的Filter有几种,怎么用

在Spring Cloud Gateway中自定义filter,主要有两种方式:全局过滤器(Global Filter)和局部过滤器(Gateway Filter)。全局过滤器作用于所有路由,而局部过滤器只作用于特定的路由。

1. 创建自定义全局过滤器:

实现SpringCloudGatewayGlobalFilter接口,并将其作为Bean添加到上下文中。这种方式适用于需要对所有请求进行处理的场景。

2. 创建自定义局部过滤器:

实现GatewayFilter接口,并通过spring.cloud.routes.filters 配置在具体的路由下,这样只会作用于当前特定的路由。

在实现自定义过滤器时,还可以通过实现Ordered接口并重写getOrder()方法来指定过滤器的执行顺序,确保过滤器按照预期的顺序被调用。

此外,Spring Cloud Gateway还支持通过配置文件的方式来配置过滤器,这为在不同环境下的部署提供了便利。


结语

🔥如果文章对你有帮助的话,欢迎💗关注、👍点赞、⭐收藏、✍️评论,支持一下小老弟,蟹蟹大咖们~ 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值