Java最全面试总结——8.SpringCloud篇

1、什么是SpringCloud

Spring cloud 流应用程序启动器是基于 Spring Boot Spring 集成应用程序,提供与外部系统的集 成。Spring cloud Task ,一个生命周期短暂的微服务框架,用于快速构建执行有限数据处理的应用 程序。

2、什么是微服务

微服务架构是一种架构模式或者说是一种架构风格,它提倡将单一应用程序划分为一组小的服务, 每个服务运行在其独立的自己的进程中,服务之间相互协调、互相配合,为用户提供最终价值。服
务之间采用轻量级的通信机制互相沟通(通常是基于 HTTP RESTful API , 每个服务都围绕着具体 的业务进行构建,并且能够被独立的构建在生产环境、类生产环境等。另外,应避免统一的、集中式的服务管理机制,对具体的一个服务而言,应根据业务上下文,选择合适的语言、工具对其进行 构建,可以有一个非常轻量级的集中式管理来协调这些服务,可以使用不同的语言来编写服务,也 可以使用不同的数据存储。

3SpringCloud有什么优势

使用 Spring Boot 开发分布式微服务时,我们面临以下问题
(1 )与分布式系统相关的复杂性 - 这种开销包括网络问题,延迟开销,带宽问题,安全问题。 (2 )服务发现 - 服务发现工具管理群集中的流程和服务如何查找和互相交谈。它涉及一个服务目 录,在该目录中注册服务,然后能够查找并连接到该目录中的服务。 (3 )冗余 - 分布式系统中的冗余问题。
(4 )负载平衡 -- 负载平衡改善跨多个计算资源的工作负荷,诸如计算机,计算机集群,网络链路, 中央处理单元,或磁盘驱动器的分布。
(5 )性能 - 问题 由于各种运营开销导致的性能问题。
(6 )部署复杂性 -Devops 技能的要求。

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

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

5 Eurekazookeeper都可以提供服务注册与发现的功能,请 说说两个的区别?

Zookeeper 保证了 CP C :一致性, P :分区容错性), Eureka 保证了 AP A :高可用)
  1. 当向注 册中心查询服务列表时,我们可以容忍注册中心返回的是几分钟以前的信息,但不能容忍直接 down掉不可用。也就是说,服务注册功能对高可用性要求比较高,但zk会出现这样一种情况,当master节点因为网络故障与其他节点失去联系时,剩余节点会重新选leader。问题在于,选取leader时间过长,30 ~ 120s,且选取期间zk集群都不可用,这样就会导致选取期间注册服务瘫痪。 在云部署的环境下,因网络问题使得zk集群失去master节点是较大概率会发生的事,虽然服务能够 恢复,但是漫长的选取时间导致的注册长期不可用是不能容忍的。
  1. Eureka保证了可用性,Eureka各个节点是平等的,几个节点挂掉不会影响正常节点的工作,剩余 的节点仍然可以提供注册和查询服务。而Eureka的客户端向某个Eureka注册或发现时发生连接失 败,则会自动切换到其他节点,只要有一台Eureka还在,就能保证注册服务可用,只是查到的信息 可能不是最新的。除此之外,Eureka还有自我保护机制,如果在15分钟内超过85%的节点没有正常 的心跳,那么Eureka就认为客户端与注册中心发生了网络故障,此时会出现以下几种情况:
                ①、 Eureka不在从注册列表中移除因为长时间没有收到心跳而应该过期的服务。
                ②、Eureka仍然能够 接受新服务的注册和查询请求,但是不会被同步到其他节点上(即保证当前节点仍然可用)
                ③、当 网络稳定时,当前实例新的注册信息会被同步到其他节点。
因此, Eureka 可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像 Zookeeper 那样
使整个微服务瘫痪

6SpringBootSpringCloud的区别?

  • SpringBoot专注于快速方便的开发单个个体微服务。
  • SpringCloud是关注全局的微服务协调整理治理框架,它将SpringBoot开发的一个个单体微服务整 合并管理起来, 为各个微服务之间提供,配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策 竞选、分布式会话等等集成服务。
  • SpringBoot可以离开SpringCloud独立使用开发项目, 但是SpringCloud离不开SpringBoot ,属于 依赖的关系. SpringBoot专注于快速、方便的开发单个微服务个体,SpringCloud关注全局的服务治理框架。

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

在计算中,负载平衡可以改善跨计算机,计算机集群,网络链接,中央处理单元或磁盘驱动器等多 种计算资源的工作负载分布。负载平衡旨在优化资源使用,最大化吞吐量,最小化响应时间并避免 任何单一资源 的过载。使用多个组件进行负载平衡而不是单个组件可能会通过冗余来提高可靠性和 可用性。负载平衡通常涉及专用软件或硬件,例如多层交换机或域名系统服务器进程。

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

Hystrix 是一个延迟和容错库,旨在隔离远程系统,服务和第三方库的访问点,当出现故障是不可避
免的故障时,停止级联故障并在复杂的分布式系统中实现弹性。
通常对于使用微服务架构开发的系统,涉及到许多微服务。这些微服务彼此协作。
思考以下微服务
假设如果上图中的微服务 9 失败了,那么使用传统方法我们将传播一个异常。但这仍然会导致整个 系统崩溃。
随着微服务数量的增加,这个问题变得更加复杂。微服务的数量可以高达 1000. 这是 hystrix 出现的 地方 我们将使用Hystrix 在这种情况下的 Fallback 方法功能。我们有两个服务 employee-consumer 使用由employee-consumer 公开的服务。
简化图如下所示
现在假设由于某种原因, employee-producer 公开的服务会抛出异常。我们在这种情况下使用
Hystrix 定义了一个回退方法。这种后备方法应该具有与公开服务相同的返回类型。如果暴露服务中
出现异常,则回退方法将返回一些值。

9、什么是Hystrix断路器?我们需要它吗?

由于某些原因, employee-consumer 公开服务会引发异常。在这种情况下使用 Hystrix 我们定义了
一个回退方法。如果在公开服务中发生异常,则回退方法返回一些默认值。
如果 firstPage method() 中的异常继续发生,则 Hystrix 电路将中断,并且员工使用者将一起跳过 firtsPage方法,并直接调用回退方法。 断路器的目的是给第一页方法或第一页方法可能调用的其他 方法留出时间,并导致异常恢复。可能发生的情况是,在负载较小的情况下,导致异常的问题有更 好的恢复机会 。

10、说说 RPC 的实现原理

首先需要有处理网络连接通讯的模块,负责连接建立、管理和消息的传输。其次需要有编 解码的模块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化。剩下的就是客户端和服务器端的部分,服务器端暴露要开放的服务接口,客户调用服 务接口的一个代理实现,这个 代理实现负责收集数据、编码并传输给服务器然后等待结果返回。

11eureka自我保护机制是什么?

Eureka Server 节点在短时间内丢失了过多实例的连接时(比如网络故障或频繁启动关闭客户
端)节点会进入自我保护模式,保护注册信息,不再删除注册数据,故障恢复时,自动退出自我保
护模式。

12,什么是Ribbon

ribbon 是一个负载均衡客户端,可以很好的控制 htt tcp 的一些行为。 feign 默认集成了 ribbon

13,什么是 feigin ?它的优点是什么?

1.feign 采用的是基于接口的注解
2.feign 整合了 ribbon ,具有负载均衡的能力
3. 整合了 Hystrix ,具有熔断的能力
使用 :
        1.添加 pom 依赖。
        2.启动类添加 @EnableFeignClients
        3.定义一个接口 @FeignClient(name=“xxx”)指定调用哪个服务

14 RibbonFeign的区别?

1.Ribbon 都是调用其他服务的,但方式不同。
2. 启动类注解不同, Ribbon 是@RibbonClient feign 的是 @EnableFeignClients。
3. 服务指定的位置不同, Ribbon 是在 @RibbonClient 注解上声明,Feign 则是在定义抽象方法的接口中使用 @FeignClient 声明。
4. 调用方式不同, Ribbon 需要自己构建http请求,模拟 http 请求。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诗九趁年华

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值