您的位置:首页 > 编程语言 > Java开发

Spring Cloud 面试题

2020-01-13 07:53 225 查看
1.什么是SpringCloud

SpringCloud是一给开发人员提供来了一系列框架的有序集合。它利用Spring Boot巧妙地简化了分布式开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器等,都可以使用Spring Boot的开发风格做到一键启动和部署。

Spring Cloud并没有重复制造轮子,它只是将目前各家公司开发的比较成熟、经得起实际考验的服务框架组合起来,通过Spring Boot风格进行再封装屏蔽掉了复杂的配置和实现原理,最终给开发者留出了一套简单易懂、易部署和易维护的分布式系统开发工具包。


2.SpringCloud由什么组成

这就有很多了,我讲几个开发中最重要的
服务注册与发现:Eureka
服务网关:Zuul
客户端负载均衡:Ribbon/Feign
断路器:Hystrix
分布式统一配置管理:Spring Cloud Config
等20几个框架,开源一直在更新

3.SpringCloud解决了那些问题

使用SpringBoot开发分布式项目时我们有这些问题,
与分布式系统相关的复杂性——网络问题,延迟开销问题,宽带问题,安全问题
服务注册与发现的问题——服务发现允许集群中的进程和服务找到彼此,建立通信
负载均衡问题——改善了夸计算机群,网络连接,中央处理单元的负载分布式
减少了性能问题——减少因各种操作导致的性能问题

4.SpringCloud支持哪些注册中心

Eureka,Consul,Zookeeper

5.SpringCloud的服务注册与发现

每个SpringCloud服务启动后会向注册中心注册本地服务器信息,比如别名,ip地址,端口号等,其他服务进行请求时先根据别名从注册中心获取到服务器Ip和端口号,将其缓存到本地,本地通过HttpClient等技术进行远程访问调用。

6.什么是Eureka

Eureka作为SpringCloud的服务注册功能服务器,他是服务注册中心,系统中的其他服务使用Eureka的客户端将其连接到Eureka Service中,并且保持心跳,这样工作人员可以通过Eureka Service来监控各个微服务是否运行正常。

7.Eureka怎么实现高可用

集群吧,注册多台Eureka,然后把SpringCloud服务互相注册,客户端从Eureka获取信息时,按照Eureka的顺序来访问。

8.什么是Eureka的自我保护模式,

默认情况下,如果Eureka Service在一定时间内没有接收到某个微服务的心跳,Eureka Service会进入自我保护模式,在该模式下Eureka Service会保护服务注册表中的信息,不在删除注册表中的数据,当网络故障恢复后,Eureka Servic 节点会自动退出自我保护模式

9.Eureka和ZooKeeper都可以提供服务注册与发现的功能,请说说两个的区别

1.ZooKeeper保证的是CP,Eureka保证的是AP
2.ZooKeeper中的节点服务挂了就要选举
在选举期间注册服务瘫痪,虽然服务最终会恢复,但是选举期间不可用的,
选举就是改微服务做了集群,必须有一台主其他的都是从
3.Eureka各个节点是平等关系,服务器挂了没关系,只要有一台Eureka就可以保证服 务可用,数据都是最新的
而查询到的数据并不是最新的,就是因为Eureka的自我保护模式导致的
4.Eureka本质上是一个工程,而ZooKeeper只是一个进程
5.Eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像ZooKeeper 一样使得整个注册系统瘫痪

CAP:
C:一致性>Consistency;
取舍:(强一致性、单调一致性、会话一致性、最终一致性、弱一致性)
A:可用性>Availability;
P:分区容错性>Partition tolerance;

10.均衡的意义是什么,

讲负载均衡的话,我先将集群把,集群就是把一个的事情交给多个人去做,假如要做1000个产品给一个人做要10天,我叫10个人做就是一天,这就是集群,负载均衡的话就是用来控制集群,他把做的最多的人让他慢慢做休息会,把做的最少的人让他加量让他做多点。


11.Ribbon是什么?

Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法

Ribbon客户端组件提供一系列完善的配置项,如连接超时,重试等。简单的说,就是在配置文件中列出后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随即连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负载均衡算法。(有点类似Nginx)

12.Feign是什么

Feign 是一个声明web服务客户端,这使得编写web服务客户端更容易

他将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建Http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。

13.Ribbon和Feign调用服务的区别

调用方式同:Ribbon需要我们自己构建Http请求,模拟Http请求然后通过RestTemplate发给其他服务,步骤相当繁琐

而Feign则是在Ribbon的基础上进行了一次改进,采用接口的形式,将我们需要调用的服务方法定义成抽象方法保存在本地就可以了,不需要自己构建Http请求了,直接调用接口就行了,不过要注意,调用方法要和本地抽象方法的签名完全一致。

14.什么是服务熔断,什么是服务降级?

熔断机制是应对雪崩效应的一种微服务链路保护机制。当某个微服务不可用或者响应时间太长时,会进行服务降级,进而熔断该节点微服务的调用,快速返回“错误"的响应信息。当检测到该节点微服务调用响应正常后恢复调用链路。在SpringCloud框架里熔断机制通过Hystrix实现, Hystrix 会监控微服务间谓用的状况,当失败的调用时,或者是5秒内调用20次,如果失败,就会启动熔断机制。

服务降级一般是从整体负荷考虑。就是当某个服务熔断之后,服务器将不再被调用,此时客户端可以自己准备个本地的 fllback回调,返回一个缺省值。这样做.虽然水平下降,但好歹可用,比直接挂掉强。

15Hystrix是什么?

在分布式系统,我们一定会依赖各种服务,那么这些个服务一定会出现失败的情况,就会导致雪崩,Hystrix就是这样的一个工具,防雪崩利器,它具有服务降级,服务熔断,服务隔离,监控等一些防止雪崩的技术。

Hystrix有四种防雪崩方式:
        服务降级:接口调用失败就调用本地的方法返回一个空
        服务熔断:接口调用失败就会进入调用接口提前定义好的一个熔断的方法,返回错误信息
        服务隔离:隔离服务之间相互影响
        服务监控:在服务发生调用时,会将每秒请求数、成功请求数等运行指标记录下来。

16.SpringCloud Bus(事件消息总线)是什么

Spring Cloud Bus 将分布式的节点用轻量的消息代理连接起来,他可以用于广播配置文件的更改或者服务直接的通信,也可以用与监控,

就是说如果修改了配置文件,发送一次请求,所有客户端便会重新读取配置文件。
        怎么配置:
                添加依赖
                配置MQ

17.什么是Spring Cloud Zuul(服务网关)

Zuul是对SpringCloud提供的成熟对的路由方案,他会根据请求的路径不同,网关会定位到指定的微服务,并代理请求到不同的微服务接口,他对外隐蔽了微服务的真正接口地址。
三个重要概念:动态路由表,路由定位,反向代理:
        动态路由表:Zuul支持Eureka路由,手动配置路由,这俩种都支持自动更新
        路由定位:根据请求路径,Zuul有自己的一套定位服务规则以及路由表达式匹配
        反向代理:客户端请求到路由网关,网关受理之后,在对目标发送请求,拿到响应之后在 给客户端

它可以和Eureka,Ribbon,Hystrix等组件配合使用,
应用场景:
对外暴露,权限校验,服务聚合,日志审计等

18.Spring Cloud怎么实现容错保护:

(1)Ribbon负载均衡的重试
        通过服务名获取服务实例,根据负载计算选择合适的实例去访问:
        服务调用失败是,可以配置重试次数,以及实例切换次数
(2)Hystrix断路器
        限流,降级,熔断
                限流:限制接口并发的访问量,限制缓冲区的大小,超出限制调用Fallback方法
                降级:出错时,一定时间访问不到是,抛出方法异常
                熔断:凡是没有从接口正常的拿到数据就掉用Fallback方法,获得一个结果
                熔断可以用在任意的java方法上,代表(http,redis,数据库)都可用

19.什么是单点登录SSO

是指在多系统应用中的一个系统中登录,便可以获得所有系统的授权,无需再登录,他包括单点登录和单点注销俩部分。

也就是说多个服务,随便在哪登录一次就可以在不同的服务访问,不需要在登录

20.什么是服务网关

服务网关就是接收整个项目的请求进行转发,他会根据请求的路径不同,网关会定位到指定的微服务,并代理请求到不同的微服务接口,他对外隐蔽了微服务的真正接口地址。

他可以做什么:
        动态路由表:Zuul支持Eureka路由,手动配置路由,这俩种都支持自动更新
        路由定位:根据请求路径,Zuul有自己的一套定位服务规则以及路由表达式匹配
        反向代理:客户端请求到路由网关,网关受理之后,在对目标发送请求,拿到响应之后在给客户端

还可以做:
        身份认证与安全:识别每个资源的验证要求,并拒绝那些与要求不符的请求。
        审查与监控:在边缘位置追踪有意义的数据和统计结果,从而带来精确的生产视图。

  • 点赞
  • 收藏
  • 分享
  • 文章举报
小杰爱吃蛋 发布了32 篇原创文章 · 获赞 35 · 访问量 8712 私信 关注
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: