开篇介绍

大家好,我是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回调,返回一个缺省值

什么是服务雪崩效应

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