微服务面试题

这里写目录标题

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。

相关推荐
工业甲酰苯胺2 小时前
分布式系统架构:服务容错
数据库·架构
Java程序之猿3 小时前
微服务分布式(一、项目初始化)
分布式·微服务·架构
Karoku0665 小时前
【k8s集群应用】kubeadm1.20高可用部署(3master)
运维·docker·云原生·容器·kubernetes
Yvemil75 小时前
《开启微服务之旅:Spring Boot Web开发举例》(一)
前端·spring boot·微服务
小蜗牛慢慢爬行6 小时前
Hibernate、JPA、Spring DATA JPA、Hibernate 代理和架构
java·架构·hibernate
思忖小下8 小时前
梳理你的思路(从OOP到架构设计)_简介设计模式
设计模式·架构·eit
Yvemil79 小时前
《开启微服务之旅:Spring Boot Web开发》(二)
前端·spring boot·微服务
维李设论9 小时前
Node.js的Web服务在Nacos中的实践
前端·spring cloud·微服务·eureka·nacos·node.js·express
探索云原生10 小时前
在 K8S 中创建 Pod 是如何使用到 GPU 的: nvidia device plugin 源码分析
ai·云原生·kubernetes·go·gpu