文章目录
- 1.Spring Cloud 常见的组件有哪些?
- 2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现)
- 3.Nacos配置中心热加载实现原理及关键技术
- 4.OpenFeign在微服务中的远程服务调用工作流程
- 5.你们项目负载均衡如何实现的 ?
- 6.什么是服务雪崩,怎么解决这个问题?
- 7.你们服务是怎么监控的?
- 8.微服务限流(漏桶算法、令牌桶算法)
- 9.解释一下CAP和BASE
- 10.你们采用哪种分布式事务解决方案?
- 10.1.seata的XA模式(银行业务)
- 10.2.AT模式原理(互联网业务)
- 10.3.TCC模式原理(银行业务)
- 10.4.MQ分布式事务
- 11.两阶段提交(2PC)与三阶段提交(3PC)对比
- 12.分布式服务的接口幂等性如何设计?
- 13.你们项目中使用了什么分布式任务调度
- 15.XXL-Job 处理大数据量并发任务的解决方案及底层原理
- 16.springboot 项目改造成springcloud 项目的过程
1.Spring Cloud 常见的组件有哪些?
Spring Cloud 5大组件有哪些?
- 基础的内容考察
- 回答原则:简单的问题不能答错(一道面试题就能淘汰一个人)新手和老手都要注意
面试参考回答:
面试官:Spring Cloud 5大组件有哪些?
候选人:早期我们一般认为的Spring Cloud五大组件是
- Eureka:注册中心
- Ribbon:负载均衡
- Feign:远程调用
- Hystrix:服务熔断
- Zuul/Gateway:网关
随着SpringCloudAlibba在国内兴起 , 我们项目中使用了一些阿里巴巴的组件
- 注册中心/配置中心 Nacos
- 负载均衡 Ribbon
- 服务调用 Feign
- 服务保护 sentinel
- 服务网关 Gateway
2.服务注册和发现是什么意思?(Spring Cloud 如何实现服务注册发现)
- 微服务中必须要使用的组件,考察我们使用微服务的程度
- 注册中心的核心作用是:服务注册和发现
- 常见的注册中心:eureka、nocas、zookeeper
我做过的哪个微服务项目,使用了哪个注册中心
Eureka的作用
服务注册和发现是什么意思?Spring Cloud 如何实现服务注册发现?
- 我们当时项目采用的eureka作为注册中心,这个也是spring cloud体系中的一个核心组件
- 服务注册:服务提供者需要把自己的信息注册到eureka,由eureka来保存这些信息,比如服务名称、ip、端口等等
- 服务发现:消费者向eureka拉取服务列表信息,如果服务提供者有集群,则消费者会利用负载均衡算法,选择一个发起调用
- 服务监控:服务提供者会每隔30秒向eureka发送心跳,报告健康状态,如果eureka服务90秒没接收到心跳,从eureka中剔除
我看你之前也用过nacos、你能说下nacos与eureka的区别?
- 简历上有体现
- 面试官比较熟悉nacos和eureka
我看你之前也用过nacos、你能说下nacos与eureka的区别?
-
Nacos与eureka的共同点(注册中心)
- 都支持服务注册和服务拉取
- 都支持服务提供者心跳方式做健康检测
-
Nacos与Eureka的区别(注册中心)
- Nacos支持服务端主动检测提供者状态:临时实例采用心跳模式,非临时实例采用主动检测模式
- 临时实例心跳不正常会被剔除,非临时实例则不会被剔除
- Nacos支持服务列表变更的消息推送模式,服务列表更新更及时
- Nacos集群默认采用AP(高可用)方式,当集群中存在非临时实例时,采用CP(强一致)模式;Eureka采用AP方式
-
Nacos还支持了配置中心,eureka则只有注册中心,也是选择使用nacos的一个重要原因
3.Nacos配置中心热加载实现原理及关键技术
Nacos配置中心热加载实现原理及关键技术
4.OpenFeign在微服务中的远程服务调用工作流程
OpenFeign在微服务中的远程服务调用工作流程
5.你们项目负载均衡如何实现的 ?
- 负载均衡 Ribbon,发起远程调用feign就会使用Ribbon
- Ribbon负载均衡策略有哪些 ?
- 如果想自定义负载均衡策略如何实现 ?
Ribbon负载均衡流程
- RoundRobinRule:简单轮询服务列表来选择服务器
- WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小,被选择概率较低
- RandomRule:随机选择一个可用的服务器
- BestAvailableRule:忽略那些短路的服务器,并选择并发数较低的服务器(最小连接数)
- RetryRule:重试机制的选择逻辑(按照轮询方式进行选择,如果出现宕机,会在指定时间内重试)
- AvailabilityFilteringRule:可用性敏感策略,先过滤非健康的,再选择连接数较小的实例
- ZoneAvoidanceRule:以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询(默认,区域就近)
如果想自定义负载均衡策略如何实现 ?
可以自己创建类实现IRule接口 , 然后再通过配置类或者配置文件配置即可 ,通过定义IRule实现可以修改负载均衡规则,有两种方式:
你们项目负载均衡如何实现的 ?
微服务的负载均衡主要使用了一个组件Ribbon,比如,我们在使用feign远程调用的过程中,底层的负载均衡就是使用了ribbon
Ribbon负载均衡策略有哪些 ?
- RoundRobinRule:简单轮询服务列表来选择服务器
- WeightedResponseTimeRule:按照权重来选择服务器,响应时间越长,权重越小
- RandomRule:随机选择一个可用的服务器
- ZoneAvoidanceRule:区域敏感策略,以区域可用的服务器为基础进行服务器的选择。使用Zone对服务器进行分类,这个Zone可以理解为一个机房、一个机架等。而后再对Zone内的多个服务做轮询(默认)
如果想自定义负载均衡策略如何实现 ?
提供了两种方式:
- 创建类实现IRule接口,可以指定负载均衡策略(全局)
- 在客户端的配置文件中,可以配置某一个服务调用的负载均衡策略(局部)
6.什么是服务雪崩,怎么解决这个问题?
- 什么是服务雪崩?
- 熔断降级(通过Hystix 服务熔断降级来解决 )
- 限流(预防)
服务降级
服务降级是服务自我保护的一种方式,或者保护下游服务的一种方式,用于确保服务不会受请求突增影响变得不可用,确保服务不会崩溃
服务熔断
Hystrix 熔断机制,用于监控微服务调用情况,?默认是关闭的,如果需要开启需要在引导类上添