java面试之SpringCloud篇
Posted Java小周
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试之SpringCloud篇相关的知识,希望对你有一定的参考价值。
目录
二、服务注册和发现是什么意思?Spring Cloud 如何实现?
一、什么是 Spring Cloud?
Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序, 提供与外部系统的集成。Spring cloud Task,一个生命周期短暂的微服务框架, 用于快速构建执行有限数据处理的应用程序。
二、服务注册和发现是什么意思?Spring Cloud 如何实现?
当我们开始一个项目时,我们通常在属性文件中进行所有的配置。随着越来越多的服务开发和部署,添加和修改这些属性变得更加复杂。有些服务可能会下降, 而某些位置可能会发生变化。手动更改属性可能会产生问题。 Eureka 服务注册和发现可以在这种情况下提供帮助。由于所有服务都在 Eureka 服务器上注册并通过调用Eureka 服务器完成查找,因此无需处理服务地点的任何更改和处理。
三、什么是 Hystrix?它如何实现容错?
Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。
四、spring cloud 的核心组件有哪些?
1、Eureka:服务注册于发现。
2、Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求。
3、Ribbon:实现负载均衡,从一个服务的多台机器中选择一台。
4、Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题。
5、Zuul:网关管理,由 Zuul 网关转发请求给对应的服务。
五、微服务之间是如何独立通讯的
1、远程过程调用(Remote Procedure Invocation):
也就是我们常说的服务的注册与发现
直接通过远程过程调用来访问别的service。
优点:
简单,常见,因为没有中间件代理,系统更简单
缺点:
只支持请求/响应的模式,不支持别的,比如通知、请求/异步响应、发布/订阅、发布/异步响应
降低了可用性,因为客户端和服务端在请求过程中必须都是可用的
2、消息:
使用异步消息来做服务间通信。服务间通过消息管道来交换消息,从而通信。
优点:
把客户端和服务端解耦,更松耦合
提高可用性,因为消息中间件缓存了消息,直到消费者可以消费
支持很多通信机制比如通知、请求/异步响应、发布/订阅、发布/异步响应
缺点:
消息中间件有额外的复杂
六、负载均衡的意义是什么?
在计算中,负载均衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多种计算资源的工作负载分布。负载均衡旨在优化资源使用,最大吞吐量,最小响应时间并避免任何单一资源的过载。使用多个组件进行负载均衡而不是单个组件可能会通过冗余来提高可靠性和可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务进程。
七、springcloud如何实现服务的注册?
1、服务发布时,指定对应的服务名,将服务注册到注册中心(eureka zookeeper)
2、注册中心加@EnableEurekaServer,服务用@EnableDiscoveryClient,然后用ribbon或feign进行服务直接的调用发现。
八、你所知道的微服务技术栈?
1、维度(springcloud)
2、服务开发:springboot spring springmvc
3、服务注册与发现:Eureka,Zookeeper
4、服务调用:Rest RPC gRpc
5、服务熔断器:Hystrix
6、服务负载均衡:Ribbon nginx
7、服务接口调用:Fegin
8、消息队列:RabbitMQ RocketMQ
9、服务配置中心管理:SpringCloudConfig
10、服务路由(API网关)Zuul
11、事件消息总线:SpringCloud Bus
九、eureka自我保护机制是什么?
当Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保护模式。
十、什么是Ribbon?
ribbon是一个负载均衡客户端,可以很好的控制htt和tcp的一些行为。feign默认集成了ribbon。
十一、什么是feigin?它的优点是什么?
1、feign采用的是基于接口的注解
2、feign整合了ribbon,具有负载均衡的能力
3、整合了Hystrix,具有熔断的能力
使用:
1、添加pom依赖。
2、启动类添加@EnableFeignClients
3、定义一个接口@FeignClient(name=“xxx”)指定调用哪个服务
十二、Ribbon和Feign的区别?
1、Ribbon和Feign都是调用其他服务的,但方式不同。
2、启动类注解不同,Ribbon是@RibbonClient, Feign的是@EnableFeignClients
3、服务指定的位置不同,Ribbon是在@RibbonClient注解上声明,Feign则是在定义抽象方法的接口中使用@FeignClient声明。
4、调用方式不同,Ribbon需要自己构建http请求,模拟http请求然后使用RestTemplate发送给其他服务,步骤相当繁琐。Feign需要将调用的方法定义成抽象方法即可。
十三、什么是Spring Cloud Bus?
spring cloud bus 将分布式的节点用轻量的消息代理连接起来,它可以用于广播配置文件的更改或者服务直接的通讯,也可用于监控。
如果修改了配置文件,发送一次请求,所有的客户端便会重新读取配置文件。
使用:
1、添加依赖
2、配置rabbimq
关于SpringCloud的分享就到这了,下期再见!
以上是关于java面试之SpringCloud篇的主要内容,如果未能解决你的问题,请参考以下文章
Java面试题超详细讲解微服务系列之十六SpringCloud篇
java技术面试第七十三讲Java面试题73 . 数据库优化之缓存