一、简介

最近在忙项目,差不多半个月没有写博客,今天正逢周末,整理一些常见的SpringCloud面试题。前不久已经总结过一篇关于SpringCloud的面试题,没有学习的小伙伴可以【SpringCloud常见面试题总结一】https://mp.csdn/console/editor/html/105620968进去总结一下。

二、面试题

【a】SpringCloud 和Dubbo区别?

区别SpringCloudDubbo
服务调用方式 Rest ApiRPC
注册中心可以是eureka,也可以是zookeeperzookeeper
网关服务网关,dubbo本身没有实现,只能通过其他第三方技术整合springcloud有Zuul路由网关,作为路由服务器,进行消费者的请求分发,springcloud支持断路器,与git完美集成配置文件支持版本控制,事物总线实现配置文件的更新与服务自动装配等等一系列的微服务架构要素

【b】REST 和RPC对比

  • RPC主要的缺陷是服务提供方和调用方式之间的依赖太强,需要对每一个微服务进行接口的定义,并通过持续继承发布,严格版本控制才不会出现冲突。
  • REST是轻量级的接口,服务的提供和调用不存在代码之间的耦合,只需要一个约定进行规范。

【c】微服务之间是如何独立通讯的?

  • 远程调用,比如feign调用,直接通过远程过程调用来访问别的service。
  • 消息中间件

【d】Eureka和Zookeeper区别

区别EurekaZookeeper
CAP原理Eureka保证了AP(A:高可用 P:分区容错性)Zookeeper保证了CP(C:一致性,P:分区容错性)
是否产生服务瘫痪Eureka存在自我保护机制,不存在服务瘫痪现象 (Eureka的自我保护机制,会导致一个结果就是不会再从注册列表移除因长时间没收到心跳而过期的服务。依然能接受新服务的注册和查询请求,但不会被同步到其他节点)在选举期间注册服务瘫痪,虽然服务最终会恢复,但选举期间不可用
节点是否平等Eureka各个节点平等存在Leader和Follower角色
分区问题Eureka采用自我保护机制解决分区问题Zookeeper采用过半数存活原则
本质Eureka本质是一个工程Zookeeper只是一个进程

【e】Eureka自我保护机制是什么?

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

【f】什么是Feigin?它的优点是什么?

Feign指的是远程服务调用。优点:

  • Feign采用的是基于接口的注解
  • Feign整合了ribbon,具有负载均衡的能力
  • Feign整合了Hystrix,具有熔断的能力

【g】什么是Spring Cloud Bus?

Spring Cloud Bus指的是消息总线,提供了跨多个实例刷新配置的功能,方便各个微服务统一刷新配置,各个微服务通过监听统一的消息总线,如RabbitMQ, 当某个服务的配置发生变化时,依赖的所有服务的配置都会自动刷新。(通过将所有微服务连接到单个消息代理来实现)

【h】负载平衡的意义什么?

优化资源使用,最大化吞吐量,最小化响应时间并避免任何单一微服务的过载。

【i】说说 RPC 的实现原理?

  • 需要有处理网络连接通讯的模块,负责连接建立、管理和消息的传输;
  • 需要有编解码的模块,因为网络通讯都是传输的字节码,需要将我们使用的对象序列化和反序列化;
  • 服务器端暴露要开放的服务接口,客户调用服务接口的一个代理实现;

【j】Ribbon负载均衡能干什么?

  • 将用户的请求平摊的分配到多个服务上;
  • 集中式LB即在服务的消费方和提供方之间使用独立的LB设施(可以是硬件,如F5, 也可以是软件,如nginx), 由该设施负责把访问请求通过某种策略转发至服务的提供方;
  • 进程内LB将LB逻辑集成到消费方,消费方从服务注册中心获知有哪些地址可用,然后自己再从这些地址中选择出一个合适的服务器;
  • Ribbon就属于进程内LB,它只是一个类库,集成于消费方进程,消费方用它来获取到服务提供方的地址;

【k】什么是 zuul路由网关?

  • 对请求的路由和过滤;
  • Zuul和Eureka进行整合,将Zuul自身注册为Eureka服务治理下的应用,同时从Eureka中获得其他微服务的消息,也即以后的访问微服务都是通过Zuul跳转到具体微服务;
  • 总体功能就是:代理 + 路由 + 过滤;

【l】分布式配置中心能干嘛?

  • 集中管理配置文件不同环境不同配置,动态化的配置更新,分环境部署比如</p><p>dev/test/prod/beta/release;
  • 运行期间动态调整配置;
  • 当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置将配置信息以REST接口的形式暴露;

【j】SpringBoot和SpringCloud,请你谈谈对他们的理解?

  • SpringBoot是一个快速整合第三方框架 ,指的是快速方便的开发单个个体的服务;
  • SpringCloud指的全局的微服务协调整理治理框架,将spring boot 开发的一个个单体服务整合并管理起来;
  • SpringBoot依赖SpringBoot,SpringCloud离不开SpringBoot;

【k】Eureka比Zookeeper好在哪里?

  • Eureka保证的是可用性和分区容错性,Zookeeper 保证的是一致性和分区容错性 。
  • Eureka还有一种自我保护机制,如果在15分钟内超过85%的节点都没有正常的心跳,那么Eureka就认为客户端与注册中心出现了网络故障。而不会像zookeeper那样使整个注册服务瘫痪。

【l】SpringCloud 的核心组件有哪些?

  • Eureka:服务注册于发现;
  • Feign:基于动态代理机制,根据注解和选择的机器,拼接请求 url 地址,发起请求;
  • Ribbon:实现负载均衡,从一个服务的多台机器中选择一台;
  • Hystrix:提供线程池,不同的服务走不同的线程池,实现了不同服务调用的隔离,避免了服务雪崩的问题;
  • Zuul:网关管理,由 Zuul 网关转发请求给对应的服务;
  • Config:分布式配置中心,提供统一管理各个微服务配置的功能;
  • Bus:消息总线,配合消息中间件实现各个微服务动态刷新配置的功能;

更多推荐

SpringCloud常见面试题总结二