关于java:持续输出面试题系列之SpringCloud篇

5次阅读

共计 4898 个字符,预计需要花费 13 分钟才能阅读完成。

开篇介绍

大家好,我是 Java 最全面试题库 的提裤姐,明天这篇是 JavaEE 面试题系列的第十篇,次要总结了 springCloud 相干的面试题;在后续,会沿着第一篇开篇的常识线路始终总结上来,做到日更!如果我能做到百日百更,心愿你也能够跟着百日百刷,一百天养成一个好习惯。

什么是微服务?

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

Spring Cloud 由哪些组件组成?

  • Eureka:服务注册与发现
  • Zuul:服务网关
  • Ribbon:客户端负载平衡
  • Feign:申明性的 Web 服务客户端
  • Hystrix:断路器
  • Config:分布式对立配置管理
  • 等 20 几个框架,开源始终在更新

Spring Cloud 和 dubbo 区别?

服务调用形式:

  • dubbo 是 RPC
  • springcloud 是 Rest Api

注册核心:

  • dubbo 是 zookeeper;
  • springcloud 是 eureka,也能够是 zookeeper

服务网关:

  • dubbo 自身没有实现,只能通过其余第三方技术整合;
  • springcloud 有 Zuul 路由网关,作为路由服务器,进行消费者的申请散发;springcloud 反对断路器,与 git 完满集成配置文件反对版本控制,事物总线实现配置文件的更新与服务主动拆卸等等一系列的微服务架构因素。

Eureka 的工作原理?

Eureka:服务注册核心(能够是一个集群),对外裸露本人的地址
提供者 :启动后向 Eureka 注册本人信息(地址,提供什么服务)
消费者 :向 Eureka 订阅服务,Eureka 会将对应服务的所有提供者地址列表发送给消费者,并且定期更新
心跳(续约):提供者定期通过 http 形式向 Eureka 刷新本人的状态(每 30s 定时向 EurekaServer 发动申请)

说说 Eureka 的自我爱护机制?

当一个服务未按时进行心跳续约时,在生产环境下,因为网络提早等起因,此时就把服务剔除列表并不得当,因为服务可能没有宕机。Eureka 就会把以后实例的注册信息爱护起来,不予剔除。生产环境下这很无效,保障了大多数服务仍然可用。然而有可能会造成一些挂掉的服务被剔除有提早。

Eureka 和 ZooKeeper 的区别?

1、ZooKeeper 中的节点服务挂了就要 选举 ,在选举期间注册服务瘫痪,尽管服务最终会复原,然而选举期间不可用的,选举就是改微服务做了集群,必须有一台主其余的都是从。
2、Eureka 各个节点是 平等关系 ,服务器挂了没关系,只有有一台 Eureka 就能够保障服务可用,数据都是最新的。如果查问到的数据并不是最新的,就是因为 Eureka 的自我保护模式导致的。
3、Eureka 实质上是一个 工程 ,而 ZooKeeper 只是一个 过程
4、Eureka 能够很好的应答因网络故障导致局部节点失去分割的状况,而不会像 ZooKeeper 一样使得整个注册零碎瘫痪。
5、ZooKeeper 保障的是CP,Eureka 保障的是AP

CAP 解释:
C:一致性 Consistency(取舍: 强一致性、枯燥一致性、会话一致性、最终一致性、弱一致性)
A:可用性 Availability
P:分区容错性 Partition tolerance

什么是 zuul?

zuul 是对 SpringCloud 提供的成熟对的 路由计划 ,他会依据申请的门路不同,网关会定位到指定的微服务,并代理申请到不同的微服务接口,他对外荫蔽了微服务的真正接口地址。
三个重要概念:

  • 动静路由表:Zuul 反对 Eureka 路由,手动配置路由,这俩种都反对自动更新
  • 路由定位:依据申请门路,Zuul 有本人的一套定位服务规定以及路由表达式匹配
  • 反向代理:客户端申请到路由网关,网关受理之后,在对指标发送申请,拿到响应之后在 给客户端

Zuul 的利用场景:对外裸露,权限校验,服务聚合,日志审计等

zuul 的工作流程?

在 Spring Cloud Netflix 中,Zuul 奇妙的整合了 Eureka 来实现面向服务的路由。
实际上,API 网关将本人注册到 Eureka 服务注册核心上,也会从注册核心获取所有服务以及它们的实例清单。在 Eureka 的帮忙下,API 网关曾经保护了零碎中所有 serviceId 与实例地址的映射关系。当有内部申请达到 API 网关的时候,依据申请的 URL 找到最匹配的 path,API 网关就能够晓得要将该申请 ” 路由 ” 到哪个具体的 serviceId 下来。最终通过Ribbon 的负载平衡策略 实现申请的路由。

什么是 feign?

1.feign 采纳的是 基于接口 的注解
2.feign 整合了 ribbon,具备 负载平衡 的能力
3. 整合了 Hystrix,具备 熔断 的能力

feign 的工作流程?

1、通过动静代理生成实现类
2、依据接口类的注解生命规定,解析出底层的methodhandler
3、拦截器负责对申请和返回进行包装和解决
4、通过平衡负载 http 去拜访近程服务

什么是 Hystrix?

在分布式系统,咱们肯定会依赖各种服务,那么这些个服务肯定会呈现失败的状况,就会导致雪崩,Hystrix 就是这样的一个工具,防雪崩利器,它具备服务降级,服务熔断,服务隔离,监控等一些避免雪崩的技术。
Hystrix 有四种防雪崩形式:

  • 服务降级:接口调用失败就调用本地的办法返回一个空
  • 服务熔断:接口调用失败就会进入调用接口提前定义好的一个熔断的办法,返回错误信息
  • 服务隔离:隔离服务之间相互影响
  • 服务监控:在服务产生调用时, 会将每秒申请数、胜利申请数等运行指标记录下来。

Hystrix 流程?

1、结构一个 HystrixCommandHystrixObservableCommand 对象,用于封装申请,并在构造方法配置申请被执行须要的参数;
2、执行命令,Hystrix 提供了 4 种执行命令的办法;
3、判断是否应用缓存响应申请,若启用了缓存,且缓存可用,间接应用缓存响应申请。Hystrix 反对申请缓存,但须要用户自定义启动;
4、判断熔断器是否关上,如果关上,跳到第 8 步;
5、判断线程池 / 队列 / 信号量是否已满,已满则跳到第 8 步;
6、执行 HystrixObservableCommand.construct()HystrixCommand.run(),如果执行失败或者超时,跳到第 8 步;否则,跳到第 9 步;
7、统计熔断器监控指标;
8、走 Fallback 备用逻辑
9、返回申请响应

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

服务熔断:
熔断机制是应答 雪崩效应 的一种微服务 链路爱护机制
当某个微服务不可用或者响应工夫太长时,会进行服务降级,进而熔断该节点微服务的调用,疾速返回“谬误”的响应信息。当检测到该节点微服务调用响应失常后复原调用链路。
在 SpringCloud 框架里熔断机制通过 Hystrix 实现,Hystrix 会监控微服务间调用的情况,当失败的调用到肯定阈值,缺省是 5 秒内调用 20 次,如果失败,就会启动熔断机制。
服务降级:
服务降级,个别是从整体负荷思考。就是当某个服务熔断之后,服务器将不再被调用,此时客户端能够本人筹备一个本地的fallback 回调,返回一个缺省值。

什么是服务雪崩效应?

雪崩效应是在大型互联网我的项目中,当某个服务产生宕机时,调用这个服务的其余服务也会产生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可用逐渐扩充到各个其余服务中,从而使整个我的项目的服务宕机解体。

Eureka 怎么实现高可用?

集群:
注册多台 Eureka,把 SpringCloud 服务相互注册,客户端从 Eureka 获取信息时,依照 Eureka 的程序来拜访。

ZuulFilter 罕用有哪些办法?

  • Run():过滤器的具体业务逻辑
  • shouldFilter():判断过滤器是否无效
  • filterOrder():过滤器执行程序
  • filterType():过滤器拦挡地位

如何实现动静 Zuul 网关路由转发?

通过 path 配置拦挡申请,通过 Serviceld到配置核心获取转发的服务列表,zuul 外部应用 Ribbon实现本地负载平衡和转发。

Zuul 网关如何搭建集群?

应用 Nginx 的 upstream设置 Zuul 服务集群,通过 location 拦挡申请并转发到 upstream,默认应用轮询机制对 Zuul 集群发送申请。

负载平衡的意义什么?

通俗易懂的了解:
集群:是把一个的事件交给多集体去做,如果要做 1000 个产品给一个人做要 10 天,叫 10 集体做就是一天;
负载平衡:用来管制集群,他把做的最多的人让他缓缓做劳动会,把做的起码的人让他加量让他做多点。

在计算中:
负载平衡能够改善跨计算机计算机集群,网络链接,地方处理单元或磁盘驱动器等多种计算资源的工作负载散布,负载平衡旨在优化资源应用,最大化吞吐量,最小化响应工夫并防止任何繁多资源的过载,应用多个组件进行负载平衡,而不是单个组件,可能会通过冗余来进步可靠性和可用性,负载平衡通常及专用软件或硬件,例如多层交换机或域名零碎服务器过程。

服务降级底层是如何实现的?

Hystrix 实现服务降级的性能是通过重写 HystrixCommand中的 getFallback()办法, 当 Hystrix 的 run 办法或 construct 执行产生误时转而执行 getFallback()办法。

什么是 Spring Cloud Bus?

  • Spring Cloud Bus 就像个分布式执行器,用于扩大的 Spring Boot 应用程序的配置文件,但也能够用作应用程序之间的通信通道。
  • Spring Cloud Bus 不能独自实现通信,须要配合 MQ 反对
  • Spring Cloud Bus 个别是配合 Spring Cloud Config 做配置核心的
  • Spring Cloud config 实时刷新也必须采纳 SpringCloud Bus 音讯总线

Spring Cloud Bus 原理?

发送端(endpoint)结构事件 event,将其 publish 到 context 上下文中(spring cloud bus 有一个父上下文,bootstrap),而后将事件发送到 channel 中(json 串 message),接收端从 channel 中获取到 message,将 message 转为事件 event,而后将 event 事件 publish 到 context 上下文中,最初接收端(Listener)收到 event,调用服务进行解决。
整个流程中,只有发送 / 接收端从 context 上下文中取事件和发送事件是须要咱们在代码中明确写进去的,其它局部都由框架封装实现。

SpringCloud Config 能够实现实时刷新吗?

springcloud config 实时刷新采纳 SpringCloud Bus音讯总线

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

熔断机制:
是应答雪崩效应的一种 微服务链路爱护机制
当某个微服务不可用或者响应工夫太长时,会进行服务降级,进而熔断该节点微服务的调用,疾速返回“谬误”的响应信息。当检测到该节点微服务调用响应失常后复原调用链路。
在 SpringCloud 框架里熔断机制通过 Hystrix 实现,Hystrix 会监控微服务间调用的情况,当失败的调用到肯定阈值,缺省是 5 秒内调用 20 次,如果失败,就会启动熔断机制。

服务降级:
个别是从整体负荷思考。就是当某个服务熔断之后,服务器将不再被调用,此时客户端能够本人筹备一个本地的 fallback 回调,返回一个缺省值

什么是服务雪崩效应

雪崩效应是在大型互联网我的项目中,当某个服务产生宕机时,调用这个服务的其余服务也会产生宕机,大型项目的微服务之间的调用是互通的,这样就会将服务的不可用逐渐扩充到各个其余服务中,从而使整个我的项目的服务宕机解体

正文完
 0