Java面试题总结记录(8)—— SpringCloud篇

1、什么是SpringCloud

Spring Cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。

Spring Cloud Task,一个生命周期短暂的微服务框架爱,用于快速构建执行有限数据处理的应用程序。


2、什么是微服务

微服务是一种架构模式或是一种架构风格,主要是对单一应用程序划分一组小的服务,是按照分治思想设计的架构模式。

每个服务运行在其独立的进程中,服务之间相互协调、互相配合,为用户提供最终价值。

服务之间采用轻量级的通信机制互相沟通(通常是基于HTTP的RESTful API),每个服务都围绕着具体的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。


3、什么是服务熔断?什么是服务降级?

  • (1)熔断机制: 是一种应对雪崩效应的微服务链路保护机制。
    • 熔断时期: 当某个微服务不可用或响应时间太长时,会进行服务降级并且熔断该节点微服务的调用并快速返回“错误”响应。
    • 恢复熔断: 当检测到该节点微服务调用响应正常后恢复调用链路。
    • SpringCloud实现: 在SpringCloud框架里熔断机制通过Hystrix实现,Hystrix会监控微服务间调用状态,当失败的调用到一定阈值(5秒内调用20次),如果失败,就会启动熔断机制。
  • (2)服务降级: 一般是从整体负荷考虑。当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备一个本地的fallback回调,返回一个缺省值,虽然水平下降,保持服务正常运行。
  • (3)Hystrix相关注解 @EnableHystrix: 开启熔断 @HystrixCommand(fallbackMethod="XXX"),声明一个失败回滚处理函数XXX,当被注解的方法执行超时(默认是1000 ms),就会执行fallback函数,返回错误提示。

4、Eureka和zookeeper都可以提供服务注册与发现的功能,请说说两个的区别?

注册中心的原则是ACP原则:高可用性、一致性、分区容错性

ZK 保证了 CP,Eureka 保证了 AP。

(1)ZK的缺点: 当master节点因为网络故障而丢失时,剩余节点会重选leader,由于选举机制时间过长,大致在30s~120s,且选举期间zk集群不可用,导致服务瘫痪。在云部署的环境下,网络原因使得master节点丢失是高概率事件。

(2)Eureka的缺点: 无法保证查询到的信息可能不是最新的,但依旧可以保证服务持续提供访问。

(3)Eureka的自我保护机制: 当在15分钟内超过85%的节点没有正常心跳(心跳机制),则认为客户端与注册中心发生网络故障,会发生以下几种情况:

  • Eureka不再从注册列表中移除因为长时间没有收到心跳而过期的服务。
  • Eureka仍然接受新服务的注册和查询请求,但不同步到其它节点(保证当前节点可用)。
  • 当网络稳定时,当前实例新的注册信息回同步到其它节点上。

4、SpringBoot和SpringCloud的区别?

Spring Boot 专注于快速方便的开发当个个体微服务。

Spring Cloud 关注于全局的微服务协调整理治理框架,它将Spring Boot开发的一个个单体微服务整合并管理起来,为各个微服务之间提供配置管理,服务发现,断路器,路由,微代理,事件总线,全局锁,决策竞选,分布式会话等等集成服务。

SpringBoot不依赖于SpringCloud开


5、负载平衡的意义什么?

负载均衡的意义是在我们有多个服务点时,可以有一定策略进行选择将用户的请求转发到哪一个服务点上。

可以优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一资源的过载。


6、什么是Hystrix?它如何实现容错?

当我们的微服务链中的一环产生了不可逆的故障,如果不处理则会有服务瘫痪的风险。
所以 SpringCloud 提供了一种叫 Hystrix 的延迟和容错库,它会在微服务报错而挂掉的时候,熔断该服务,并返回“错误信息”,当检测到服务正常使用时恢复调用链路,而且Hystrix提供了 fallback 方法,用来回滚信息,发起请求收到的是本次服务前的信息,用以保持服务继续提供。


7、说说 RPC 的实现原理

(1)RPC是什么? RPC(Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务。

(2)需要的组件:

  • 处理网络连接通讯的模块: 负责连接建立、管理和消息的传输。
  • 编/解码的模块: 因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化。
  • 客户端和服务器端的部分: 服务器端暴露服务接口;客户调用代理服务的接口实现,收集数据、编码并传输给服务器等待结果返回。

8、什么是Ribbon?

Ribbon是一个负载均衡客户端,可以很好的控制HTTP和TCP的一些行为,Feign默认集成ribbon。


9、什么是 feign ?它的优点是什么?

(1)Feign概念: Ferign 是一中 Web Service 客户端,用来模拟 URL 请求微服务。

(2)优点:

  • 基于接口的注解
  • Feign集成了ribbon,具有负载均衡功能
  • 整合了Hystrix,具备熔断的能力

(3)使用:

  • 引入依赖
  • 开启Feign注解,@EnableFeginClients
  • 定义一个接口@FeginClient(name="xxx")指定调用哪个服务

10、 Ribbon和Feign的区别?

(1)调用服务方式不同。
(2)启动类注解不同: Ribbon@RibbonClientFeign 的是 @EnableFeignClients
(3)服务指定位置不同: Ribbon@RibbonClient上进行指定 ; Feign 的是 @EnableFeignClients上进行指定
(4)调用方式不同: Ribbon是构建http请求,Feign 是模拟http请求

猜你喜欢

转载自blog.csdn.net/Zain_horse/article/details/131881824
今日推荐