微服务面试题

这里写目录标题

1.微服务是什么

微服务是一种架构风格,我们可以把应用程序划分为一组小型的、松散耦合的服务,每个服务都运行在自己的进程里面,并通过轻量级的通信机制进行通信,每个服务都可以独立部署、独立扩展、独立更新,从而提高了应用程序的可伸缩性、可维护性和可测试性。

2.你知道哪些RPC架构

RPC(Remote Procedure Call)即远程过程调用,不同于本地调用,RPC是指调用远端机器的函数或方法,且不需要关心底层的调用细节,如网络协议和传输协议等。

常见的RPC框架:

  • Dubbo
  • SpringCloud

3.SpringCloud和Dubbo有什么区别

  • 底层技术不同:前者基于HTTP协议+Rest接口,后者基于TCP协议传输。
  • 主要用途不同:前者是一个完整的微服务框架,后者是一个RPC框架。
  • 社区生态不同:前者拥有丰富的生态系统,后者生态系统相对较小。
  • 语言支持不同:前者支持多语言,后者只支持Java。

4.SpringCloud由什么组成

  • SpringCloud Eureka:服务注册与发现。
  • SpringCloud Feign:服务接口调用。
  • SpringCloud Ribbon:客户端负载均衡。
  • SpringCloud Hystrix:断路器。
  • SpringCloud Zuul:服务网关。
  • SpringCloud Config:分布式统一配置管理。

5.Eureka包含几个组件

  • Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
  • Eureka Client是一共java客户端,用于简化与Eureka Server的交互,客户端同时也就是一共内置的、使用轮询(round-robin)负载算法的负载均衡器。

6.Eureka的工作原理

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

7.说一下什么是Eureka的自我保护机制

Eureka服务端会检查最近15分钟内所有Eureka实例正常心跳占比,如果低于85%就会触发自我保护机制。触发了保护机制,Eureka将暂时把这些失效的服务保护起来,不让其过期,但这些服务也并不是永远不过期。Eureka在启动完成后,每隔60s会检查一次服务健康状态,如果这些被保护起来失效的服务过一段时间后(默认90s)还没有恢复,就会把这些服务剔除。如果在此期间服务恢复了并且实例心跳占比高于85%时,就会自动关闭自我保护机制。

8.什么是CAP原则

又称CAP原理,指的是在一个分布式系统中,强一致性(Consistency)、可用性(Availability)、分区容错性(Partition tolerance)。CAP原则指的是,这三个要素最多只能同时实现两点,不可能三者兼顾。

  • 强一致性(Consistency):访问所有的节点,得到的数据结果都是一样的。
  • 可用性(Availability):保证每个请求不管成功或者失败都有响应。
  • 分区容错性(Partition tolerance):系统中任意信息的丢失或失败不会影响系统的继续运作。

9.都是服务注册中心,Eureka比Zookeeper好在哪里

  • 在分布式系统中分区容错性是必须要保证的,因此只能保证A或C,只能AP和CP。
  • 我们在服务使用中可以容忍注册中心返回几分钟之前的注册信息,但是不能接受服务直接down掉不可用。
  • zookeeper保证的是CP,当主机的节点发生网络故障了,会选取新的主节点,响应时间过长。
  • eureka保证的是AP,Eureka的节点都是平等的,不存在主机从机,因此eureka可以很好的应对因网络故障导致部分节点失去联系的情况,而不会像zookeeper那样是整个注册中心瘫痪。

10.Ribbon的作用

主要功能是提供客户端的软件负载均衡算法,默认是轮询算法。

11.Ribbon的原理

  1. 通过拦截器对被注解@LoadBalanced修饰的RestTemplate进行拦截。
  2. 将RestTemplate中调用的服务名,解析成具体的IP地址,由于一个服务名会对应多个地址,那么在选择具体服务地址的时候,需要做负载均衡。
  3. 确定目标服务的IP和PORT后,通过Httpclient进行http的调用。

12.Ribbon和nginx的区别

nginx:反向代理实现负载均衡,相当于从nginx服务器进行请求转发。

Ribbon:客户端负载均衡,全程都是客户端操作。

13.Feign的作用

  • Feign是一个声明式的Web服务客户端,它简化了使用基于HTTP的远程服务的开发。
  • Feign是在RestTemplate和Ribbon的基础上进一步封装,使用RestTemplate实现Http调用,使用Ribbon实现负载均衡。

14.SpringCloud有几种调用接口的方式

  • Spring DiscoveryClient
  • 支持Ribbon的RestTemplate
  • Feign客户端

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

  • Ribbon:需要我们自己构建http请求,然后通过RestTemplate去发给其他服务,比较繁琐。
  • Feign:不需要自己构建Http请求,直接接口调用就行。

16.说一说什么是服务雪崩

在微服务中,假如一个或者多个服务出现故障,如果这时候,依赖的服务还在不断发起请求,或者重试,那么这些请求的压力会不断在下游堆积,导致下游服务的负载急剧增加。不断累计之下,可能会导致故障的进一步加剧,可能会导致级联式的失败,甚至导致整个系统崩溃,这就叫服务雪崩。

17.Hystrix断路器是什么

Hystrix是一个用于处理分布式系统的延迟和容错的开源库,在分布式系统里,许多依赖不可避免的会调用失败,比如超时、异常等,Hystrix能够保证在一个依赖出问题的情况下,不会导致整体服务失败,避免级联故障,以提高分布式系统的弹性。

"断路器"本身是一种开关装置,当某个服务单元发生故障之后,通过断路器的故障监控(类似熔断保险丝),向调用方返回一个符合预期的、可处理的备选响应(FallBack),而不是长时间的等待或者抛出调用方法无法处理的异常,这样就保证了服务调用方的线程不会被长时间、不必要地占用,从而避免了故障在分布式系统中得蔓延,乃至雪崩。

18.什么是服务降级、服务熔断、服务隔离

  • 服务降级:当出现请求超时、资源不足时(线程或者信号量),会进行服务降级,就是去返回fallback方法的结果。
  • 服务熔断:当失败率(网络故障或者超时造成)达到阈值自动触发降级,是一种特殊的降级。
  • 服务隔离:为隔离的服务开启一个独立的线程,这样在高并发情况下,也不影响该服务。一般使用线程池实现(还有信号量方式实现)。

19.服务降级和服务熔断的区别

  • 服务熔断是应对系统服务雪崩的一种保险措施,给出的一种特殊降级措施。而服务降级则是更加宽泛的概念,主要是对系统整体资源的合理分配以应对压力。
  • 服务熔断是服务降级的一种特殊情况,他是防止服务雪崩而采取的措施。系统发生异常或者延迟或者流量太大,都会触发该服务的服务熔断措施,链路熔断,返回兜底方法。这是对局部的一种保险措施。
  • 服务降级是对系统整体资源的合理分配。区分核心服务和非核心服务。对某个服务的访问延迟时间、异常等情况做出预估并给兜底方法。这是一种全局性的考量,对系统整体负荷进行管理。

20.什么是Zuul微服务网关

Zuul作为微服务系统的网关组件,是从设备和网站到应用程序后端的所有请求的前门。Zuul作为整个应用的流量入口,接受所有的请求,如app、网页等,并且将不同的请求转发至不同的处理微服务模块。作为边缘服务应用程序,Zuul旨在实现动态路由,监控,弹性和安全性。

21.Zuul的应用场景

  • 黑白名单
  • 日志
  • 协议适配
  • 权限认证
  • 降级限流
  • 路由

22.Gateway

功能强大丰富,性能好,维护性好,实现异步,可以替代Zuul网关。

23.什么是SpringCloud Config

集中管理配置文件,不需要每个服务编写配置文件,服务会向配置中心拉取配置

24.Nacos可以做什么

注册中心和配置中心

25.Eureka保证的是AP,那么Nacos保证的什么?默认是什么

nacos可以是AP也可以是CP,默认是AP。

相关推荐
uhakadotcom5 分钟前
视频直播与视频点播:基础知识与应用场景
后端·面试·架构
沉登c3 小时前
第 3 章 事务处理
架构
阿里云云原生3 小时前
LLM 不断提升智能下限,MCP 不断提升创意上限
云原生
阿里云云原生3 小时前
GraalVM 24 正式发布阿里巴巴贡献重要特性 —— 支持 Java Agent 插桩
云原生
数据智能老司机6 小时前
CockroachDB权威指南——CockroachDB SQL
数据库·分布式·架构
数据智能老司机6 小时前
CockroachDB权威指南——开始使用
数据库·分布式·架构
云上艺旅6 小时前
K8S学习之基础七十四:部署在线书店bookinfo
学习·云原生·容器·kubernetes
c无序7 小时前
【Docker-7】Docker是什么+Docker版本+Docker架构+Docker生态
docker·容器·架构
数据智能老司机7 小时前
CockroachDB权威指南——CockroachDB 架构
数据库·分布式·架构
矿渣渣7 小时前
RM Cortex-A7 架构中“SEV”汇编指令解析
汇编·架构